前言
如果没有安装Mysql集群,先看上一节。
为什么要负载均衡?因为:一个人受罪还不如大家一起受罪!(想想就觉得不疼了)
这里我以PXC.Mysql集群为例,使用Haproxy做负载均衡,使请求均匀分发给每个节点(一起受罪)
为什么Haproxy?
看到TCP/IP协议那里,我挺喜欢Nginx,但是不敢用,谁让他出得慢,而Haproxy好歹很早就支持了!
1.安装Haproxy镜像
docker pull haproxy
2.创建Haproxy配置文件
参考:https://zhang.ge/5125.html
参考:
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: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
#使用keepalive检测死链
option tcpka
3.创建并运行
docker run -it -d -p 4001:8888 -p 4002:3306 -v /Users/hyperdai/haproxy:/usr/local/etc/haproxy --name h1 --privileged --net=net1 --ip 172.18.0.5 haproxy
haproxy -f /usr/local/etc/haproxy/haproxy.cfg
docker exec -it h1 bash
4.创建心跳检测DB账号
因为要查看Mysql集群状态,而且我们在haproxy.cfg配置文件中有配置。
所以,我们在node-1的mysql服务器中创建一个haproxy账号,设置空密码,只有登录权限,不需要赋予表权限。
使用root账号添加haproxy用户的mysql命令:CREATE USER 'haproxy'@'%' IDENTIFIED BY '';
5.进入管理平台
因为我们在haproxy.cfg中写了配置,所以,我们直接在宿主机浏览器上输入url就完事了:http://127.0.0.1:4001/dbs,然后输入haproxy.cfg中配置的账号密码,我配置的是admin:abc123456
效果
6.Haproxy的主机连接Mysql集群
同样的使用Navicat,然后连接端口是4002,因为haproxy集群配置了所有mysql主机,所以,我们会通过haproxy连接任一台Mysql主机
7.检验是否生效
- (1)通过Navicat连接Mysql集群,然后增删改成……看真实主机的数据库结果……
- (2)关闭一个node节点,再看看管理平台……
后记
通过本文探讨,我们知道,我们的haproxy是单节点的,如果haproxy挂掉,我们的后端Mysql集群就不可用了。
所以……请听下回分解……