mysql负载均衡 docker简易搭建MySQL集群的负载均衡

文章浏览阅读5k次,点赞2次,收藏16次。docker简易搭建MySQL集群的负载均衡写在前面:为什么要搭建MySQL集群的负载均衡呢?在拥有集群的情况

写在前面:为什么要搭建MySQL集群的负载均衡呢?在拥有集群的情况,如果始终都是对集群中的某个节点服务器进行数据库请求,仍然是会造成负载高,性能差。故使用harpoxy中间件进行负载均衡。 注:在阅读此文之前,最好请先阅读《docker简易搭建MySQL集群》。

第一步 安装Haproxy:

在centos窗口中 执行如下命令,拉取haproxy镜像:

docker pull haproxy

第二步 创建Haproxy配置文件

由于拉取下来的haproxy镜像中并不包含haproxy配置文件。故首先在宿主机上centos窗口中 执行如下两条命令创建haproxy配置文件:

mkdir /home/soft/haproxyvi /home/soft/haproxy/haproxy.cfg

注:读者并非一定要指定在/home/soft/haproxy目录下,可自行选择,该目录将用于映射与docker容器中使用。

按 i 键,进入编辑模式,并将下方haproxy配置内容复制到haproxy.cfg中,读者可根据自身的环境进行修改,内容如下:

global	#工作目录	chroot /usr/local/etc/haproxy	#日志文件,使用rsyslog服务中local5日志设备(/var/log/local5),等级info	log 127.0.0.1 local5 info	#守护进程运行	daemondefaults	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  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	#使用keepalive检测死链    option  tcpka  

注:bind 0.0.0.0:3306 | 不限定访问ip。

option mysql-check user haproxy | 用于心跳的mysql用户,请在mysql集群数据库进行创建该用户haproxy,读者可自己配置该用户名。在此处我们按照约定俗成定为haproxy。

server MySQL_1 172.18.0.2:3306 check weight 1 maxconn 2000 | 172.18.0.2(容器的ip):3306(容器的端口),check(心跳检测),weight 1(权重,只有当算法为static-rr才生效),maxconn 2000(最大连接数)

粘贴内容后,按 Esc 键,并输入 :wq ,退出并保存文件。

在这还需用做一步的是在mysql窗口中,创建mysql用户,运行如下命令:

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

也可以用图形化工具创建该用户,如图所示:

在这里插入图片描述

在这里插入图片描述

第三步 创建Haproxy容器,并运行Haproxy中间件

在centos窗口中,执行如下命令:

docker run -it -d -p 4001:8888 -p 4002:3306 -v /home/soft/haproxy:/usr/local/etc/haproxy --name haproxy1 --privileged --net=net1 haproxy 

创建Haproxy容器完成后,执行如下命令启动Haproxy:

haproxy -f /usr/local/etc/haproxy/haproxy.cfg

第四步 访问Haproxy监控界面

在浏览器访问 宿主机ip:4001/dbs , 输入haproxy.cfg中配置的账号密码。

如图所示:

在这里插入图片描述

登陆后,可以查看数据集群的运行情况,如图所示:

在这里插入图片描述

第五步 试验是否监控成功

挂起其中一个容器,进行测试,在宿主机centos窗口中输入如下命令:

docker stop node2

再次刷新haproxy刷新界面,即可查看到结果,发现对应node2的MySQL_2变红,如图所示:

在这里插入图片描述

验证完成后,在centos窗口中执行如下命令,重新启动node2:

docker start node2

再次刷新haproxy监控界面即可看到恢复正常。

第五步 使用Haproxy中间件连接数据库

利用MySQL图形界面建立haproxy数据库连接,如图所示:

在这里插入图片描述

注:4002端口,就是第三步操作中 -p 4002:3306 命令,将docker容器的3306端口映射给宿主机的4002端口,读者可自行替换。

接下来创建好haproxy数据连接,就可以在该haproxy数据库连接中进行数据库操作,haproxy会帮你将操作按照haproxy配置的策略分发到各个容器(node1,node2,node3,node4)的数据库中,从而实现负载均衡。

附录:

docker 停止容器

docker stop 容器名/容器id

docker 启动容器

docker start 容器名/容器id

docker 暂停容器

docker pause 容器名/容器id

docker 恢复容器

docker unpause  容器名/容器id

写在最后:为什么没有考虑到其他中间件来做负载均衡?由于本人的centos安装在vmware中,故排除了LVS,又由于本次博文使用到的TCP/IP协议故排除Apache,最后在Haproxy与Nginx中,由于Haproxy支持TCP/IP协议支持的时间较为长远,故最终选择了Haproxy。读者可根据自身的情况,自行选择合适的中间件。

请参考如下 负载均衡中间件对比表格:

比较项

Haproxy

Nginx

Apache

LVS

是否免费

免费

免费

免费

免费

支持虚拟机

支持

支持

支持

原创文章,作者:筱凯,如若转载,请注明出处:https://www.jingyueyun.com/ask/578.html

(0)
筱凯筱凯
上一篇 2024 年 7 月 12 日
下一篇 2024 年 7 月 12 日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

云产品限时秒杀。精选云产品高防服务器,500M大带宽限量抢购  >>点击进入