数据库集群系列(十三):结合Keepalived实现MySQL 5.7数据库集群的故障转移
一、基本环境
存在俩台Mysql数据库服务器,采用双Master方式形成数据库集群。
需要实现任意宕掉其中一台服务器,不影响系统运行。
Master-1:192.168.1.137
Master-2:192.168.1.138
集群IP:192.168.1.88
通过Keepalived可实现传统方式或者容器方式的故障转移。
二、Master-1配置
1、安装与配置Mysql双主模式集群(略);
2、安装Keepalived高可用服务(略);
3、修改Keepalived配置文件并重启:
vim keepalived.conf
重点关注:修改网卡接口、启动优先级权重
#ConfigurationFile for keepalivedglobal_defs {notification_email { ######定义接受邮件的邮箱 wangjj@hrloo.com } notification_email_from jiankong@staff.tuge.com ######定义发送邮件的邮箱 smtp_server mail.tuge.com smtp_connect_timeout 10}vrrp_script check_mysql { ######定义监控mysql的脚本 script "/root/check_mysql.sh" interval 2 ######监控时间间隔 weight 2 ######负载参数 }vrrp_instance vrrptest { ######定义vrrptest实例 state BACKUP ######服务器状态 interface ens33 ######使用的接口 virtual_router_id 51 ######虚拟路由的标志,一组lvs的虚拟路由标识必须相同,这样才能切换 priority 100 ######服务启动优先级,值越大,优先级越高,BACKUP 不能大于MASTER advert_int 1 ######服务器之间的存活检查时间authentication { auth_type PASS ######认证类型 auth_pass ufsoft ######认证密码,一组lvs 服务器的认证密码必须一致}track_script { ######执行监控mysql进程的脚本 check_mysql }virtual_ipaddress { ######虚拟IP地址 192.168.1.88}}
systemctl restart keepalived.service
当俩台服务器的keepalived都配置完成之后,虚拟IP
3、编写Mysql状态监测脚本
注意脚本中的变量符号$
MYSQL=/usr/bin/mysqlMYSQL_HOST=127.0.0.1MYSQL_USER=rootMYSQL_PASSWORD=123456MYSQL_PORT=3307$MYSQL -h $MYSQL_HOST -u $MYSQL_USER -P$MYSQL_PORT -p$MYSQL_PASSWORD -e "show status;" >/dev/null 2>&1if [ $? == 0 ]then echo " $host mysql login successfully " exit 0else #echo " $host mysql login faild" systemctl stop keepalived.service exit 2fi
三、Master-2配置
1、安装与配置Mysql双主模式集群(略);
2、安装Keepalived高可用服务(略);
3、修改Keepalived配置文件并重启
#ConfigurationFile for keepalivedglobal_defs {notification_email { ######定义接受邮件的邮箱 wangjj@hrloo.com } notification_email_from jiankong@staff.tuge.com ######定义发送邮件的邮箱 smtp_server mail.tuge.com smtp_connect_timeout 10}vrrp_script check_mysql { ######定义监控mysql的脚本 script "/root/check_mysql.sh" interval 2 ######监控时间间隔 weight 2 ######负载参数 }vrrp_instance vrrptest { ######定义vrrptest实例 state BACKUP ######服务器状态 interface ens33 ######使用的接口 virtual_router_id 51 ######虚拟路由的标志,一组lvs的虚拟路由标识必须相同,这样才能切换 priority 50 ######服务启动优先级,值越大,优先级越高,BACKUP 不能大于MASTER advert_int 1 ######服务器之间的存活检查时间authentication { auth_type PASS ######认证类型 auth_pass ufsoft ######认证密码,一组lvs 服务器的认证密码必须一致}track_script { ######执行监控mysql进程的脚本 check_mysql }virtual_ipaddress { ######虚拟IP地址 192.168.1.88}}
4、编写Mysql状态监测脚本,同Master-1,略。
chmod +x chk_mysql.sh
[root@DB-Master bin]# ./chk_mysql.sh mysql login successfully

四、验证配置
确保俩台服务器上的Master均为运行状态;
然后任意终止一台服务器上的MySQL服务。

可以发现基本在3s内可以恢复正常,不影响业务系统的正常使用。
