docker 搭建myql集群 参见上一篇 https://blog.csdn.net/a15835774652/article/details/102978098
docker mysql 集群的负载均衡组件这里用到的是haproxy
简单说一下haproxy
HAProxy是一个使用C语言编写的自由及开放源代码软件[1],其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。
HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
HAProxy实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户空间(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。
包括 GitHub、Bitbucket、Stack Overflow、Reddit、Tumblr、Twitter和 Tuenti在内的知名网站,及亚马逊网络服务系统都使用了HAProxy。 (参考百度文库)
拉取haproxy 镜像
docker pull haproxy
(2)创建haproxy配置文件,这里使用bind mounting的方式
touch /usr/local/develope/haproxy/haproxy.cfg
haproxy.cfg 文件
global
#工作目录,这边要和创建容器指定的目录对应
chroot /usr/local/etc/haproxy
#日志文件
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
#URI相对地址
stats uri /dbs_monitor
#统计报告格式
stats realm Global\statistic
#登陆帐户信息
stats auth admin:admin
#数据库负载均衡
listen proxy-mysql
#访问的IP和端口,haproxy开发的端口为3306 #假如有人访问haproxy的3306端口,则将请求转发给下面的数据库实例
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
#使用keepalive检测死链
option tcpka
(3)接下来进行启动 haproxy
启动命令
docker run -d -p 8888:8888 -p 3305:3306 -v /usr/local/develope/haproxy:/usr/local/etc/haproxy --name haproxy --net=pxc-net --privileged haproxy
(4)根据haproxy.cfg文件启动haproxy
docker exec -it haproxy bash
haproxy -f /usr/local/etc/haproxy/haproxy.cfg
(5)在MySQL数据库上创建用户,用于心跳检测
CREATE USER 'haproxy'@'%' IDENTIFIED BY '';
(6)浏览器访问
localhost:8888/dbs_monitor 用户名密码都是:admin
登录后可看到如下 界面
说明搭建成功
然后在通过mysql 可视化工具进行连接到haproxy 的3305(注意这里根据你启动的端口进行连接)
ip localhost 端口 3305 账号密码都是 root
连接成功后进行查看我们之前的user表
进行操作一下 添加一条新的数据
同时去节点一 节点二 节点三 的user表中都可以看到 该数据
这里宣布搭建完成 实现了mysql的负载均衡