点击上方“IT那活儿”公众号,关注后了解更多内容,不管IT什么活儿,干就完了!!!
keepalived安装
yum -y install keepalived
默认配置在 etc/keepalived下
日志在 /var/log/messsges
systemctl start keepalived //启动keepalived
systemctl enable keepalived //加入开机启动keepalived
systemctl restart keepalived //重新启动keepalived
systemctl status keepalived //查看keepalived状态
10.xx.xx.25 vip 10.xx.xx.24 10.xx.xx.26 10.xx.xx.30
配置keepalived
修改默认配置文件:
! Configuration File for keepalived
#指定mysql服务检测脚本
vrrp_script chk_mysql {
script "/etc/keepalived/scripts/chk_mysql.sh" #脚本路径
interval 2 #脚本检测频率
weight -5 #脚本执行返回值 =0 ,优先级不变。!=0 时优先级 -5
fall 3 #如果连续三次检测失败,认为节点服务不可用
rise 2 #如果连续2次检查成功则认为节点正常
}
#监测mysql 是否是master
vrrp_script chk_mysql_master {
script "/etc/keepalived/scripts/chk_mysql_master.sh"
interval 2
weight 10 #脚本执行返回值 =0 ,优先级加 10。!=0 时优先级不变。
}
vrrp_instance VI_1 {
state MASTER #指定实例初始状态,实际的MASTER和BACKUP是选举决定。
interface eth0 #指定实例绑定的网卡。
virtual_router_id 88 #设置VRID标记(0..255)
priority 100 #设置优先级,优先级高的会被竞选为Master
advert_int 1 #检查的时间间隔,默认1s
authentication { #节点间的认证,所有的必须一致
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.xx.xx.24/24
}
track_script { #指定前面脚本的名字
chk_mysql
chk_mysql_master
}
}
三个配置文件的区别只有priority 权重,节点1-3分别为100,98,96。通过其中两个脚本判断MySQL状态以及MGR主节点在哪台服务器上,提升权重。权重的提升合理分配,确保三个服务器每台提升权重后,均可以权重最高,实现VIP漂移。
脚本一:
#!/bin/bash
counter=`netstat -tulnp |grep -w :::3306 |wc -l`
if [ $counter -eq 0 ]; then
systemctl stop keepalived
fi
监测MySQL服务的状态。
脚本二:
#!/bin/bash
source ~/.bash_profile
source /etc/profile
PID1=`mysql -uroot -p'1qsx@WAZ' -S /home/my3306/run/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')" 2>/dev/null |awk 'NR==2{print}'|awk -F" " '{print $2}'`
PID2=`mysql -uroot -p'1qsx@WAZ' -S /home/my3306/run/mysql.sock -e "select @@global.server_uuid" 2>/dev/null |awk 'NR==2{print}'`
RES=$(echo $PID1 | grep "${PID2}")
if [[ ${RES} != "" ]]; then exit 0; fi
exit 1
监控当前节点uuid是否为主节点的uuid,是的话就提升权重,否则权重不变。
我的环境脚本2在判断两个变量是否相同时,没有进入判断逻辑,返回值始终为0,在脚本里添加引用了环境变量,就正常了。
脚本均需要添加执行权限:
chmod +x chk_mysql*
验证IP漂移
三个节点启动keepalived后,检查VIP(24)在1节点(25)上,因为1节点权重最高,并且1节点为主库。

当前数据库节点状态:

模拟主节点宕机:

此时检查MGR集群,发现主库是unreachable状态,此时MySQL集群还未发生重新选举主节点。

观察VIP,发现已经漂移到节点2上去了,因为此时2节点的权重高,所以在MySQL未选取出新主之前,VIP漂移到了2节点。

等MySQL选举完后,观察节点信息发现3节点成为主节点:

随后再观察VIP,发现识别到了新的主节点3节点,并提升了权重,VIP漂移到了3节点上:


最终VIP切换成功至主节点宕机后新选取的主节点上。

本文作者:吴 昊(上海新炬王翦团队)
本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




