美文网首页
安装Haproxy负载均衡三

安装Haproxy负载均衡三

作者: 最底层的技术渣 | 来源:发表于2019-04-06 13:00 被阅读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 参数说明
    • MySQL_1 自定义名字
    • 172.18.0.2 数据库ip
    • 3306 容器端口
    • check心跳检测(可跟几秒执行等参数)
    • weight1 权重
    • maxconn 2000 最大连接数

    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就成功了
    备注:如果遇到其它问题,你有更好的解决方法,又或者哪里有错误,都可以留言,我们一起探讨哦!!!,看到这了,就喜欢或者留个言吧 (* ̄︶ ̄)。

    相关文章

      网友评论

          本文标题:安装Haproxy负载均衡三

          本文链接:https://www.haomeiwen.com/subject/wvjxiqtx.html