您现在的位置是:首页 > 文章详情

docker学习系列14 使用haproxy实现mysql集群的负载均衡

日期:2018-08-24点击:380

上节中我们创建了 mysql 集群。
实际工作中,我们不希望让某一数据库节点处理所有的请求,这样的话单个负载高,性能差。

img_c331b65927409d43011bc2275e863f90.png
image.png

在这里我们使用haproxy作为负载均衡的中间件,类似的还有LVS,但是好像不支持虚拟机,在docker中用不了。

img_55677de6a1ed45dd195e3d70710166cb.png
image.png

实现流程:

  1. 下载镜像 docker pull haproxy
  2. 宿主机创建 haproxy 的配置文件,比如路径是 D:\Docker\haproxy\haproxy.cfg
  3. 最重要的就是配置文件了。这里内容如下:
global daemon # nbproc 1 # pidfile /var/run/haproxy.pid # 工作目录 chroot /usr/local/etc/haproxy defaults log 127.0.0.1 local0 err #[err warning info debug] mode http #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK retries 2 #两次连接失败就认为是服务器不可用,也可以通过后面设置 option redispatch #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器 option abortonclose #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接 option dontlognull #日志中不记录负载均衡的心跳检测记录 maxconn 4096 #默认的最大连接数 timeout connect 5000ms #连接超时 timeout client 30000ms #客户端超时 timeout server 30000ms #服务器超时 #timeout check 2000 #=心跳检测超时 ######## 监控界面配置 ################# listen admin_status # 监控界面访问信息 bind 0.0.0.0:8888 mode http # URI相对地址 stats uri /dbs # 统计报告格式 stats realm Global\ statistics # 登录账户信息 stats auth admin:123456 ########frontend配置############## ######## mysql负载均衡配置 ############### listen proxy-mysql bind 0.0.0.0:3306 mode tcp # 负载均衡算法 # static-rr 权重, leastconn 最少连接, source 请求IP, 轮询 roundrobin balance roundrobin # 日志格式 option tcplog # 在 mysql 创建一个没有权限的haproxy用户,密码为空。 haproxy用户 # create user 'haproxy'@'%' identified by ''; FLUSH PRIVILEGES; option mysql-check user haproxy # 这里是容器中的IP地址,由于配置的是轮询roundrobin,weight 权重其实没有生效 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 # 使用keepalive检测死链 # option tcpka ######################################### 
  1. 启动 haproxy 的容器,镜像名称为 h1,网络名称使用上节中创建的 pxc-network,就是和 mysql 集群处于同一网络。
    docker run -it -d -p 4001:8888 -p 4002:3306 -v D:/Docker/haproxy:/usr/local/etc/haproxy --name h1 --net=pxc-network
  2. 进去容器,并让 haproxy 加载配置
    docker exec -it h1 bash
    haproxy -f /usr/local/etc/haproxy/
  3. 宿主机打开 http://localhost:4001/dbs 这是haproxy 提供的图形界面
img_f7a05508207f379b1308f2d29fb3a0c1.png
image.png

可以看到每个mysql节点运行状态是绿色,说明正常。

  1. 测试,停掉一个数据库节点 docker stop pxc_node1 ,发现有一个变红了。
img_a8040cca20d409f1c8a3a5b0085d1873.png
image.png
  1. 项目中可以使用配置的 4002 来连接数据库,这样请求会被分发到各个子节点。

总结:

  1. 数据库的负载均衡配置还是比较简单的,关键是负载均衡算法,如果每个数据库节点配置都一样,可以使用轮询算法,如果不一样,可以使用权重算法,让配置高的多接收请求。
  2. 官方的教程

问题:

  1. 启动停掉的节点 docker start pxc_node1,mysql恢复不起来了。待研究。有谁知道麻烦告诉我。
img_1677c84125b95d6898f65328efc09369.png
image.png
原文链接:https://yq.aliyun.com/articles/681815
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章