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
实验目的:
客户机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
实验环境:
实验目的:
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上创建的数据库
+--------------------+