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)

 

posted @ 2022-03-17 11:24  悠游~~~  阅读(398)  评论(0编辑  收藏  举报