基于Keepalived的Mysql双主单活故障自动切换方案(三)
1 Keepalived部署
1.1 双主单活故障自动切换原理
1)两个节点均安装keepalived组件,假设初始状态时,浮动IP在DB1,通过keepalived调用脚本定期检查MySQL服务可用性。检测方法:通过一个低权限用户连接MySQL服务器并执行一个简单查询,根据返回结果来判定MySQL是否可用。
2)若步骤1)查询失败,则检查MySQL服务状态,分以下两种情况:
(1)若服务异常,则执行切换:关闭DB1的keepalived,使VIP漂移至DB2,通过DB2上keepalived的notify_master机制,触发脚本将DB2的mysql从被动状态(只读)切换到主动状态(可读写),并发送通知邮件。
(2)若服务正常(则可能是一些临时性因素导致的监测失败),等待一段时间(如5秒)做第二次检查,这5s是对瞬时/短时因素造成检查失败的容忍时间。循环操作,若连续三次查询全部失败,则执行主备切换动作。
3)主备切换流程如下:
(1)将DB1的MySQL设置为 read_only模式 (阻止写请继续求进入)。
(2)kill掉当前客户端的线程,然后等待2秒,给kill命令一些时间。
(3)关闭DB1的keepalived,使DB2接管VIP。通过DB2上keepalived的notify_master机制,触发脚本将DB2的mysql从被动状态(只读)切换到主动状态(可读写),并发送通知邮件。
1.2 数据一致性及切换时间分析
连续两次失败以后,通过对主MySQL设置read_only属性,同时kill掉用户线程来保证在DB2接管服务之前,DB1上已经没有写操作,避免主从数据不一致。
切换时间:10s(三次检测间隔)+2s(等待kill命令时间)+约1s(keepalived 切换VIP),总时间不会超过13s。
- 点赞
- 收藏
- 关注作者
评论(0)