docker技术快速实现前后端项目的集群化⑥基于haproxy创建pxc集群的负载均衡
docker技术快速实现前后端项目的集群化⑥基于haproxy创建pxc集群的负载均衡
# 创建存放haproxy的映射目录和负载均衡配置 # mkdir /data/haproxy # vim /data/haproxy/haproxy.cfg global #工作目录 chroot /usr/local/etc/haproxy #日志文件,使用rsyslog服务中local5日志设备(/var/log/local5),等级info log 127.0.0.1 local5 info #守护进程运行 daemon defaults log global mode http #日志格式 option httplog #日志中不记录负载均衡的心跳检测记录 option dontlognull #连接超时(毫秒) timeout connect 5000 #客户端超时(毫秒) timeout client 50000 #服务器超时(毫秒) timeout server 50000 #监控界面 listen admin_stats #监控界面的访问的IP和端口 bind 0.0.0.0:8888 #访问协议 mode http #URI相对地址 stats uri /dbs #统计报告格式 stats realm Global\ statistics #登陆帐户信息 stats auth admin:admin #数据库负载均衡 listen proxy-mysql #访问的IP和端口 bind 0.0.0.0:3306 #网络协议 mode tcp #负载均衡算法(轮询算法) #轮询算法:roundrobin #权重算法:static-rr #最少连接算法:leastconn #请求源IP算法:source balance roundrobin #日志格式 option tcplog #在MySQL中创建一个没有权限的haproxy用户,密码为空。Haproxy使用这个账户对MySQL数据库心跳检测 option mysql-check user haproxy server MySQL_1 172.18.0.2:3306 check weight 1 maxconn 2000 server MySQL_2 172.18.0.3:3306 check weight 1 maxconn 2000 server MySQL_3 172.18.0.4:3306 check weight 1 maxconn 2000 server MySQL_4 172.18.0.5:3306 check weight 1 maxconn 2000 server MySQL_5 172.18.0.6:3306 check weight 1 maxconn 2000 #使用keepalive检测死链 option tcpka
启动haproxy的容器,并且进入容器启动Haproxy这个程序
# 启动名称为h1的docker
[root@server01 haproxy]# docker run -it -d -p 4001:8888 -p 4002:3306 -v /data/haproxy:/usr/local/etc/haproxy --name h1 --privileged --net=net1 --ip 172.18.0.7 haproxy
# 进入容器,启动Haproxy程序
[root@server01 haproxy]# docker exec -it h1 /bin/bash
root@f9ee51b26ac0:/# haproxy -f /usr/local/etc/haproxy/haproxy.cfg
创建haproxy监控mysql数据库的专用账户(不能登录数据库的一个账号)
create user 'haproxy'@'%' identified by '';
# 登录监控页面
通过haproxy进行操作
关闭其中的两个节点,可以看到haproxy就将两个剔除掉了
通过haproxy插入数据可以正常同步到没有关闭的节点中,重新启动停掉的节点后能正常同步新增加的数据,说明集群可以正常运行
对其中的node mysql节点进行同步端口屏蔽,插入数据可以验证数据库的强一致性
进入pxcnode02进行数据强一致性测试
[root@server01 ~]# docker exec -u 0 -it pxcnode02 sh
sh-4.2# yum install iptable-service -y
# 添加防火墙策略,关闭数据同步的端口
sh-4.2# iptables -A INPUT -p tcp --dport 4567 -j DROP
sh-4.2# iptables -A OUTPUT -p tcp --dport 4567 -j DROP
# 向pxcnode02中写入数据发现无法同步
通过root权限进入容器的方法
# docker exec -it -u 0 pxcnode01 /bin/bash