声明式的MySQL数据库系统高可用方法转让专利

申请号 : CN201911041056.0

文献号 : CN110532278B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 黄炎李恒

申请人 : 上海爱可生信息技术股份有限公司

摘要 :

本发明涉及数据库技术领域,提供了一种声明式的MySQL数据库系统高可用方法,其具有主数据库和从数据库,包括如下步骤:采集所述MySQL数据库系统的健康指标,并判断所述健康指标是否正常,若存在触发切换主、从数据库的异常,则进入主、从数据库切换流程;若存在可恢复的异常,则向所述MySQL数据库系统反馈异常的健康指标,由所述MySQL数据库系统自身完成自修复工作;重复上述步骤直至所述健康指标全部正常,则完成主、从数据库切换流程。本发明在主从切换过程中持续采集健康指标,以反馈数据库系统在切换过程中的状态,使数据库系统得到快速恢复的机会,解决了高可用系统在切换主、从数据库过程中的“盲切换”的缺陷,避免数据库系统卡死在切换的过程中。

权利要求 :

1.一种声明式的MySQL数据库系统高可用方法,具有主数据库和从数据库,其特征在于,包括如下步骤:

采集所述MySQL数据库系统的健康指标,并判断所述健康指标是否正常,若存在触发切换主、从数据库的异常,则进入主、从数据库切换流程;若存在可恢复的异常,则向所述MySQL数据库系统反馈异常的健康指标,由所述MySQL数据库系统自身完成自修复工作;

重复上述步骤直至所述健康指标全部正常,则完成主、从数据库切换流程;

所述健康指标至少包括:检查数据库base目录是否存在、检查数据库data目录是否存在、检查数据库centos 6进程状态、检查数据库centos 7进程状态、检查数据库是否响应SQL、检查数据库复制状态、检查数据库数据差、检查SIP是否绑定。

2.如权利要求1所述的声明式的MySQL数据库系统高可用方法,其特征在于,在所述MySQL数据库系统运行过程中,定时采集并判断所述健康指标,以监控所述MySQL数据库系统的运行状态,如所述健康指标全部正常,则到下一定时周期时重复执行采集并判断所述健康指标的任务;如所述主数据库的健康指标异常,则根据异常情况相应处理,然后立刻重新采集和判断所述健康指标,直至所述健康指标符合切换条件,完成主、从数据库切换流程。

3.如权利要求1或2所述的声明式的MySQL数据库系统高可用方法,其特征在于,对多个所述健康指标进行优先级排序,并按所述优先级顺序判断所述健康指标。

4.如权利要求1或2所述的声明式的MySQL数据库系统高可用方法,其特征在于,进入主、从数据库切换流程前,提出告警和/或要求人工介入。

5.如权利要求1所述的声明式的MySQL数据库系统高可用方法,其特征在于,所述主数据库的健康指标:检查数据库base目录是否存在、检查数据库data目录是否存在、检查数据库centos 6进程状态、检查数据库centos 7进程状态、检查数据库是否响应SQL、检查SIP是否绑定均为异常值,则卸下所述主数据库的流量入口。

6.如权利要求1所述的声明式的MySQL数据库系统高可用方法,其特征在于,所述主数据库的检查SIP是否绑定为异常值、所述从数据库的检查SIP是否绑定为正常值、所述从数据库的健康指标:检查数据库base目录是否存在、检查数据库data目录是否存在、检查数据库centos 6进程状态、检查数据库centos 7进程状态、检查数据库是否响应SQL均为正常值,且所述从数据库的检查数据库数据差比所述主数据库的检查数据库数据差低,则将所述从数据库与所述主数据库的数据补齐。

7.如权利要求1所述的声明式的MySQL数据库系统高可用方法,其特征在于,所述主数据库的检查SIP是否绑定为异常值、所述从数据库的健康指标:检查数据库base目录是否存在、检查数据库data目录是否存在、检查数据库centos 6进程状态、检查数据库centos 7进程状态、检查数据库是否响应SQL均为正常值,且所述从数据库的检查SIP是否绑定为异常值,则打开所述从数据库的流量入口。

8.如权利要求1或2所述的声明式的MySQL数据库系统高可用方法,其特征在于,包括一个主数据库和若干个从数据库,所述主数据库与一从数据库进行主从切换;所述从数据库为所有从数据库中与所述主数据库的事务差最小的从数据库;

切换成功得到新的主数据库后,其余从数据库重新定向到所述新的主数据库。

9.一种计算机可读的存储介质,其特征在于,其上存储有可执行程序,所述可执行程序被调用后,运行如权利要求1-8任一项所述的高可用方法。

说明书 :

声明式的MySQL数据库系统高可用方法

技术领域

[0001] 本发明涉及数据库技术领域,尤其涉及一种声明式的MySQL数据库系统高可用方法。

背景技术

[0002] 高可用性是大型数据系统必须具有的一个特性,具体是指保证数据库系统能在足够长的时间内提供指定程度的服务的能力,也可以理解为在有限的故障条件下,提供一定级别的稳定服务的能力。
[0003] 现有的MySQL数据库系统高可用系统(例如MHA,Master High Availability 主数据库高可用)是基于状态机实现的。其中的一个典型流程是:决策前已知MySQL数据库系统的状态是A;检测当前MySQL的监控值S;根据状态A和监控值S决定对数据库的下一步操作,即决定数据库的下一个状态。
[0004] 例如,假设存在主从两个数据库:主数据库M和从数据库S,当前数据库的状态为“正常M→S”,当主数据库M发生故障时,高可用系统决定应对数据库采取的操作是“切换S→M”,切换后,数据库的状态应为“正常S→M”。
[0005] 这类高可用系统的缺点是:高可用系统支持的操作为既定操作,比如上述的切换操作具体涉及到以下多个详细步骤:
[0006] 卸下主数据库M的流量入口;
[0007] 停止主数据库M的数据库流量;
[0008] 进行M→S的数据补偿;
[0009] 启用S的数据库流量。
[0010] 上述的4个步骤需要连续进行,其中不能有步骤失败,或者说不能有系统抖动,否则数据库状态将陷入“故障状态”。因此,在上述的切换过程中,无法支持更灵活的步骤,也无法容忍错误。
[0011] 一个理想的切换过程是,如果在切换过程中发现从数据库S存在问题,那么可以先修复问题,然后再进行数据补偿,之后才完成切换。

发明内容

[0012] 本发明的目的在于提供一种声明式的MySQL数据库系统高可用方法,用于提高数据库系统的可用性。所述数据库系统具有主数据库和从数据库,所述方法包括:
[0013] 采集所述MySQL数据库系统的健康指标,并判断所述健康指标是否正常,若存在触发切换主、从数据库的异常,则进入主、从数据库切换流程;若存在可恢复的异常,则向所述MySQL数据库系统反馈异常的健康指标,由所述MySQL数据库系统自身完成自修复工作;
[0014] 重复上述步骤直至所述健康指标全部正常,则完成主、从数据库切换流程。
[0015] 上述的声明式的MySQL数据库系统高可用方法,其中,在所述MySQL数据库系统运行过程中,定时采集并判断所述健康指标,以监控所述MySQL数据库系统的运行状态,如所述健康指标全部正常,则到下一定时周期时重复执行采集并判断所述健康指标的任务;如所述主数据库的健康指标异常,则根据异常情况相应处理,然后立刻重新采集和判断所述健康指标,直至所述健康指标符合切换条件,完成主、从数据库切换流程。
[0016] 上述的声明式的MySQL数据库系统高可用方法,其中,所述健康指标至少包括:检查数据库base目录是否存在、检查数据库data目录是否存在、检查数据库centos 6进程状态、检查数据库centos 7进程状态、检查数据库是否响应SQL、检查数据库复制状态、检查数据库数据差、检查SIP是否绑定。
[0017] 上述的声明式的MySQL数据库系统高可用方法,其中,对多个所述健康指标进行优先级排序,并按所述优先级顺序判断所述健康指标。
[0018] 上述的声明式的MySQL数据库系统高可用方法,其中,进入主、从数据库切换流程前,提出告警和/或要求人工介入。
[0019] 上述的声明式的MySQL数据库系统高可用方法,其中,所述主数据库的健康指标:检查数据库base目录是否存在、检查数据库data目录是否存在、检查数据库centos 6进程状态、检查数据库centos 7进程状态、检查数据库是否响应SQL、检查SIP是否绑定均为异常值,则卸下所述主数据库的流量入口。
[0020] 上述的声明式的MySQL数据库系统高可用方法,其中,所述主数据库的检查SIP是否绑定为异常值、所述从数据库的检查SIP是否绑定为正常值、所述从数据库的健康指标:检查数据库base目录是否存在、检查数据库data目录是否存在、检查数据库centos 6进程状态、检查数据库centos 7进程状态、检查数据库是否响应SQL均为正常值,且所述从数据库的检查数据库数据差比所述主数据库的检查数据库数据差低,则将所述从数据库与所述主数据库的数据补齐。
[0021] 上述的声明式的MySQL数据库系统高可用方法,其中,所述主数据库的检查SIP是否绑定为异常值、所述从数据库的健康指标:检查数据库base目录是否存在、检查数据库data目录是否存在、检查数据库centos 6进程状态、检查数据库centos 7进程状态、检查数据库是否响应SQL均为正常值,且所述从数据库的检查SIP是否绑定为异常值,则打开所述从数据库的流量入口。
[0022] 上述的声明式的MySQL数据库系统高可用方法,其中,包括一个主数据库和若干个从数据库,所述主数据库与一从数据库进行主从切换;所述从数据库为所有从数据库中与所述主数据库的数据差最小的从数据库;
[0023] 切换成功得到新的主数据库后,其余从数据库重新定向到所述新的主数据库。
[0024] 本发明的另一目的在于提供一种计算机可读的存储介质,其上运行上述的高可用方法。
[0025] 与现有技术相比,本发明的技术方案通过采集健康指标来监控数据库系统运行的状态,并且在主、从数据库切换的过程中,持续采集健康指标,如有异常的指标则通知数据库系统,由数据库系统执行自恢复操作,如健康指标全部正常,则完成切换主、从数据库,相对于现有的“硬切换”过程,本发明的技术方案在切换时更灵活,能够容忍部分错误,并且能将错误内容通知数据库,以便数据库进行自恢复。

附图说明

[0026] 图1是本发明一实施例的流程图。

具体实施方式

[0027] 为使本发明的目的、特征更明显易懂,下面结合附图对本发明的具体实施方式作进一步的说明。然而,本发明可以用不同的形式实现,不应只是局限在所述的实施例。且,在不冲突的情况下,本申请中的实施例及实施例中的特征允许相互组合或替换。结合以下的说明,本发明的优点和特征将更清楚。
[0028] 需说明的是,附图均采用非常简化的形式且均使用非精准的比例,仅用以方便、明晰地辅助说明本发明实施例的目的。
[0029] 还需声明的是,本发明中对步骤编号的目的在于便于引用,而非限定先后顺序。对于个别需强调顺序的步骤,文中将以专门文字进行特别说明。
[0030] 数据可用性(data availability)是一个计算机存储制造厂商和存储服务提供商(SSP ,Supply-Side Platform,即供应方平台)用来描述产品和服务的词汇,这些产品和服务是用来确保在从正常到“崩溃”的过程中,当性能保持在一个必需的级别上时,数据必须是可用的。一般来说,数据可用性是通过冗余数据存储来实现的。
[0031] 数据库系统中引用了这一概念, 即数据库系统中,为了保证数据的可用性,往往设置1主n从个相同的数据库,主、从数据库之间保持同步或异步的更新,当主数据库出现异常情况时,进行切换操作,使冗余的从数据库升级为主数据库,承担数据交换的功能。
[0032] MySQL数据库系统是一个关系型数据库管理系统,是目前最流行的关系型数据库管理系统之一。关系型数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
[0033] MHA(Master High Availability,主数据库高可用)目前在MySQL数据库系统高可用方面是一个相对成熟的解决方案,其主要逻辑是在故障环境下实现主从数据库的切换,以提升数据库的可用性。MHA能做到在0 30秒之内自动完成数据库的故障切换操作,并且在~进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用。
[0034] MHA切换主、从数据库的逻辑如下:MHA的管理节点会定时探测集群中的master节点,当master出现故障时,它可以自动将最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master。但是在这过程中,切换是按固定步骤执行的,不存在反馈数据,当然也不存在对突发状态进行处置的可能。
[0035] 数据的可用性需要从数据的一致性、准确性、完整性、时效性及实体同一性五个方面进行考察。因此如表1所示,本发明建立了一张数据库的健康指标表,并具体的根据表1中所示的各项指标分别判定运行中的主、从数据库的健康状态,如指标表征某一数据库的健康情况不佳,则可通知数据库系统进行自我修复;如有指标表征主数据库健康情况不佳,并且有必要切换主、从数据库,则通知数据库系统进入切换流程。并且,在切换的过程中,本发明继续根据表1中的各指标持续监控数据库的健康情况,如在切换过程中有健康指标异常也可通知数据库系统进行自我修复。
[0036] 表1 健康指标表
[0037]
[0038] 表1中,指标1(检查数据库base目录是否存在)为一布尔值,通过判断文件/base_path/U_MYSQL_BASE_INSTALLED 是否存在来得到正常值和异常值。若指标1为正常值则可继续当前进程,若指标1为异常值则说明检测到MySQL数据库系统的目录异常,则推断MySQL数据库系统需要进行主从数据库切换流程。
[0039] 指标2(检查数据库data目录是否存在)为一布尔值,通过判断文件/data_path/U_MYSQL_DATA_INSTALLED 或者/data_path/U_MYSQL_DATA_TAKEOVER 是否存在来得到正常值和异常值。若指标2为正常值则可继续当前进程,若指标2为异常值则说明检测到MySQL数据库系统的数据存在异常,则推断MySQL数据库系统需要进行主从数据库切换流程。
[0040] 指标3(检查数据库centos 6进程状态)为一布尔值,通过语句sudo -S su -s $(which bash) {mysql_user} -c "/etc/init.d/mysqld_3306 status"获取正常值和异常值。若指标3为正常值则可继续当前进程,若指标3为异常值则首先尝试重启主数据库2次,如重启无法解决问题,则推断MySQL数据库系统需要进行主从数据库切换流程。
[0041] 指标4(检查数据库centos 7进程状态)为一布尔值,通过语句systemctl is-active mysqld_3306.service获取正常值和异常值。若指标4为正常值则可继续当前进程,若指标4为异常值则首先尝试重启主数据库2次,如重启无法解决问题,则推断MySQL数据库系统需要进行主从数据库切换流程。
[0042] 指标5(检查数据库是否响应SQL)为一布尔值,通过命令select @@version获取正常值和异常值。若指标5为正常值则可继续当前进程,若指标5为异常值则说明数据库主动报错或者通信超时,首先尝试重启主数据库2次,如重启无法解决问题,则推断MySQL数据库系统需要进行主从数据库切换流程。
[0043] 指标6(检查数据库复制状态(1))表征了从数据库IO线程和SQL线程的工作状态。指标6也是一个布尔值,其通过命令show slave status获取从数据库IO线程和SQL线程的正常值和异常值,仅有当IO线程和SQL线程的均正常时指标6才显示为正常值,如为异常值则说明当前处在一直重启复制的状态,需要通知数据库系统该异常状态,由数据库系统进行自恢复。
[0044] 指标7(检查数据库复制状态(2))表征了主数据库中是否存在对应从数据库的dump线程。指标7也是一个布尔值,其通过命令select  * from information_schema.processlist where ((command=”Binlog Dump”)or(command=”Binlog Dump GTID))”获取正常值(存在)和异常值(不存在)。如指标7为正常值则可继续当前进程,若指标7为异常值则首先尝试重启主数据库2次,如重启无法解决问题,则推断MySQL数据库系统需要该数据库进行修复工作。
[0045] 指标8(检查数据库复制状态(3))通过网络指令ping获取主数据库的ip地址,以此作为判断io thread是否异常的依据。指标8也是一个布尔值,如果指令ping的结果是正常的,则可继续当前进程,如果指令ping的结果是异常的,则直接认为在主从数据库复制的过程中出现复制异常,需要该数据库进行修复工作。
[0046] 指标9(检查数据库数据差)表征了主从数据库间的事务差异数,通过命令show master status && show slave status && select @@gtid_purged获取,如果主数据库事务不少于从数据库则认为正常,可继续当前进程,如果从数据库事务多于主数据库则认为不正常,即认为从数据库存在脏数据,需要主、从数据库重新同步数据。
[0047] 指标10(检查SIP是否绑定)是一个布尔值,综合表征了主数据库和从数据库是否绑定了SIP。指标10通过命令ip addr来判断SIP(Service IP,服务IP)是否在ip addr输出结果内(SIP绑定是否正常),对主数据库而言,应该绑定SIP,对从数据库而言,则不应该绑定SIP。因此,如判断结果是主数据库已绑定SIP且从数据库未绑定SIP,则指标10显示为正常值,可继续当前进程,如判断结果是主数据库未绑定SIP而从数据库为绑定SIP,则指标10显示为异常值,此时,主数据库需要重新绑定SIP,而从数据库需要解绑。
[0048] 指标1 指标10列举了数据库系统运行最重要的10个指标,作为本发明中一实施例~的实施基础。本领域技术人员可根据需求或技术的发展自行增删指标,以适合不同应用。
[0049] 图1所示的流程图即为以上述十个指标为实施基础的一个实施例。本实施例提出了一种声明式的MySQL数据库系统高可用方法,其具有一个主数据库和一个从数据库(多个从数据库的情况可类推)。在数据库系统运行期间采集所述MySQL数据库系统的健康指标(例如,如表1所列的指标),并判断所述健康指标是否全部正常,若存在触发切换主、从数据库的异常,则进入主、从数据库切换流程;若存在可恢复的异常,则向所述MySQL数据库系统反馈异常的健康指标,由所述MySQL数据库系统自身完成自修复工作。并且,在所述主、从数据库切换流程中,频繁重复前述的采集、判断过程,直至所述健康指标全部正常,则完成主、从数据库切换流程。
[0050] 具体的,所述采集和判断操作是定时进行的,目的在于监控所述MySQL数据库系统的运行状态,如所述健康指标全部正常,则到下一定时周期时重复执行采集并判断所述健康指标的任务,即,完成一个理想的监控循环。如出现异常情况,导致所述主数据库的不能正常运行,则进入主、从数据库切换流程。同时,向所述MySQL数据库系统反馈异常的健康指标,由于数据库系统一般都具有一定的自恢复能力,则本发明所提供的高可用方法中可以不包括自恢复的功能,只需向数据库系统输出一个某指标异常的通知即可,由所述MySQL数据库系统自身完成自修复工作。然后,本发明所提供的高可用方法将立刻重新采集和判断所述健康指标,对该健康指标进行追踪,直至所述健康指标符合切换条件,完成主、从数据库切换流程。
[0051] 优选的,对健康指标还可以按重要性进行排序,当采集和判断这些指标时,按优先级顺序采集和判断所述健康指标。例如,表1中的10个健康指标的优先级排列(从重要到次要)可为:
[0052] 检查数据库base目录是否存在;
[0053] 检查数据库data目录是否存在;
[0054] 检查数据库data目录是否存在;
[0055] 检查数据库centos 7进程状态;
[0056] 检查数据库是否响应SQL ;
[0057] 检查SIP是否绑定;
[0058] 检查数据库复制状态(1);
[0059] 检查数据库复制状态(2);
[0060] 检查数据库复制状态(3);
[0061] 检查数据库复制状态(3)。
[0062] 具体的,图1所示的流程图具体包括如下步骤:
[0063] S1、采集各健康指标,更佳地,可按优先级顺序采集;
[0064] S2、判定各指标是否正常,更佳地,可按优先级顺序判定,如全部正常则跳转至S7,否则执行S3;
[0065] S3、如有异常指标,则首先判断所述异常是否可修复,如不可修复,则跳转至S6,否则执行S4;
[0066] S4、触发数据库系统自恢复功能;
[0067] S5、自恢复成功则跳转至S1,否则执行S6;
[0068] S6、进入主从数据库切换流程,跳转至S1;
[0069] S7、判断是否处于主从切换流程中,如否,则跳转至S1,否则执行S8;
[0070] S8、结束切换流程。
[0071] 优选的,在步骤S5 中,可尝试自恢复若干次(例如2次),若尝试了若干次自恢复都不成功,才进入步骤S6。
[0072] 优选的,在步骤S6之前还可以加入告警或者要求人工介入的步骤,也可以先告警,再要求人工介入。
[0073] 进一步地,若数据库系统中,包括多个从数据库,则,当主数据库崩溃,需要进行主从切换时,还存在切换到哪一个从数据库的问题。本发明的处理方式是:根据指标9(检查数据库数据差)的值来选择。根据前文对指标9的描述可知,指标9给出的是主、从数据库之间事务的差值。为了尽快完成切换流程,需要进行主从切换时,选择该差值最小的从数据库进行切换。切换成功得到新的主、从数据库(也就是原来的从、主数据库)后,其余从数据库(也就是未参与切换的数据库)重新定向到所述新的主数据库。
[0074] 结合表1和图1所示的流程,现提出一个实际的由于主数据库异常而进行的切换过程的示例。该示例通过一次采集发现了指标2(检查数据库data目录是否存在)和指标10(检查SIP是否绑定)共2个异常,则其处理过程如下:
[0075] 第一步,依次采集运行中的MySQL数据库的各健康指标;
[0076] 第二步,发现指标2(检查数据库data目录是否存在)异常,由于该指标是数据库系统无法自恢复的,因此,发出报警,提示需要人工手动修复;
[0077] 第三步,进入主、从数据库切换流程,由于在同一次指标采集过程中还发现了指标10(检查SIP是否绑定)也异常,也就是说,主数据库的流量入口指标是异常的,因此,将主数据库的流量入口卸下;
[0078] 第四步,再次采集MySQL数据库的各健康指标;
[0079] 第五步,发现主数据库的指标10(检查SIP是否绑定)异常,而从数据库的指标10(检查SIP是否绑定)正常,同时从数据库的指标1 指标5都正常,但指标9(检查数据库数据~差)异常;
[0080] 第六步,重新同步主从数据库的数据,即以主数据库为蓝本,将从数据库的数据补齐,即重新同步;
[0081] 第七步,再次采集MySQL数据库的各健康指标;
[0082] 第八步,发现主数据的指标10(检查SIP是否绑定)异常,同时从数据库的指标1 指~标9都正常,但指标10(检查SIP是否绑定)异常;
[0083] 第九步,将从数据库作为流量入口打开,完成切换。
[0084] 同时,本发明还提出了一种计算机可读的存储介质,其上运行上述的高可用方法。
[0085] 上述的声明式的MySQL数据库系统高可用方法不仅在数据库系统运行期间定时采集健康指标以监控数据库系统的工作状态,在主从切换的过程中仍然持续采集健康指标,以反馈数据库系统在切换过程中的状态,及时发出通知,使数据库系统得到快速恢复的机会,解决了原有的高可用系统在切换主、从数据库过程中的“盲切换”,或者说“硬切换”的缺陷,避免数据库系统卡死在切换的过程中。或者说,传统的基于过程的高可用方法是通过既定过程完成数据库状态1到状态2的转换的,而本发明所述的基于声明的方法是通过过程中的指标声明的转换,从而逐渐达成状态1到状态2的转换的。本发明进一步提高了数据库系统的可用性。
[0086] 显然,本领域的技术人员可以对发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。