设为首页 收藏本站
查看: 1092|回复: 0

[经验分享] 京东MySQL数据库主从切换自动化

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2017-1-11 10:34:29 | 显示全部楼层 |阅读模式
1. 产生背景随着京东业务的高速增长,数据的重要性对于京东来说重要程度不说自明,在信息时代,数据有着比人们更大的力量,数据库的价值可见一斑,数据库的存在为人们提供了更快的查询,那么为了更好地做到数据库的高可用,保证持续提供服务,简化DBA操作,节省数据库故障切换的时间,故开发此数据库主从切换自动化系统。
2. 实现原理此系统基于MHA做数据库切换,结合京东数据库切换的特点,定制自己的切换系统。MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司Yoshinori Matsunobu开发,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件。在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,同时最大化挽回故障发生后的数据,结合zabbix监控报警,以达到真正意义上的高可用。三重检测,保证切换无误:zabbix检测,任务创建时检测,MHA检测。
3. 实现功能此系统实现了死切(从库故障切换及回切,主库故障切换),活切(主库活切及主库回切),做到自动化、自助化、可视化切换。
4. 具体实现4.1. 死切(故障切换)当Zabbix自动监控系统检测到数据库故障时,会自动调故障切换程序,然后判断是主库故障,还是从库故障,分情况处理,所有的故障信息都可在DBS系统上查看
4.1.1 主库故障:先在DBS系统上创建切换任务,另外DBA也可在故障切换页面批量添加故障主库IP,创建切换任务。然后相应DBA执行切换按钮,则会判断各种情况
4.1.1.1切换重要步骤及原则l 探活,探活检测机制由select方式改为insert方式,这样可以包含实例夯住和硬盘只读的情况,如果没有存活的从库,则放弃本次操作并邮件和短信通知DBA手动处理。
l 选择新主库,先本地(先物理机后DOCKER,先连接数少,后QPS负载低),后异地(先物理机后DOCKER,先连接数少,后QPS负载低)原则选择目标实例
l 调MHA接口进行故障切换故障系统信息变更
a.MHA会优先使用上一步选出的从库做为新主库,否则会使用最新数据的从库提升为新主库,然后将所有其他的从库重新指向新主库。之后会调用域名切换接口,将原来故障主库下的域名,全部指向到新的主库IP上。如果MHA切换失败或MHA有告警信息,或者有域名未切换成功,都会使用邮件和短信通知DBA人工处理。
b.当MHA故障切换结束后,系统会将新主库的mysql.cnf配置文件中的read_only=1删除,并在新主库上执行reset salve all或stop slave指令。
c.调用zabbix主机改名接口,修改故障主库及新主库在zabbix监控系统中的名称。
d. 由于域名切换后非实时生效,存在时延,因此系统会对域名生效进行检查,如果2分钟内未生效,则会进行提示,需要DBA进行人工确认。
e. 最后,在资产库中更新集群信息,修改主从关系并进行数据库状态变更,更新故障信息表。同时,发送邮件和短信通知DBA故障切换完成。
f.活切可以支持多集群同时切换。
4.1.1.2 举例例如有一主四从的集群,主库 10.66.66.66:3366故障,需要切换,如下:
wKiom1h0MtyhGWHRAAA4RyLOLJ0191.jpg
1.Zabbix自动创建任务,然后DBA执行切换
wKiom1h0Mt3QoUCHAAA23KvXKBw132.jpg
2.选目标实例
假如例子中的4个从都是存活的,那么在此处会比较根据先本地,选出10.66.66.68:3366,10.66.66.69:3366,然后查连接数,都相同,则去查QPS,
然后比较QPS,选出QPS负载低的10.66.66.69:3366作为目标实例。
wKiom1h0Mt-AHlxNAACHXrW7tyo329.jpg
3.切换完成结果
wKioL1h0MuCjvK3uAABGYe6O7lQ863.jpg
4.切换的详细信息
wKiom1h0MuLDsH2HAADxBzFjKdY904.jpg
4.1.2从库故障(系统自动完成):4.1.2.1 切换原则判断是否宕机实例没有域名,宕机实例设置为手动切换,宕机实例所在集群无其他正常运行实例,这些情况下会给相应的DBA发邮件及短信报警,需要DBA手动处理;
其他情况故障系统会自动处理,根据先本地(连接数少,QPS负载低),后异地(连接数少,QPS负载低)原则选择目标实例,进行域名切换,切换成功或失败都会发邮件及短信告知相应的DBA;
切换成功的从库,相应的DBA可以回切该实例。
4.1.2.2 举例例如有一主四从的集群,从库 10.88.88.89:3366故障,需要切换,如下:
wKioL1h0MuPR9QXPAAA5bY0FLv0120.jpg
zabbix会自动创建任务,并根据先本地后异地,然后查连接数,QPS原则,确定目标实例为10.88.88.88:3366,然后自动切换,DBA会在切换任务列表查看切换结果,鼠标悬停执行状态会显示切换的具体信息
wKioL1h0MuXRyRiaAAA6XHbRKXs236.jpg
切换成功的任务会显示回切按钮,可以执行回切
DBA执行回切,系统会创建回切任务,并可以查看回切的具体信息
wKiom1h0MuawLDJ9AAA9_wTxZNo668.jpg
4.2活切(一般运维停机切换)4.2.1 批量创建任务:输入项目里的任一IP,就可以查出该项目下的所有可用集群,然后勾选想要切换的集群,提交批量创建任务。
创建任务时可选择目标实例是本地,还是异地。然后先对目标实例探活,再根据先物理机后DOCKER,先查连接数少,后查QPS负载低的原则推荐实例。如果有异常会提示。
另外可选择切换后新主库是否为read only
4.2.2任务切换点击切换,会批量切换本次任务,并可以进入子任务查看具体切换的每个步骤,及MHA执行的每个步骤,切换完成,会等待2分钟去校验域名是否真实切换。
切换后会有前后架构的对比。
可以kill旧主库的所有应用链接。
4.2.3 举例
有个Mysql_test项目下有2个集群,如下
集群1
wKiom1h0MueQBQSdAAA2uEWH4oM782.jpg
集群2
wKioL1h0MunB-nn7AAAwPOdd_v8288.jpg
1. 批量创建任务
选择原则根据先本地后异地,先物理机后Docker,先连接数后QPS原则,
10.66.66.66:3366选择目标主库为:10.88.88.89:3366
wKiom1h0MuvCOp9RAABsOMBIs3c588.jpg
10.66.55.55:3366选择目标主库为:10.88.99.91:3366
wKioL1h0MuyBEfCDAABcgS1dfHE561.jpg
2. 批量执行切换
wKiom1h0Mu3ARdhlAAA7AEkgefE839.jpg
切换子任务详细信息,可查看到每个子任务的切换结果及执行步骤,前后架构
wKioL1h0Mu7wHinxAABBCZZOkV8822.jpg
wKioL1h0MvCTVcE0AADSWSz8Ne4951.jpg
5. 总结该系统不管是死切,还是活切,都已服务化,接口化,都只需最多2步(创建任务,执行切换)就可完成切换,也可以完全自动化切换(需要业务方同意,因为有些业务数据库故障后需要业务方确认切换),也可以把活切做成流程化交给业务方自助切换。目前该系统已经运行良好,极大的节省了DBA时间,更好地做到数据库的高可用,保证持续提供服务,简化DBA操作,节省数据库故障切换的时间,为京东的数据库保驾护航。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-326942-1-1.html 上篇帖子: Mysql主从同步 下篇帖子: dba必备系统性能监控工具-glances 数据库 京东
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表