负载均衡服务器有很多有大名鼎鼎的Nginx、Apache和LVS
但此次选择的是老牌的数据库中间件Haproxy
之所以选择Haproxy原因是Haproxy经过了时间考验,得到了大量用户的肯定。
Haproxy | Nginx | Apache | LVS | |
是否免费 | 是 | 是 | 是 | 是 |
支持虚拟机 | 是 | 是 | 是 | 否 |
支持http协议 | 是 | 是 | 是 | 是 |
支持TCP/IP协议 | 是 |
是,但是没有经过 长时间的考验 |
不支持 | 支持 |
支持插件 | 否 | 支持 | 不支持 | 不支持 |
性能 | 好 | 好 | 一般 | 最好 |
先拉取Haproxy镜像
- docker pull haproxy
创建一个网络,将mysql集群放在这个环境下
- docker network create --subnet=172.18.0.0/24 net1
在数据库中创建一个haproxy用户,方便询问数据库是否活着(keepalived)
接着创建配置文件(镜像中是没有配置文件的,所以先不要启动容器)
- mkdir -p /home/soft/haproxy #创建配置文件存放目录
- vim /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:6666
- #访问协议
- mode http
- #URI相对地址
- stats uri /dbs
- #统计报告格式
- stats realm Global\ statistics
- #登陆帐户信息
- stats auth admin:123456
- #数据库负载均衡
- 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
- server MySQL_5 172.18.0.6:3306 check weight 1 maxconn 2000
- #使用keepalive检测死链
- option tcpka
创建haproxy容器
- docker run -it -d -p 4001:6666 -p 4002:3306 -v /home/soft/haproxy:/usr/local/etc/haproxy --name h1 --privileged --net=net1 --ip 172.18.0.7 --restart=always haproxy
进入容器并将配置文件生效
- docker exec -it h1 bash
- haproxy -f /usr/local/etc/haproxy/haproxy.cfg
接着你需要在mysql数据库中 创建一个无密码的haproxy用户用来检测mysql集群状态
这样填写即可
对应的SQL 效果和上面用Navicat创建的一样
- CREATE USER `haproxy`@`%` IDENTIFIED WITH mysql_native_password;
具体详情查看配置文件的注释说明
然后在浏览器输入宿主机的ip+端口/dbs 会要求输入用户名和密码
在配置文件中规定账号admin 密码123456,端口是在docker run命令指定的
输入用户名密码后即可查看后台管理中mysql的情况如图所示
后续篇
mysql服务器down机模拟 加速关闭第一个mysql服务器node1
- docker kill node1
搭建mysql集群链接:mysql在docker中的集群搭建
后续的Keepalived+Haproxy实现Haproxy集群高可用----借鉴这篇文章将对于的ip修改为docker网络下的ip即可搭建Keepalievd+Haproxy集群