这里讲一下利用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集群