京东DBA 王伟 | MySQL数据库主从切换自动化

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: http://mp.weixin.qq.com/s?__biz=MjM5ODI5Njc2MA==&mid=2655808515&idx=1&sn=069d05a3bad6f67f400475ca6ad714c2&chksm=bd7421d48a03a8c274570da116945bfd6a2eb9...

http://mp.weixin.qq.com/s?__biz=MjM5ODI5Njc2MA==&mid=2655808515&idx=1&sn=069d05a3bad6f67f400475ca6ad714c2&chksm=bd7421d48a03a8c274570da116945bfd6a2eb90615d8b7fba9d78e57890604bd1c415591f81d&mpshare=1&scene=23&srcid=01101Pn9HfMWEIV7zZqMAEf2#rd

------------------------------------------------------------------------------------------

一、产生背景

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

 

二、实现原理

此系统基于 MHA 做数据库切换,结合京东数据库切换的特点,定制自己的切换系统。MHA(Master High Availability)目前在 MySQL 高可用方面是一个相对成熟的解决方案,它由日本 DeNA 公司 Yoshinori Matsunobu 开发,是一套优秀的作为 MySQL 高可用性环境下故障切换和主从提升的高可用软件。

 

在MySQL 故障切换过程中,MHA 能做到在 0~30 秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA 能在最大程度上保证数据的一致性,同时最大化挽回故障发生后的数据,结合 zabbix 监控报警,以达到真正意义上的高可用。三重检测,保证切换无误:zabbix 检测,任务创建时检测,MHA 检测。

 

三、实现功能

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

 

四、具体实现

4.1. 死切(故障切换)

当 Zabbix 自动监控系统检测到数据库故障时,会自动调故障切换程序,然后判断是主库故障,还是从库故障,分情况处理,所有的故障信息都可在DBS系统上查看

 

4.1.1 主库故障:

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

 

4.1.1.1 切换重要步骤及原则
  • 探活,探活检测机制由 select 方式改为 insert 方式,这样可以包含实例夯住和硬盘只读的情况,如果没有存活的从库,则放弃本次操作并邮件和短信通知 DBA 手动处理。

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

  • 调 MHA 接口进行故障切换故障系统信息变更

  1. MHA 会优先使用上一步选出的从库做为新主库,否则会使用最新数据的从库提升为新主库,然后将所有其他的从库重新指向新主库。之后会调用域名切换接口,将原来故障主库下的域名,全部指向到新的主库 IP 上。如果 MHA 切换失败或 MHA 有告警信息,或者有域名未切换成功,都会使用邮件和短信通知 DBA 人工处理。

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

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

  4. 由于域名切换后非实时生效,存在时延,因此系统会对域名生效进行检查,如果 2 分钟内未生效,则会进行提示,需要 DBA 进行人工确认。

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

  6. 活切可以支持多集群同时切换。

 
4.1.1.2 举例

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

 

1. Zabbix 自动创建任务,然后 DBA 执行切换

 

 

2. 选目标实例

假如例子中的 4 个从都是存活的,那么在此处会比较根据先本地,选出 10.66.66.68:3366,10.66.66.69:3366,然后查连接数,都相同,则去查 QPS,然后比较 QPS,选出 QPS 负载低的 10.66.66.69:3366 作为目标实例。

 

3. 切换完成结果

 

 

4. 切换的详细信息

 

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

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

 

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

 

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

 

4.1.2.2 举例

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

 

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

 

 

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

DBA 执行回切,系统会创建回切任务,并可以查看回切的具体信息

 

 
4.2 活切(一般运维停机切换)
4.2.1 批量创建任务:

输入项目里的任一 IP,就可以查出该项目下的所有可用集群,然后勾选想要切换的集群,提交批量创建任务。

 

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

 

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

 

4.2.2 任务切换

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

 

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

 

可以 kill 旧主库的所有应用链接。

 

4.2.3 举例

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

集群1

 

集群2

 

1. 批量创建任务

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

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

 

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

 

2. 批量执行切换

 

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

 

 

 

五、总结

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

 

作者:王伟

来源:51CTO博客

链接:http://wangwei007.blog.51cto.com/68019/1890607

点击『阅读原文』查看作者更多文章

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
6月前
|
数据库 SQL Cloud Native
DBA福利:云原生分布式数据库 PolarDB-X 操作指南
【6月更文挑战第2天】简述如何使用PXD工具一键安装PolarDB-X操作
72074 10
|
2月前
|
Java 关系型数据库 MySQL
自动化测试项目实战笔记(一):JDK、Tomcat、MySQL、Jpress环境安装和搭建
这篇文章是关于自动化测试项目实战笔记,涵盖了JDK、Tomcat、MySQL、Jpress环境的安装和搭建过程,以及测试用例和常见问题总结。
53 1
自动化测试项目实战笔记(一):JDK、Tomcat、MySQL、Jpress环境安装和搭建
|
2月前
|
SQL 关系型数据库 MySQL
京东面试:什么情况下 mysql RR不能解决幻读? RR隔离mysql如何实现?
老架构师尼恩在其读者交流群中分享了关于MySQL事务隔离级别的深入解析,特别针对RR级隔离如何解决幻读问题进行了详细讨论。文章不仅解释了ACID中的隔离性概念,还列举了四种事务隔离级别(未提交读、提交读、可重复读、串行读)的特点及应用场景。尼恩通过具体的例子和图表,清晰地展示了不同隔离级别下的并发事务问题(脏读、不可重复读、幻读)及其解决方案,特别是RR级隔离下的MVCC机制如何通过快照读和当前读来防止幻读。此外,尼恩还提供了相关面试题的解答技巧和参考资料,帮助读者更好地准备技术面试。更多详细内容和实战案例可在《尼恩Java面试宝典》中找到。
|
2月前
|
数据采集 监控 数据挖掘
CSV文件自动化生成:用Pandas与Datetime高效处理京东商品信息
在电商竞争激烈的背景下,实时掌握商品价格和库存信息至关重要。本文介绍如何使用Python的`pandas`和`datetime`库从京东抓取商品名称、价格等信息,并生成CSV文件。结合代理IP技术,提升爬取效率和稳定性。通过设置请求头、使用代理IP和多线程技术,确保数据抓取的连续性和成功率。最终,数据将以带时间戳的CSV文件形式保存,方便后续分析。
|
6月前
|
Prometheus 监控 关系型数据库
数据库同步革命:MySQL GTID模式下主从配置的全面解析
数据库同步革命:MySQL GTID模式下主从配置的全面解析
741 0
|
4月前
|
缓存 NoSQL 数据库
救命!DBA找上门了,数据库cpu飙到60%
这篇文章讲述了作者如何通过优化数据库查询和引入二级缓存架构,成功解决了数据库CPU使用率规律性飙升的问题,提高了系统稳定性。
救命!DBA找上门了,数据库cpu飙到60%
|
4月前
|
SQL 数据采集 关系型数据库
|
4月前
|
关系型数据库 MySQL 机器人
【MySQL】两个脚本自动化搞定 MySQL 备份恢复--XtraBackup
【MySQL】两个脚本自动化搞定 MySQL 备份恢复--XtraBackup
|
6月前
|
存储 关系型数据库 MySQL
21. Mysql 事件或定时任务,解放双手,轻松实现自动化
21. Mysql 事件或定时任务,解放双手,轻松实现自动化
189 1
|
7月前
|
关系型数据库 MySQL Linux
服务器Linux系统配置mysql数据库主从自动备份
这是一个基本的配置主从复制和设置自动备份的指南。具体的配置细节和命令可能因您的环境和需求而有所不同,因此建议在操作前详细阅读MySQL文档和相关资源,并谨慎操作以避免数据丢失或不一致。
215 3
下一篇
DataWorks