当前位置: 首页 > 科技观察

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

时间:2023-03-12 20:08:52 科技观察

1。背景随着京东业务的快速增长,数据对于京东的重要性不言而喻。信息时代,数据比人拥有更大的力量。数据库数据库的价值可见一斑。数据库的存在为人们提供了更快的查询。为了更好的实现数据库的高可用,保证持续提供服务,简化DBA操作,节省数据库failover的时间,开发了这个databasemaster。来自开关自动化系统。2.实现原理本系统基于MHA进行数据库切换,结合京东数据库切换的特点,定制自己的切换系统。MHA(MasterHighAvailability)是目前比较成熟的MySQL高可用解决方案。它由日本DeNA公司YoshinoriMatsunobu开发。是一套优秀的用于MySQL高可用环境下故障转移和主从提升的高可用软件。.在MySQL故障转移过程中,MHA可以在0~30秒内自动完成数据库的故障转移操作,并且在故障转移过程中,MHA可以最大程度的保证数据的一致性,同时最大限度的恢复故障后的数据统计,结合zabbix监控告警,实现真正意义上的高可用。三重检测确保正确切换:zabbix检测、任务创建检测、MHA检测。3、实现的功能本系统实现了死切(从库的failover和switchback,主库的failover),活切(主库的主动切换和主库的切回),实现了自动、自助、可视化切换。四、具体实施4.1.死切(failover)当Zabbix自动监控系统检测到数据库故障时,会自动调整failover方案,然后判断是主库故障还是从库故障,并根据情况。所有故障信息都可以在DBS系统上查看。4.1.1主库故障:首先在DBS系统上创建切换任务,DBA也可以在failover页面批量添加故障主库的IP创建切换任务。然后相应的DBA执行切换按钮,它会判断各种情况。4.1.1.1切换重要步骤和原理检测,检测机制由select改为insert,可以包括instance和硬盘只读情况,如果没有存活的从库,则放弃操作,DBA将通过电子邮件或短信通知手动处理。选择新的主库,先本地(先物理机,再DOCKER,先小连接数,再低QPS负载),再远程(先物理机,再DOCKER,先小连接数,然后然后低QPS负载)选择目标实例调整MHA接口,用于故障转移故障系统信息更改a。MHA会优先使用上一步选择的从库作为新的主库,否则会使用有***数据的从库提升为新的主库,然后所有其他从库重新指向新主人。之后会调用域名切换接口,将原故障主库下的所有域名指向新主库的IP。如果MHA切换失败或者MHA有告警信息,或者域名切换不成功,会通过邮件和短信的方式通知DBA进行人工处理。b.MHA故障转移结束后,系统会删除新主库mysql.cnf配置文件中的read_only=1,并在新主库上执行resetsalveall或stopslave命令。C。调用zabbix主机重命名接口修改zabbix监控系统中故障主库和新主库的名称。d.由于域名切换不是实时生效的,有一定的延迟,系统会检查域名是否生效。如果2分钟内没有生效,会提示,需要DBA手动确认。e.***,更新资产库中的集群信息,修改主从关系和改变数据库状态,更新故障信息表。同时发送邮件和短信通知DBA故障转移完成。F。实时切换可以支持多个集群同时切换。4.1.1.2举个例子,有一个master和4个slave的集群。主库10.66.66.66:3366出现故障,需要切换,如下:1.Zabbix自动创建任务,然后DBA进行切换。2.选择目标实例。如果例子中的四个slave都是活着的,那么这里会先根据本地进行比较,选择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会在切换任务列表中查看切换结果,当鼠标悬停在执行状态上时会显示切换的具体信息,系统会创建回切任务,您可以查看回切的具体信息。可用集群,然后勾选需要切换的集群,提交批量创建任务。创建任务时,您可以选择目标实例是本地实例还是远程实例。然后先检测目标实例,然后按照先查物理机再docker的原则推荐实例,先查连接数少,再查QPS负载低。如果有异常会提示。另外可以选择新主库是否只读4.2.2切换后任务切换。点击切换,该任务会进行批量切换,可以进入子任务查看具体切换的每一步,以及MHA执行的每一步。切换完成后,会等待2分钟验证域名是否真正切换。切换之后,会有前后架构的对比。您可以杀死旧主库的所有应用程序链接。4.2.3例如Mysql_test项目下有2个集群,如下Cluster1Cluster21批量创建任务选择的原则是先本地后远程,先物理机再Docker,先连接的原则number然后QPS原则,10.66.66.66:3366选择目标主库为:10.88.88.89:336610.66.55.55:3366目标主库为:10.88.99.91:33662。批量执行切换子任务详情,可以查看每个子任务的切换结果和执行步骤,前后结构5.总结系统是面向服务和接口的,不管是死切换还是死切换带电开关。最多只需要2步(创建任务,执行切换)完成切换,也可以完全自动化(需要业务方同意),因为有些业务数据库故障需要业务方确认切换),也可以将直播切入流程,交给业务方进行自助切换。目前系统运行良好,大大节省了DBA的时间,更好的实现了数据库的高可用,保证了持续提供服务,简化了DBA的操作,节省了数据库故障切换的时间,保护了京东的数据库。【本文为专栏作家“王薇”原创稿件,转载请注明出处】点此阅读更多该作者好文