mysql MGR配置keepalived
之前写过一篇mysql8.0搭建MGR 在这里 mysql8.0配置MGR - 悠游~~~ - 博客园 (cnblogs.com)
在此基础上配置keepalived
一、安装keepalived (可能会少些包,所以配置了网络yum源) 所有节点均需安装
配置yum源(我这里使用了oracle的)
[root@mgr1 run]# cat /etc/yum.repos.d/oracle.repo
[oracle]
name=oracle
baseurl=http://yum.oracle.com/repo/OracleLinux/OL8/baseos/latest/x86_64
enabled=1
gpgcheck=0
二、配置keepalived
修改默认配置文件(每个节点都需要)
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
#指定mysql服务检测脚本
vrrp_script chk_mysql {
script "/root/chk_mysql.sh" #脚本路径
interval 2 #脚本检测频率
weight -5 #脚本执行返回值 =0 ,优先级不变。 !=0 时优先级 -5
fall 2 #如果连续两次检测失败,认为节点服务不可用
rise 1 #如果连续2次检查成功则认为节点正常
}
#监测mysql 是否是master
vrrp_script chk_mysql_master {
script "/root/chk_mysql_master.sh"
interval 2
weight 10 #脚本执行返回值 =0 ,优先级加 10。 !=0 时优先级不变。
}
vrrp_instance VI_1 {
state MASTER #指定实例初始状态,实际的MASTER和BACKUP是选举决定的。
interface ens160 #指定实例绑定的网卡
virtual_router_id 88 #设置VRID标记(0..255)
priority 96 #设置优先级,优先级高的会被竞选为Master
advert_int 1 #检查的时间间隔,默认1s
authentication { #节点间的认证,所有的必须一致
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { #设置VIP,可以设置多个,用于切换时的地址绑定。
192.168.220.100/24
}
track_script { #指定前面脚本的名字
chk_mysql
chk_mysql_master
}
}
global_defs { #全局配置
router_id k8s #组名,同集群一致
script_user root #执行脚本的用户
enable_script_security
}
====三个节点中只有priority参数大小不同,用来配置初始权重
mgr1 priority 100
mgr2 priority 98
mgr3 priority 96
上边的配置主要是由keepalived定时调用chk_mysql和chk_mysql_master这两个脚本来检查mysql的运行状态并根据检查情况来改变各个节点的权重,以此决定vip应该飘在哪个节点上
两个检查脚本需要自己写(见下方)
有关于权重的说明:{
这三个值不要相差太大,最好自己模拟一下算一下,看各种情况下是否是按照自己的预期得到权重;如果相差太大,weight值也比较小的时候,可能会导致备机的权重比主机的大
当通过chk_mysql.sh脚本检测mysql服务是否存在,如果执行了改变权重
通过/root/chk_mysql_master.sh脚本检测本机是否是master机,是的话,改变权重
整体来说就是通过改变机器的权重来把VIP飘在权重最大的机器上的;我们要做的就是通过脚本判断是否执行,使得master的权重最高;这里的权限一定得控制好;
权重策略是:
当weight > 0时:脚本执行成功了 Priority+Weight 执行失败 Priority
当weight < 0时:脚本执行成功了 Priority 执行失败 Priority+Weight
每执行一次他的权重是重新开大会算的,并不是接着上一次的来 }
====mysql检查脚本
vim /root/chk_mysql.sh
=== 检查mysql 服务脚本
#!/bin/bash
counter=`netstat -tulnp |grep -w :::3306 |wc -l`
if [ $counter -eq 0 ]; then
systemctl stop keepalived
fi
vim /root/chk_mysql_master.sh
=== 检查mysql master 脚本(使用uuid判断是否为master节点)
#!/bin/bash
priuuid=`/usr/local/mysql8.0/bin/mysql -uroot -S /mysql/data_mgr_8.0/mysql.sock -e "SELECT * FROM performance_schema.replication_group_members WHERE MEMBER_ID = (SELECT VARIABLE_VALUE FROM performance_schema.global_status WHERE VARIABLE_NAME= 'group_replication_primary_member')" |awk 'NR==2{print}'|awk -F" " '{print $2}'`
uuid=`/usr/local/mysql8.0/bin/mysql -uroot -S /mysql/data_mgr_8.0/mysql.sock -e "select @@global.server_uuid" |awk 'NR==2{print}'`
if [ $priuuid == $uuid ]; then
exit 0
else
exit 1
fi
====赋予脚本执行权限
chmod +x chk_mysql*
三、启动keepalived
[root@mgr1 keepalived]# systemctl start keepalived.service
[root@mgr1 keepalived]# systemctl enable keepalived.service
keepalived的日志默认在/var/log/messages下
四、验证高可用配置
==检查mgr状态 当前主节点为节点2 192.168.220.132
SELECT * FROM performance_schema.replication_group_members;
===检查节点2 keepalived状态和vip状态
vip在节点2成功启动
===从其他节点测试连接vip
从节点3连接vip登录到节点2上(uuid对应)
===节点2主库宕机测试
--节点2日志keepalived自动关闭并移除VIP
===检查当前mgr状况
节点1成为主库
====节点1日志VIP漂移并且提升权重
===测试连接数据库VIP
--在节点3连接VIP成功连接到primary库(节点1)