京东MySQL数据库主从切换自动化

1. 产生背景

随着京东业务的高速增加,数据的重要性对于京东来讲重要程度不说自明,在信息时代,数据有着比人们更大的力量,数据库的价值可见一斑,数据库的存在为人们提供了更快的查询,那么为了更好地作到数据库的高可用,保证持续提供服务,简化DBA操做,节省数据库故障切换的时间,故开发此数据库主从切换自动化系统。mysql

2. 实现原理

此系统基于MHA作数据库切换,结合京东数据库切换的特色,定制本身的切换系统。MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司Yoshinori Matsunobu开发,是一套优秀的做为MySQL高可用性环境下故障切换和主从提高的高可用软件。在MySQL故障切换过程当中,MHA能作到在0~30秒以内自动完成数据库的故障切换操做,而且在进行故障切换的过程当中,MHA能在最大程度上保证数据的一致性,同时最大化挽回故障发生后的数据,结合zabbix监控报警,以达到真正意义上的高可用。三重检测,保证切换无误:zabbix检测,任务建立时检测,MHA检测。sql

3. 实现功能

此系统实现了死切(从库故障切换及回切,主库故障切换),活切(主库活切及主库回切),作到自动化、自助化、可视化切换。数据库

4. 具体实现

4.1. 死切(故障切换)

当Zabbix自动监控系统检测到数据库故障时,会自动调故障切换程序,而后判断是主库故障,仍是从库故障,分状况处理,全部的故障信息均可在DBS系统上查看架构

4.1.1 主库故障:

先在DBS系统上建立切换任务,另外DBA也可在故障切换页面批量添加故障主库IP,建立切换任务。而后相应DBA执行切换按钮,则会判断各类状况运维

4.1.1.1切换重要步骤及原则

l 探活,探活检测机制由select方式改成insert方式,这样能够包含实例夯住和硬盘只读的状况,若是没有存活的从库,则放弃本次操做并邮件和短信通知DBA手动处理。ide

l 选择新主库,先本地(先物理机后DOCKER,先链接数少,后QPS负载低),后异地(先物理机后DOCKER,先链接数少,后QPS负载低)原则选择目标实例ui

l 调MHA接口进行故障切换故障系统信息变动spa

a.MHA会优先使用上一步选出的从库作为新主库,不然会使用最新数据的从库提高为新主库,而后将全部其余的从库从新指向新主库。以后会调用域名切换接口,将原来故障主库下的域名,所有指向到新的主库IP上。若是MHA切换失败或MHA有告警信息,或者有域名未切换成功,都会使用邮件和短信通知DBA人工处理。3d

b.当MHA故障切换结束后,系统会将新主库的mysql.cnf配置文件中的read_only=1删除,并在新主库上执行reset salve all或stop slave指令。blog

c.调用zabbix主机更名接口,修改故障主库及新主库在zabbix监控系统中的名称。

d. 因为域名切换后非实时生效,存在时延,所以系统会对域名生效进行检查,若是2分钟内未生效,则会进行提示,须要DBA进行人工确认。

e. 最后,在资产库中更新集群信息,修改主从关系并进行数据库状态变动,更新故障信息表。同时,发送邮件和短信通知DBA故障切换完成。

f.活切能够支持多集群同时切换。

4.1.1.2 举例

例若有一主四从的集群,主库 10.66.66.66:3366故障,须要切换,以下:

clip_p_w_picpath001

1.Zabbix自动建立任务,而后DBA执行切换

clip_p_w_picpath003

2.选目标实例

假如例子中的4个从都是存活的,那么在此处会比较根据先本地,选出10.66.66.68:3366,10.66.66.69:3366,而后查链接数,都相同,则去查QPS,

而后比较QPS,选出QPS负载低的10.66.66.69:3366做为目标实例。

clip_p_w_picpath005

3.切换完成结果

clip_p_w_picpath007

4.切换的详细信息

clip_p_w_picpath009

4.1.2从库故障(系统自动完成):
4.1.2.1 切换原则

判断是否宕机实例没有域名,宕机实例设置为手动切换,宕机实例所在集群无其余正常运行实例,这些状况下会给相应的DBA发邮件及短信报警,须要DBA手动处理;

其余状况故障系统会自动处理,根据先本地(链接数少,QPS负载低),后异地(链接数少,QPS负载低)原则选择目标实例,进行域名切换,切换成功或失败都会发邮件及短信告知相应的DBA;

切换成功的从库,相应的DBA能够回切该实例。

4.1.2.2 举例

例若有一主四从的集群,从库 10.88.88.89:3366故障,须要切换,以下:

clip_p_w_picpath010

zabbix会自动建立任务,并根据先本地后异地,而后查链接数,QPS原则,肯定目标实例为10.88.88.88:3366,而后自动切换,DBA会在切换任务列表查看切换结果,鼠标悬停执行状态会显示切换的具体信息

clip_p_w_picpath012

切换成功的任务会显示回切按钮,能够执行回切

DBA执行回切,系统会建立回切任务,并能够查看回切的具体信息

clip_p_w_picpath014

4.2活切(通常运维停机切换)
4.2.1 批量建立任务:

输入项目里的任一IP,就能够查出该项目下的全部可用集群,而后勾选想要切换的集群,提交批量建立任务。

建立任务时可选择目标实例是本地,仍是异地。而后先对目标实例探活,再根据先物理机后DOCKER,先查链接数少,后查QPS负载低的原则推荐实例。若是有异常会提示。

另外可选择切换后新主库是否为read only

4.2.2任务切换

点击切换,会批量切换本次任务,并能够进入子任务查看具体切换的每一个步骤,及MHA执行的每一个步骤,切换完成,会等待2分钟去校验域名是否真实切换。

切换后会有先后架构的对比。

能够kill旧主库的全部应用连接。

4.2.3 举例

有个Mysql_test项目下有2个集群,以下

集群1

clip_p_w_picpath015

集群2

clip_p_w_picpath016

1. 批量建立任务

选择原则根据先本地后异地,先物理机后Docker,先链接数后QPS原则,

10.66.66.66:3366选择目标主库为:10.88.88.89:3366

clip_p_w_picpath018

10.66.55.55:3366选择目标主库为:10.88.99.91:3366

clip_p_w_picpath020

2. 批量执行切换

clip_p_w_picpath022

切换子任务详细信息,可查看到每一个子任务的切换结果及执行步骤,先后架构

clip_p_w_picpath024

clip_p_w_picpath026

5. 总结

该系统不论是死切,仍是活切,都已服务化,接口化,都只需最多2步(建立任务,执行切换)就可完成切换,也能够彻底自动化切换(须要业务方赞成,由于有些业务数据库故障后须要业务方确认切换),也能够把活切作成流程化交给业务方自助切换。目前该系统已经运行良好,极大的节省了DBA时间,更好地作到数据库的高可用,保证持续提供服务,简化DBA操做,节省数据库故障切换的时间,为京东的数据库保驾护航。

p_w_picpath

相关文章
相关标签/搜索