安装Haproxy负载均衡三

2019-04-06  本文已影响0人  最底层的技术渣

1、安装Haproxy镜像

docker pull haproxy
image.png

2、导出镜像包(可忽略)

docker save docker.io/haproxy > /home/haproxy.tar.gz
image.png

3、修改haproxy镜像名称并删除原镜像(可忽略)

docker tag docker.io/haproxy haproxy
docker rmi docker.io/haproxy
image.png

4、创建haproxy配置文件(镜像不包含配置文件,创建了容器也无法组成数据库的负载均衡,宿主机上编写Haproxy配置文件)

vi /home/soft/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:abc123456
#数据库负载均衡
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 名字 数据库ip:容器端口   权重  
   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  
server 参数说明

5、创建两个Haproxy容器

#创建第1个Haproxy负载均衡服务器,8888监控画面端口 (最后的haproxy 为镜像的名称)
docker run -it -d -p 4001:8888 -p 4002:3306 -v /home/soft/haproxy:/usr/local/etc/haproxy --name h1 --privileged --net=net1 --ip 172.18.0.7 haproxy 
#进入h1容器,启动Haproxy
docker exec -it h1 bash
haproxy -f /usr/local/etc/haproxy/haproxy.cfg  //加载文件映射后的地址
#创建第2个Haproxy负载均衡服务器
docker run -it -d -p 4003:8888 -p 4004:3306 -v /home/soft/haproxy:/usr/local/etc/haproxy --name h2 --privileged --net=net1 --ip 172.18.0.8 haproxy
#进入h2容器,启动Haproxy
docker exec -it h2 bash
haproxy -f /usr/local/etc/haproxy/haproxy.cfg //执行命令启动中间件,实现负载均衡
image.png

6、创建haproxy账号,来登录数据库发送心跳检测

create user 'haproxy'@'%' identified by '';

7、登录前端查看监控画面

0.0.0.0:4001/dbs admin abc123456

8、停止某个节点做测试

docker stop node1
image.png

有可能遇到的问题:

一、创建容器时

在执行docker exec -it h1 bash后出现Error response from daemon: Container c0e806f3588b2915eb7a67 is not running错误。
解决方法及步骤思路:
1,对比正在运行的容器和全部容器,发现h1容器已经创建成功,但是未启动

docker ps
docker ps -a
image.png

2,启动创建的容器,发现还是报错

docker start h1
docker exec -it 容器ID bash
image.png

3,查看docker运行日志,发现原来是在配置文件时复制参数少了一些字符,改正就好了

docker logs 容器ID
image.png

二、停止节点后,node1节点恢复时闪退问题

这个要从PXC集群的节点管理说起,PXC节点的数据目录是/var/lib/mysql,好在这个目录被我们映射到数据卷上了。比如你访问v1数据卷就能看到node1的数据目录。这其中有个grastate.dat的文件,它里面有个safe_to_bootstrap参数被PXC用来记载谁是最后退出PXC集群的节点。比如node1是最后关闭的节点,那么PXC就会在把safe_to_bootstrap设置成1,代表node1节点最后退出,它的数据是最新的。下次启动必须先启动node1,然后其他节点与node1同步。
如果你在PXC节点都正常运行的状态下关闭宿主机Docker服务或者电源,那么PXC来不及判断谁是最后退出的节点,所有PXC节点一瞬间就都关上了,哪个节点的safe_to_boostrap参数就都是0。解决这个故障也很好办,那就是挑node1,把该参数改成1,然后正常启动node1,再启动其他节点就行了。

1、查看node1的数据卷v1

docker volume inspect v1

2.修改grastate.dat文件

cd  /var/lib/docker/volumes/v1/_data
vim grastate.dat

3、将参数safe_to_boostrap中的0改成1
4、再启动node1就成功了
备注:如果遇到其它问题,你有更好的解决方法,又或者哪里有错误,都可以留言,我们一起探讨哦!!!,看到这了,就喜欢或者留个言吧 (* ̄︶ ̄)。
上一篇 下一篇

猜你喜欢

热点阅读