APP下载

基于Keepalived和Mycat的MySQL数据库高可用性设计与实现

2022-08-26廖卓姚敏余筱黄俊铭

现代信息科技 2022年11期
关键词:状态数据库自动

廖卓,姚敏,余筱,黄俊铭

(中移互联网有限公司,广东 广州 510640)

0 引 言

移动认证是中国移动推出的一款应用运营商特有的通信能力实现移动网络环境下用户身份自动识别的产品。该产品已广泛应用于金融、电商、医疗、教育等千行百业,主要使用场景为APP、H5页面的用户登录环节。在移动认证的产品运营维护过程中,客户提出了极高的SLA等级要求。移动认证平台由若干业务模块、中间件组成,其中数据库作为业务数据及状态记录的组件,贯穿于业务流程的各个环,数据库的稳定运行是保障产品可用性的重要环节。

本文针对移动认证的MySQL数据库故障后无法实现快速自动切换的问题,提出了以下解决措施:(1)设计一套数据库健康检测模型,精准识别数据库异常。(2)设计一种联动健康检测结果控制数据库切换的方法,实现快速切换。实验结果表明该方案可有效实现数据库故障秒级切换,较好提升数据库运行稳定度,实现移动认证产品可用性提升,满足客户需求。

1 MySQL部署架构及问题分析

MySQL常见的高可用部署架构包括基于复制的主从部署架构、MySQL Cluster等。其中MySQL Cluster配置复杂,维护成本较高。移动认证平台数据库采用主从部署架构,主从复制技术将主数据库中的DDL和DML操作通过二进制日志传输到从数据库上,然后将这些日志重新执行(重做),从而使得从数据库的数据与主数据库保持一致。

虽然基于复制的主从部署架构可支持主数据库故障切换至从数据库,但切换过程依赖于人工手动切换。对于可靠性要求较高的系统,人工切换无法满足服务需要。

2 MySQL高可用方案设计

为解决上述主用数据库故障无法快速自动切换问题,设计了一套基于健康检测的自动切换方案。首先设计了一个判断数据库运行状态的健康检测模型,探测程序将采集数据库运行的相关数据,通过模型分析判断数据库的健康状态。其次开发了一个可执行自动切换的程序,该程序执行条件为健康检测模型判断当前数据库主库异常。整体架构如图1所示。

图1 高可用方案架构图

2.1 健康检测模型设计

实现故障数据库自动切换的前提是能实时、准确地判断数据异常状态。因此设计了数据库健康检测模型,该模型基于若干健康检测因子实时探测数据运行状态。当模型检测判断数据库运行处于异常状态时,并且该异常状态达到设定的条件,则触发切换动作,保障故障数据库被备用数据库迅速接管,保持业务服务连续性,降低用户感知。模型的流程如图2所示。

图2 数据库自动检测与切换模型流程图

2.1.1 模型说明

不妨假设数据库异常状态发生在时刻t时刻,用脉冲函数代表(-t)该异常,那么t时间段内异常状态函数如Φ)如式(1)所示,那么数据库状态模型的智能检测函数H()如式(2)所示,当检测函数H()达到所设置的阈值,即会触发自动切换:

2.1.2 智能检测因子

智能数据库状态检测模块,对数据库的心跳、端口服务、业务指令执行情况等进行检测,任一项出现问题即发生异常状态,此时Φ值为1。

2.1.3 智能检测算法

算法的核心在于智能检测因子和累加器,使模型能够智能地检测数据库异常状态的发生。它会周期性地对监控检测因子,当智能检测因子达到触发故障条件后,即可实现实时、自动化的故障检测与切换;累加器则是能够记录每个周期的检测因子信息,在设定的事件范围内,若累加器记录的检测因子达到触发故障条件后,能够触发自动切换,该策略能有效解决数据库状态短时间内大幅度波动导致无法切换的问题,增加切换准确率。模型伪代码如图3所示。

图3 模型伪代码

2.2 自动切换方案设计

切换的本质是应用服务连接新的数据库,通常来讲应用服务可以通过域名、IP的方式访问数据库。当使用域名访问时,实现主备库切换,需要更换域名A记录,该方法的主要问题为应用集群更新A记录难以做到完全同步。当使用IP访问时,实现主备库切换,需要更新应用程序连接数据的IP相关配置,此时需要重启应用服务,时效性难以保证。

本文设计一种基于Keepalived机制的切换方案。该方案并不直接按照常规做法使用Keepalived来实现VIP的自动切换,而是仅用Keepalived的服务来绑定VIP对应的具体Mycat服务器MAC地址。之所以采用该方案,是为了避免在网络异常或者其他原因造成Keepalived的VRRP协议发生脑裂情况下的应用无法连接到数据库。具体做法如图4所示。

图4 数据库自动切换流程图

(1)初始化状态下,在主用Mycat服务器开启Keepalived服务,并绑定VIP至主用Mycat服务器。(2)当健康检测程序判断主用数据正常时,Keepalived服务及其相关配置保持不变。(3)当健康检测程序判断主用数据库异常时,判断程序将关闭主用Mycat的Keepalived服务,删除其VIP绑定关系,开启备用数据库Keepalived服务,并绑定VIP至备用Mycat。

3 实验及分析

MySQL数据库使用8台服务器部署8个实例,其中前4个为主用实例,后4个为备用实例。使用2台服务器分别部署主用Mycat、备用Mycat。使用1台服务器部署健康检测及切换程序。具体配置如表1所示。

表1 实验环境配置

3.1 自动切换时效性测试

根据本文设计的方案,时效性主要取决于健康检测脚本探测到异常所耗费的时间。决定探测异常耗费时间的几个参数因子包括:探测时间间隔,判定MySQL服务异常连续探测失败次数。通过设置不同判定参数,时效性测试结果如表2所示。

表2 切换时效性测试结果

从上述测试可知,随着探测间隔时间增加、探测累计异常次数增加,异常切换所花费的时间呈线性增加。对比参照组,当采用人工手动切换,该方案可实现切换效率的极大提升。

3.2 自动切换成功率测试

自动切换准确性测试主要衡量在不同异常场景下数据库是否都能实现切换。根据实际环境中可能存在的问题,设计以下异常场景:网络中断、网络波动(间断性中断)、Mycat主用服务异常中断、个别MySQL主用实例异常中断、全部MySQL主用实例异常中断。测试情况如表3所示。

表3 切换成功率测试结果

通过上述测试,发现除网络波动异常场景外,该方案能实现异常场景的准确切换。分析网络波动场景,因切换触发条件设置为连续异常则切换,在不稳定场景下,部分情况因未达到连续异常的条件,导致切换失败。因此进一步优化异常判定模型,在一段时间内累计触发异常次数,及判定为异常且执行切换。优化后的网络波动场景下的测试情况如表4所示。

表4 优化后测试结果

4 结 论

移动认证核心业务流程强依赖于MySQL数据库,如果数据库出现故障,将会影响移动认证对外提供服务。本文设计了一种故障场景下数据库主备库自动切换的高可用方案。该方案包括了实时检测数据库健康状态的模型,当程序探测到异常时,通过修改主、备数据库Keepalived服务配置,触发数据库自动切换,恢复数据库服务。实验结果表明这套高可用方案满足移动认证数据库故障自动切换要求,降低了故障切换时间、保障了移动认证平台稳定运行。

猜你喜欢

状态数据库自动
智珠二则
让小鸭子自动转身
数据库
关于自动驾驶
傍晚,路灯为什么能自动亮起来?
数据库
数据库
数据库
为什么皮肤划破后血液会自动凝结
“牛顿第一定律”练习