一、目的
实现在mysql高可用集群的VIP切换,不涉及数据补偿
二、基础环境
python3.0+
三、具体三大部分
1、启动条件检测检测集群是否down机 方式 select 1
检测主库是否有VIP绑定 方式是 采用vip进行连接
检测从库是否正常复制和延迟
检测从库是否开启binlog中继日志写入
检测集群是否已经开启了增强半同步方式
检测集群是否开启了GTID复制
2、高可用切换流程主库down机 如果失败则进行尝试三次进行判定
摘掉原主VIP,如果能进行SSH登录的话
从slave节点中选择新主 判断方式
打开new master节点读写功能
new master上绑定VIP
在日志中生成change语句
发送报警邮件
3、新主判定条件选择集群从库加入选举组,条件是sql_thread 状态为YES
根据集群的成员对比 binlog(name and postion) 进行排序,选择头部成员
对新主进行进一步判定,判定条件为second_master_behind
如果为0,确保sql_thread已应用完全部relay-log
第三步判断成功,则针对新主采取以下操作:
set global read_only= off 关闭读写
ifconfig vip 绑定VIP
四、相关注意点
1、云环境和多实例环境并不适合VIP环境,所以此文章不适用,不过大体原理相同
2、数据补偿依赖增强半同步复制,这是必须的
3、在绑定VIP之前需要arpping VIP,防止出现脑裂问题
4、采用一个集群启动一个进程方式,防止出现问题互相影响,当然如果你的pyth