负载均衡服务器有很多有大名鼎鼎的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集群