Python实现的MYSQL故障检测和转移脚本_设计思路
作者:51ak
前置条件
- 1 主 +1备 +N从
- 启用GTID
- 主备做双向同步
- 主备开启半同步
- 业务连接数据库用自研中件间,中件间里配置的是ip地址
- 建议从节点的复制从备节点上出发
- 目标实例上有库:
use dba_mana;
CREATE TABLE dba_check_ha (
id int(11) NOT NULL default 0,
_timestamp timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
insert into dba_check_ha (id) values(1);
探测流程:
- 探测各节点状态是否有连接失败的节点
- 在主节点上确认read_only是FALSE,尝试update dba_check_ha set id=id+1
- 在所有节点上执行 show global variables like ‘read_only’ 判断各库设置,如果从 库开了写会报警
- 如果主节点失败,则失败次数+1(其他节点失败,只会报警)
- 如果累计失败次数达到要求,检查备节点是否可用,
- 如果不可用,报严重故障,不做切换
- 如果备节点可用,则启用切换验证流程
切换验证流程
- 旧主库设置成只读
- 判断主库,备库GTID是否一致
- 如不一致,则循环等待1秒,最多M次(可设置)
- 如主库已失去连接或主备库GTID一致(2选1),则启用切换流程
切换流程
- 备库选为新主库,启用写
- 查找所有符合条件的中件间修改替换成新主库
- 替换linkset里的adminconnstr(已修复dba平台的上线和其他功能)
- 替换linknode里的各节点角色
- 重新加载配置文件
- 报告切换结果
运行结果:
- 节点失败和故障会报警(企业微信)
- 每个实例会在dba_mana.dba_check_ha 留下最后的检查版本号和最后检查时间
- 切换日志报表
发布日期:2019/03/12
Categories: mysql ha 高可用 python
Tags: 原创 精品