这里讲一下利用Haproxy对MySQL进行负载均衡
将这台服务器的ip设置为192.168.117.120
MySQL集群服务器的ip分别是
192.168.117.111
192.168.117.112
192.168.117.113
我们需要用Navicat登录其中一台MySQL服务器,创建一个用户haproxy,密码设置为空
对应sql
CREATE USER `haproxy`@`%` IDENTIFIED WITH mysql_native_password;
在192.168.117.120 新服务器上安装haproxy软件
apt install haproxy -y
修改配置文件
vim /etc/haproxy/haproxy.cfg
在文件末添加后台管理界面 以及监听MySQL进行负载均衡
你需要好好看一下添加的内容注释
#监控界面
listen admin_stats
#监控界面的访问的IP和端口
bind 0.0.0.0:4001
#访问协议
mode http
#URI相对地址 ip:端口/dbs可以查看后台
stats uri /dbs
#统计报告格式
stats realm Global\ statistics
#登陆帐户信息 账户admin 密码123456
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 192.168.117.111:3306 check weight 1 maxconn 2000
server MySQL_2 192.168.117.112:3306 check weight 1 maxconn 2000
server MySQL_3 192.168.117.113:3306 check weight 1 maxconn 2000
server MySQL_4 192.168.117.114:3306 check weight 1 maxconn 2000
server MySQL_5 192.168.117.115:3306 check weight 1 maxconn 2000
#使用keepalive检测死链
option tcpka
将配置文件生效
haproxy -f /etc/haproxy/haproxy.cfg
然后就可以通过浏览器查看mysql服务器的状态
http://localhost:4001/dbs
输入在配置文件填入的 账号admin 密码123456即可查看后台情况
以及通过haproxy的ip 端口3306可以管理mysql数据库 这个也就是暴露在外部使用的数据库服务器ip
在这个数据库中操作和直接在各个节点数据库操作是一样的效果,但haproxy本身不存储数据库
为了让haproxy高可用,我们需要搭建haproxy集群,采用keepalive技术让让haproxy可以实现down机自动切换备用服务器
在haproxy服务器上安装keepalived
apt install keepalived -y
查看本机网卡
ifconfig
创建keepalived配置文件
vim /etc/keepalived/keepalived.conf
添加如下
! Configuration File for keepalived
global_defs {
# 通知邮件服务器的配置
notification_email {
# 当master失去VIP或则VIP的时候,会发一封通知邮件到your-email@qq.com
your-email@qq.com
}
# 发件人信息
notification_email_from keepalived@qq.com
# 邮件服务器地址
smtp_server 127.0.0.1
# 邮件服务器超时时间
smtp_connect_timeout 30
# 邮件TITLE
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
# 主机: MASTER
# 备机: BACKUP
state MASTER
# 实例绑定的网卡, 用ip a命令查看网卡编号
interface ens33
# 虚拟路由标识,这个标识是一个数字(1-255),在一个VRRP实例中主备服务器ID必须一样
virtual_router_id 88
# 优先级,数字越大优先级越高,在一个实例中主服务器优先级要高于备服务器
priority 100
# 主备之间同步检查的时间间隔单位秒
advert_int 1
# 验证类型和密码
authentication {
# 验证类型有两种 PASS和HA
auth_type PASS
# 验证密码,在一个实例中主备密码保持一样
auth_pass 123456
}
# 虚拟IP地址,可以有多个,每行一个
virtual_ipaddress {
192.168.117.244
}
}
virtual_server 192.168.117.244 443 {
# 健康检查时间间隔
delay_loop 6
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP
# 通过调度算法把Master切换到真实的负载均衡服务器上
# 真实的主机会定期确定进行健康检查,如果MASTER不可用,则切换到备机上
real_server 192.168.117.120 443 {
weight 1
TCP_CHECK {
# 连接超端口
connect_port 443
# 连接超时时间
connect_timeout 3
}
}
real_server 192.168.1.121 443 {
weight 1
TCP_CHECK {
connect_port 443
connect_timeout 3
}
}
}
注意修改对应参数,virtual_ipaddress是根据网卡网段自己设置的一个虚拟的ip,haproxy的真实ip是192.168.117.120
service keepalived restart
测试 通过ping 虚拟ip测试一下
通过 ping 192.168.117.244
同样的道理可以再创建一台Haproxy+Keepalived的服务器,因为在配置文件里我写入的是两台服务器ip分别是
192.168.117.120 和 192.168.117.121
实际暴露在外面使用的是虚拟ip 192.168.117.244
可以通过Navicat连接虚拟ip调用MySQL集群这样MySQL集群架构变成了
如果你还想进一步学习:搭建Nginx集群+Haproxy集群