Haproxy

Haproxy负载均衡服务器


Haproxy的优点

1、开源免费

2、单进程的工作模式

3、支持拒绝连接,可以防止DDOS攻击

4、支持透明代理

四层负载和七层负载

Nginx/Haproxy/LVS:传输层(四层)负载,基于ip和端口实现,传输的速度非常快,负载不做任何的解析,直接将客户端的请求交给后端服务器,不安全

Nginx/Haproxy:应用层(七层)负载,负载均衡服务器会和客户端建立tcp连接,接收其内容,并通过URL的路径进行解析,过滤出客户端的请求的资源(index.php),会根据过滤出的请求交给后端比较适合的服务器,可以拒绝空连接(防止DDOS),速度比较慢,相对安全。同样也支持四层

Nginx的二拖四属于四层负载,通过LVS就可以做到

Haproxy的调度算法

roundrobin:动态轮询,添加权重(weight)后不需要重启Haproxy

static-rr:静态轮询,添加权重(weight)后需要重启Haproxy才能生效

leastconnect:最小连接

source:源地址散列

部署Haproxy负载web服务器

实验环境:

客户端:192.168.1.1

Haproxy:192.168.1.4

web1:192.168.1.6

web2:192.168.1.7

Haproxy负载web

实验目的:

客户机1.1通过访问Haproxy1.4获取后端web1和web2的页面,并进行轮询

实验步骤:

第一步:

实验环境使用yum部署web

以下两台做相同的操作

web1:192.168.1.6

web2:192.168.1.7

[root@localhost ~]# yum -y install httpd
[root@localhost ~]# systemctl restart httpd

web1:

[root@localhost ~]# echo "cyj" >> /var/www/html/index.html

web2:

[root@localhost ~]# echo "pjf" >> /var/www/html/index.html

第二步:

部署Haproxy:192.168.1.4

安装Haproxy

[root@localhost ~]# yum -y install pcre-devel bzip2-devel
[root@localhost ~]# tar zxf haproxy-1.4.24.tar.gz -C /usr/src
[root@localhost ~]# cd /usr/src/haproxy-1.4.24/
# 进行编译时,需要对应系统的内核版本号
[root@localhost haproxy-1.4.24]# uname -r
3.10.0-862.el7.x86_64
[root@localhost haproxy-1.4.24]# make TARGET=linux310 PREFIX=/usr/local/haproxy
# linux310就是3.10
[root@localhost haproxy-1.4.24]# make install PREFIX=/usr/local/haproxy
install -d /usr/local/haproxy/sbin
install haproxy /usr/local/haproxy/sbin
install -d /usr/local/haproxy/share/man/man1
install -m 644 doc/haproxy.1 /usr/local/haproxy/share/man/man1
install -d /usr/local/haproxy/doc/haproxy
for x in configuration architecture haproxy-en haproxy-fr; do \
    install -m 644 doc/$x.txt /usr/local/haproxy/doc/haproxy ; \
done

优化命令路径

[root@localhost ~]# ln -s /usr/local/haproxy/sbin/* /usr/sbin

建立配置文件和启动脚本

[root@localhost ~]# mkdir /etc/haproxy    # 创建配置文件存放目录
[root@localhost ~]# cp /usr/src/haproxy-1.4.24/examples/haproxy.cfg /etc/haproxy/   # 复制配置文件
[root@localhost ~]# cp /usr/src/haproxy-1.4.24/examples/haproxy.init /etc/init.d/haproxy # 复制启动脚本
[root@localhost ~]# chmod +x /etc/init.d/haproxy  # 启动脚本添加执行权限

修改配置文件

[root@localhost ~]# vim /etc/haproxy/haproxy.cfg 
# 注释全局配置中这一行
#chroot /usr/share/haproxy   # 安装路径
# 注释默认配置中这一行
#redispatch    # 客户端访问时产生cookie的对应节点坏掉,就会直接定向到另一台web,影响轮询效果,生成环境中不需要注释
这行以下内容全部清空,自行写入
listen  appli1-rewrite 0.0.0.0:10001
在最后进行添加:
listen webservers 0.0.0.0:80            # web集群的名称为webservers,监听所有主机的80端口
        balance roundrobin                # 轮询方式为动态轮询
        option httpchk GET /index.html    # 给后端节点进行后端进行健康检查,以GET方式
        server web_one 192.168.1.6:80 check inter 2000 rise 3 fall 3    
        # server web_one 192.168.1.6:80   //节点服务器
        # check   //对该节点进行健康检查
        # inter 2000   //每隔2000毫秒进行检测
        # rise 3   //连续访问三次,都正常,则该节点健康
        # fall 3 //连续访问三次,都失败,则该节点不健康
        # 还可以继续添加 weight(权重)、maxconn(最大连接)、backup(当前节点为备份节点,主节点故障时生效)
        server web_two 192.168.1.7:80 check inter 2000 rise 3 fall 3

添加haproxy为系统服务,方便使用systemctl进行管理

[root@localhost ~]# chkconfig --add /etc/init.d/haproxy     #添加为系统服务
[root@localhost ~]# systemctl start haproxy     # 启动服务

第三步:

验证:

使用clien(192.168.1.1)访问Haproxy的ip或者域名即可

注意防火墙的关闭或者开端口

[root@localhost ~]# curl 192.168.1.4
cyj
[root@localhost ~]# curl 192.168.1.4
pjf

部署Haproxy负载mysql服务器

根据上述实验环境搭建mysql

实验环境:

HaMysql

实验目的:

client通过mysql的多次登录切换到后端的不同mysql

实验步骤:

第一步:

实验环境中使用yum安装mysql

mysql1:192.168.1.6

mysql2:192.168.1.7

两台mysql做相同的操作

[root@localhost ~]# yum -y install mariadb*
[root@localhost ~]# systemctl restart mariadb

第二步:

配置mysql服务端数据

为了实验效果,两台mysql中的数据不会一样,两台创建的数据库名分别是one和two

mysql1:192.168.1.6

[root@localhost ~]# mysql -uroot
MariaDB [(none)]> create database one;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> grant all on *.* to 'root'@'192.168.1.%' identified by '123.com';
Query OK, 0 rows affected (0.01 sec)

mysql2:192.168.1.7

[root@localhost ~]# mysql -uroot
MariaDB [(none)]> create database two;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> grant all on *.* to 'root'@'192.168.1.%' identified by '123.com';
Query OK, 0 rows affected (0.01 sec)

第三步:

配置Haproxy:192.168.1.4

[root@localhost ~]# vim /etc/haproxy/haproxy.cfg 
# 修改默认配置下的mode  http为以下
        mode    tcp
        option  tcplog
# 添加mysql群集,关键字含义参考负载web
listen dbservers 0.0.0.0:3306
        balance roundrobin
        server db_one 192.168.1.6:3306 check port 3306 maxconn 100
        server db_two 192.168.1.7:3306 check port 3306 maxconn 100

[root@localhost ~]# systemctl restart haproxy

第四步:

验证:

client:192.168.1.1

作为访问客户端,也需要安装mysql

[root@localhost ~]# yum -y install mariadb*
[root@localhost ~]# systemctl restart mariadb

登录mysql进行验证

[root@localhost ~]# mysql -uroot -p123.com -P3306 -h 192.168.1.4
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| one                |     # mysql1上创建的数据库
| performance_schema |
| test               |
+--------------------+
[root@localhost ~]# mysql -uroot -p123.com -P3306 -h 192.168.1.4
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
| two                |        # mysql上创建的数据库
+--------------------+

评论




正在载入...
PoweredHexo
HostedAliyun
DNSAliyun
ThemeVolantis
UV
PV
BY-NC-SA 4.0