一种数据库节点的故障恢复方法、装置、设备及存储介质与流程

文档序号:29573972发布日期:2022-04-09 05:06阅读:182来源:国知局
一种数据库节点的故障恢复方法、装置、设备及存储介质与流程

1.本公开涉及故障恢复技术领域,尤其涉及一种数据库节点的故障恢复方法、装置、设备及存储介质。


背景技术:

2.随着数据库技术的不断发展,数据库系统的应用日益庞大,越来越多的数据库被应用在各行各业,当现有的单机数据库无法满足业务需求时,可能需要考虑使用分布式数据库,当分布式数据库系统中一个数据库节点发生故障时,不影响其他数据库节点的访问状态,基于其他数据库节点可以对发生故障的数据库节点进行故障恢复,在故障恢复阶段,进行修复的数据库节点无法对外提供服务,从而使得用户体验不佳。
3.目前,相关技术中,当需要对数据库节点进行故障恢复时,需要通过遍历所有日志,获取用于完成故障恢复的目标日志,可能带来故障恢复耗时较长的问题,使得数据库可能较长时间无法对外提供服务。
4.因此,如何针对数据库节点故障实现快速恢复,从而缩短数据库无法对外提供服务的时间,是目前亟需解决的技术问题。


技术实现要素:

5.为了解决上述技术问题,本公开提供了一种数据库节点的故障恢复方法,能够快速确定发生修改操作且没有进行持久化的页面,从而快速获取对应的日志操作记录,针对数据库节点故障实现快速恢复,从而缩短数据库无法对外提供服务的时间。
6.第一方面,本公开提供了一种数据库节点的故障恢复方法,所述方法应用于第一节点,所述方法包括:
7.在确定第二节点发生故障时,获取所述第二节点对应的页面修改状态表;其中,所述第一节点和所述第二节点为同一个分布式数据库系统中的两个不同的数据库节点,所述页面修改状态表中包括所述第二节点中的页面与修改状态信息之间的对应关系,所述修改状态信息用于表征在当前数据持久化周期内是否发生针对与所述修改状态信息对应的页面的修改操作;
8.将所述页面修改状态表中在所述当前数据持久化周期内发生修改操作的页面,确定为所述第二节点中的待恢复页面;
9.从所述第二节点的日志文件中的与所述当前数据持久化周期对应的日志数据中,获取所述第二节点中的待恢复页面对应的日志操作记录;
10.基于所述待恢复页面对应的日志操作记录,对所述第二节点进行故障恢复。
11.一种可选的实施方式中,所述当前数据持久化周期为基于当前检查点标识确定的,所述当前数据持久化周期的起始时间为检查点标识更新为所述当前检查点标识的时间点;其中,所述当前检查点标识用于表征在所述当前检查点标识之后产生的日志数据未进行数据持久化。
12.一种可选的实施方式中,所述在确定第二节点发生故障时,获取所述第二节点对应的页面修改状态表之前,包括:
13.接收第一节点发送的广播消息,并解析所述广播消息,获取针对所述第二节点发生故障的通知消息;
14.基于所述针对所述第二节点发生故障的通知消息,确定所述第二节点发生故障。
15.一种可选的实施方式中,所述从所述第二节点的日志文件中的与所述当前数据持久化周期对应的日志数据中,获取所述第二节点中的待恢复页面对应的日志操作记录之前,包括:
16.从日志文件系统中获取所述第二节点的日志文件;其中,所述日志文件系统用于存储所述分布式数据库系统中各个数据库节点对应的日志文件;
17.从所述第二节点的日志文件中确定所述当前检查点标识之后生成的日志数据,获取与所述当前检查点标识对应的所述当前数据持久化周期对应的日志数据。
18.一种可选的实施方式中,所述日志操作记录包括原始日志记录和重做日志记录;所述基于所述待恢复页面对应的日志操作记录,对所述第二节点进行故障恢复,包括:
19.将所述待恢复页面对应的原始日志记录加载到所述第一节点,得到所述待恢复页面对应的目标页面;其中,所述原始日志记录用于恢复被修改前的所述待恢复页面上的数据;
20.针对所述目标页面进行上锁;
21.将所述待恢复页面对应的重做日志记录加载到所述第一节点,并基于所述重做日志记录,修改所述目标页面,对所述第二节点进行故障恢复。
22.一种可选的实施方式中,所述将所述待恢复页面对应的重做日志记录加载到所述第一节点,并基于所述重做日志记录,修改所述目标页面,对所述第二节点进行故障恢复,包括:
23.基于所述重做日志记录,确定所述重做日志记录对应的事务是否为已提交状态;
24.如果确定所述重做日志记录对应的事务为已提交状态,则基于所述重做日志记录,修改所述目标页面,对所述第二节点进行故障恢复。
25.一种可选的实施方式中,所述方法还包括:
26.将所述页面修改状态表中在所述当前数据持久化周期内未发生修改操作的页面,确定为所述第二节点中的第二页面;
27.从所述第二节点的日志文件中获取所述第二页面对应的日志数据;其中,所述第二页面对应的日志数据为在所述当前检查点标识之前产生的已进行数据持久化的日志数据;
28.将所述第二页面对应的日志数据加载到所述第一节点,以对所述第二节点进行故障恢复。
29.第二方面,本公开提供了一种数据库节点的故障恢复装置,所述装置应用于第一节点,所述装置包括:
30.第一获取模块,用于在确定第二节点发生故障时,获取所述第二节点对应的页面修改状态表;其中,所述第一节点和所述第二节点为同一个分布式数据库系统中的两个不同的数据库节点,所述页面修改状态表中包括所述第二节点中的页面与修改状态信息之间
的对应关系,所述修改状态信息用于表征在当前数据持久化周期内是否发生针对与所述修改状态信息对应的页面的修改操作;
31.第一确定模块,用于将所述页面修改状态表中在所述当前数据持久化周期内发生修改操作的页面,确定为所述第二节点中的待恢复页面;
32.第二获取模块,用于从所述第二节点的日志文件中的与所述当前数据持久化周期对应的日志数据中,获取所述第二节点中的待恢复页面对应的日志操作记录;
33.恢复模块,用于基于所述待恢复页面对应的日志操作记录,对所述第二节点进行故障恢复。
34.第三方面,本公开提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当所述指令在终端设备上运行时,使得所述终端设备实现上述的方法。
35.第四方面,本公开提供了一种设备,包括:存储器,处理器,及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时,实现上述的方法。
36.本公开实施例提供的技术方案与现有技术相比至少具有如下优点:
37.本公开实施例提供了一种数据库节点的故障恢复方法,首先,第一节点在确定第二节点发生故障时,获取第二节点对应的页面修改状态表,其中,第一节点和第二节点为同一个分布式数据库系统中的两个不同的数据库节点,页面修改状态表中包括第二节点中的页面与修改状态信息之间的对应关系,修改状态信息用于表征在当前数据持久化周期内是否发生针对与修改状态信息对应的页面的修改操作,然后,将页面修改状态表中在当前数据持久化周期内发生修改操作的页面,确定为第二节点中的待恢复页面,从第二节点的日志文件中的与当前数据持久化周期对应的日志数据中,获取第二节点中的待恢复页面对应的日志操作记录,进而,基于待恢复页面对应的日志操作记录,对第二节点进行故障恢复。可见,本公开实施例基于页面修改状态表,能够快速确定发生修改操作且没有进行持久化的页面,从而快速获取对应的日志操作记录,针对数据库节点故障实现快速恢复,从而缩短数据库无法对外提供服务的时间。
附图说明
38.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
39.为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
40.图1为本公开实施例提供的一种数据库节点的故障恢复方法的流程图;
41.图2为本公开实施例提供的另一种数据库节点的故障恢复方法的流程图;
42.图3为本公开实施例提供的一种数据库节点的故障恢复装置的结构示意图;
43.图4为本公开实施例提供的一种数据库节点的故障恢复设备的结构示意图。
具体实施方式
44.为了能够更清楚地理解本公开的上述目的、特征和优点,下面将对本公开的方案
进行进一步描述。需要说明的是,在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合。
45.在下面的描述中阐述了很多具体细节以便于充分理解本公开,但本公开还可以采用其他不同于在此描述的方式来实施;显然,说明书中的实施例只是本公开的一部分实施例,而不是全部的实施例。
46.随着数据库技术的不断发展,数据库系统的应用日益庞大,越来越多的数据库被应用在各行各业,当现有的单机数据库无法满足业务需求时,可能需要考虑使用分布式数据库,当分布式数据库系统中一个数据库节点发生故障时,不影响其他数据库节点的访问状态,基于其他数据库节点可以对发生故障的数据库节点进行故障恢复,在故障恢复阶段,进行修复的数据库节点无法对外提供服务,从而使得用户体验不佳。
47.目前,相关技术中,当需要对数据库节点进行故障恢复时,需要通过遍历所有日志,获取用于完成故障恢复的目标日志,可能带来故障恢复耗时较长的问题,使得数据库可能较长时间无法对外提供服务。
48.因此,如何针对数据库节点故障实现快速恢复,从而缩短数据库无法对外提供服务的时间,是目前亟需解决的技术问题。
49.为此,本公开实施例提供了一种数据库节点的故障恢复方法,首先,第一节点在确定第二节点发生故障时,获取第二节点对应的页面修改状态表,其中,第一节点和第二节点为同一个分布式数据库系统中的两个不同的数据库节点,页面修改状态表中包括第二节点中的页面与修改状态信息之间的对应关系,修改状态信息用于表征在当前数据持久化周期内是否发生针对与修改状态信息对应的页面的修改操作,然后,将页面修改状态表中在当前数据持久化周期内发生修改操作的页面,确定为第二节点中的待恢复页面,从第二节点的日志文件中的与当前数据持久化周期对应的日志数据中,获取第二节点中的待恢复页面对应的日志操作记录,进而,基于待恢复页面对应的日志操作记录,对第二节点进行故障恢复。可见,本公开实施例基于页面修改状态表,能够快速确定发生修改操作且没有进行持久化的页面,从而快速获取对应的日志操作记录,针对数据库节点故障实现快速恢复,从而缩短数据库无法对外提供服务的时间。
50.基于此,本公开实施例提供了一种数据库节点的故障恢复方法,参考图1,为本公开实施例提供的一种数据库节点的故障恢复方法流程图,数据库节点的故障恢复方法应用于第一节点,该方法包括:
51.s101:第一节点在确定第二节点发生故障时,获取第二节点对应的页面修改状态表。
52.其中,第一节点和第二节点为同一个分布式数据库系统中的两个不同的数据库节点,页面修改状态表中包括第二节点中的页面与修改状态信息之间的对应关系,修改状态信息用于表征在当前数据持久化周期内是否发生针对与修改状态信息对应的页面的修改操作。
53.在实际应用中,一个分布式数据库系统在逻辑上是一个统一的整体,在物理上则是分别存储在不同的节点上,一个应用程序通过网络的连接可以访问分布在不同地理位置的数据库。一个分布式数据库系统中的一个节点可以运行一个或多个数据库,每个数据库分别对应一个内部数据存储空间,用于将常用的数据存储于本地。此外,一个分布式数据库
系统中的多个不同的节点还对应同一个外部存储装置,例如共享磁盘,用于存储各个节点运行时产生的操作日志或永久保存的数据等。
54.本公开实施例中,第一节点和第二节点为同一个分布式数据库系统中的两个不同的数据库节点,一个节点可以运行一个或多个数据库,一个数据库上包括多个页面,以页面的形式存储数据,数据库将不同的页面加载到不同的节点上,当用户执行查询操作等时,以页面的形式将数据返回给用户。
55.本公开实施例中,第一节点在确定第二节点发生故障时,获取第二节点对应的页面修改状态表,其中,页面修改状态表是由第二节点发送到第一节点的,第一节点在接收到第二节点发送的页面修改状态表后,可以将该页面修改状态表暂存在对应的本地内存中。各个节点在运行时都可以记录对应的各个页面在数据持久化周期内的修改状态信息,得到各个节点对应的页面修改状态表,其中,修改状态信息用于表征在当前数据持久化周期内是否发生针对与修改状态信息对应的页面的修改操作,修改操作可以包括针对数据的提交、更新、删除、查询等操作。
56.本公开实施例中,每个节点对应一个页面修改状态表,在一个分布式数据库系统中,第一节点也可以向第二节点发送对应的页面修改状态表,第二节点在接收到第一节点发送的页面修改状态表后,可以将该页面修改状态表暂存在第二节点对应的本地内存中。
57.本公开实施例中,页面修改状态表对应的数据结构可以为包含键值对关系的数据结构,其中,键值对关系中的键key用于存储页面标识,键值对关系中的值value用于存储页面标识对应的页面的修改状态信息。例如,页面标识包括第二节点中各个页面的页面id,假设key=block1,当该键key对应的value=1时,可以表征在当前数据持久化周期内有发生针对页面1的修改操作,当该键key对应的value=0时,可以表征在当前数据持久化周期内没有发生针对页面1的修改操作。
58.本公开实施例中,数据持久化为把内存中的数据保存到可永久保存的存储设备(如磁盘)中,分布式数据库系统对应的外部存储装置(如共享磁盘)可以包括用于存储瞬时数据的第一模块和用于存储持久数据的第二模块,其中,瞬时数据可以包括各个节点运行时产生的操作日志等,在一个数据持久化周期内可以将瞬时数据持久化为持久数据存储于第二模块。如果当前时间点处于当前数据持久化周期内,则说明上一个数据持久化周期内第一模块中的瞬时数据已经持久化为持久数据存储于第二模块中。
59.一种可选的实施方式中,当前数据持久化周期为基于当前检查点标识确定的,当前数据持久化周期的起始时间为检查点标识更新为当前检查点标识的时间点;其中,当前检查点标识用于表征在当前检查点标识之后产生的日志数据未进行数据持久化。
60.本公开实施例中,当前数据持久化周期可以基于当前检查点标识确定,其中,检查点标识存储于第一模块中,在检查点标识之后产生的日志数据为瞬时数据,即未进行数据持久化的数据,当检查点标识对应的日志被执行时,将该检查点标识之后产生的日志数据进行持久化操作,并变更新的检查点标识,变更后的检查点标识之后产生的日志数据为未进行数据持久化的数据。也就是说,当前数据持久化周期的起始时间为检查点标识更新为当前检查点标识的时间点,当前数据持久化周期的结束时间为当前检查点标识对应的日志被执行的时间点,在当前数据持久化周期内产生的日志数据为未进行数据持久化的数据。
61.举例说明,假设第一模块中检查点标识checkpoint0对应的日志被执行,则将
checkpoint0之后产生的日志数据进行持久化操作,并变更检查点标识为checkpoint1,即当前检查点标识为checkpoint1,checkpoint1对应的数据持久化周期为当前数据持久化周期,在当前数据持久化周期内产生的日志数据为未进行数据持久化的数据。
62.本公开实施例中,第一节点在确定第二节点发生故障时,获取第二节点对应的页面修改状态表,其中,页面修改状态表可以用于确定在当前数据持久化周期内,是否发生针对第二节点中的各个页面的修改操作,如果存在针对页面1的修改操作,则说明在当前数据持久化周期内,针对页面1存在未进行数据持久化的日志数据;如果不存在针对页面2的修改操作,则说明在当前数据持久化周期内,针对页面2不存在未进行数据持久化的日志数据,即页面2已进行数据持久化操作,并存储于第二模块。
63.一种可选的实施方式中,在第一节点确定第二节点发生故障之前,首先,接收第一节点发送的广播消息,并解析该广播消息,获取针对第二节点发生故障的通知消息,进而,基于针对第二节点发生故障的通知消息,可以确定第二节点发生故障。
64.本公开实施例中,同一个分布式数据库系统中的第一节点和第二节点各自对应一个集群管理软件,用于对运行在该节点上的数据库进行管理,并且各个集群管理软件通信连接,第一节点对应的集群管理软件可以接收来自第二节点对应的集群管理软件发送的广播消息,并对该广播消息进行解析,得到第二节点发生故障的通知消息,进而,第一节点对应的集群管理软件可以告知第一节点该通知消息,使得第一节点确定第二节点发生故障。
65.本公开实施例中,同一个分布式数据库系统中可以包括一个主节点,其他节点对应的集群管理软件可以向主节点对应的集群管理软件发送各自对应的广播消息,主节点对应的集群管理软件在接收到来自第二节点对应的集群管理软件发送的广播消息时,可以将该广播消息发送至第一节点对应的集群管理软件,第一对应的集群管理软件可以对该广播消息进行解析,得到第二节点发生故障的通知消息,进而,第一节点对应的集群管理软件可以告知第一节点该通知消息,使得第一节点确定第二节点发生故障。
66.s102:将页面修改状态表中在当前数据持久化周期内发生修改操作的页面,确定为第二节点中的待恢复页面。
67.本公开实施例中,在对页面进行修改操作时,首先在共享磁盘的第一模块中生成一个日志记录,用于保存该页面的原始数据,然后针对该页面的修改操作,对应生成一个或多个日志记录也存储在第一模块,进而在第二节点上完成针对该页面的修改操作,其中,第一模块中的日志记录例如包括插入操作日志、更新操作日志、提交操作日志、删除操作日志等。在当前数据持久化周期内,基于针对页面的修改操作,生成节点对应的页面修改状态表,并将页面修改状态表发送至同一个分布式数据库系统中的其他节点中。
68.本公开实施例中,基于上述s101中获取的第二节点对应的页面修改状态表,确定页面修改状态表中在当前数据持久化周期内发生修改操作的页面,确定为第二节点中的待恢复页面。
69.举例说明,以第二节点包括三个页面为例,在当前检查点标识checkpoint1对应的当前数据持久化周期内,假设t1时间点只对页面1进行修改操作,针对页面1进行修改操作的步骤为:首先,在共享磁盘的第一模块中生成一个日志记录,用于保存页面1的原始数据,然后,针对页面1的修改操作,对应生成一个或多个日志记录存储在第一模块,进而,在第二节点上针对页面1进行修改操作。t1时间点生成的第二节点对应的页面修改状态表(如表1)
中,key=block1对应的value为1,key=block2对应的value为0,key=block3对应的value为0。
70.假设t2时间点只对页面2进行修改操作,针对页面2进行修改操作的步骤为:首先,共享磁盘的第一模块中生成一个日志记录,用于保存页面2的原始数据,然后,针对页面2的修改操作,对应生成一个或多个日志记录存储在第一模块,进而,在第二节点上针对页面2进行修改操作。t2时间点生成的页面修改状态表(如表2)替换表1,成为第二节点对应的页面修改状态表,在表2中,key=block1对应的value为1,key=block2对应的value为1,key=block3对应的value为0。此时,确定第二节点发生故障,获取的第二节点对应的页面修改状态表为表2,基于表2可以确定在当前数据持久化周期内发生修改操作的页面包括页面1和页面2,则将页面1和页面2确定为第二节点中的待恢复页面。
71.s103:从第二节点的日志文件中的与当前数据持久化周期对应的日志数据中,获取第二节点中的待恢复页面对应的日志操作记录。
72.本公开实施例中,在分布式数据库系统对应的外部存储装置(如共享磁盘)中,确定第二节点对应的日志文件,在第二节点对应的日志文件中,确定与当前数据持久化周期对应的日志数据,其中,与当前数据持久化周期对应的日志数据包括需要执行的日志数据、无需执行的日志数据和其他日志数据等,在与当前数据持久化周期对应的日志数据中,获取第二节点中的待恢复页面对应的日志操作记录。
73.本公开实施例中,基于上述s102中确定的第二节点中的待恢复页面,可以快速获取待恢复页面对应的日志操作记录,从而能够提高基于日志操作记录对数据库节点进行故障恢复的速度。
74.一种可选的实施方式中,从第二节点的日志文件中确定与当前数据持久化周期对应的日志数据时,首先,从日志文件系统中获取第二节点的日志文件,日志文件系统用于存储分布式数据库系统中各个数据库节点对应的日志文件,进而,从第二节点的日志文件中确定当前检查点标识之后生成的日志数据,获取与当前检查点标识对应的当前数据持久化周期对应的日志数据。
75.本公开实施例中,分布式数据库系统对应的外部存储装置(如共享磁盘)可以包括第一模块和第二模块,其中,第一模块可以为日志文件系统,用于存储各个数据库节点针对页面进行操作时产生的操作日志。从日志文件系统中获取第二节点的日志文件,然后,从第二节点的日志文件中确定当前检查点标识之后生成的日志数据,其中,该日志数据为未进行数据持久化的数据对应的日志记录,获取与当前检查点标识对应的当前数据持久化周期对应的日志数据,进而,可以在与当前数据持久化周期对应的日志数据中,获取第二节点中的待恢复页面对应的日志操作记录,其中,获取的日志操作记录可以用于在第一节点中对待恢复页面进行故障恢复。
76.s104:基于待恢复页面对应的日志操作记录,对第二节点进行故障恢复。
77.本公开实施例中,基于上述s103中获取的第二节点中的待恢复页面对应的日志操作记录,可以在第一节点上对第二节点中的待恢复页面进行故障恢复,在故障恢复过程中,第一节点无法对外提供服务,即用户无法访问第二节点的数据库,当在第一节点上完成对第二节点中的待恢复页面的故障恢复,即完成对第二节点的故障恢复后,第一节点和第二节点均可以对外提供服务。
78.本公开实施例中,基于上述s102中确定的第二节点中的待恢复页面,可以快速获取待恢复页面对应的日志操作记录,提高了基于日志操作记录对数据库节点进行故障恢复的速度,从而缩短了数据库无法对外提供服务的时间。
79.一种可选的实施方式中,待恢复页面对应的日志操作记录包括原始日志记录和重做日志记录,可根据如下步骤a1-a3,基于待恢复页面对应的日志操作记录,对第二节点进行故障恢复。
80.步骤a1:将待恢复页面对应的原始日志记录加载到第一节点,得到待恢复页面对应的目标页面。
81.其中,原始日志记录用于恢复被修改前的待恢复页面上的数据。
82.本公开实施例中,基于上述s103获取的第二节点中的待恢复页面对应的日志操作记录,首先将待恢复页面对应的原始日志记录加载到第一节点,在第一节点上恢复被修改前的待恢复页面上的数据,得到待恢复页面对应的目标页面。
83.步骤a2:针对目标页面进行上锁。
84.本公开实施例中,在将待恢复页面在第一节点上完成恢复被修改前的待恢复页面上的数据之后,将目标页面进行上锁,此时,用户无法通过第一节点或其他节点访问该目标页面。
85.步骤a3:将待恢复页面对应的重做日志记录加载到第一节点,并基于重做日志记录,修改目标页面,对第二节点进行故障恢复。
86.本公开实施例中,将待恢复页面对应的重做日志记录加载到第一节点,其中,重做日志记录可以包括插入操作日志、更新操作日志、提交操作日志、删除操作日志等。基于一个或多个重做日志记录,对目标页面进行修改,完成对待恢复页面的故障恢复,此时,用户可以通过第一节点或其他节点访问恢复完成的页面。
87.一种可选的实施方式中,在基于重做日志记录,修改目标页面时,基于重做日志记录,确定重做日志记录对应的事务是否为已提交状态,如果确定重做日志记录对应的事务为已提交状态,则基于重做日志记录,修改目标页面,对第二节点进行故障恢复。
88.本公开实施例中,在针对页面进行修改操作时,生成对应的数据库事务,数据库事务具有原子性,即事务中的全部操作在数据库中是不可分割的,如果在针对某个页面进行修改操作的过程中,其所在的数据库节点发生故障,则该事务可能处于未提交的状态。在基于重做日志记录,修改目标页面时,确定重做日志记录对应的事务是否为已提交状态,对于已提交状态的事务,则基于重做日志记录,修改目标页面,对第二节点进行故障恢复;而对于未提交状态的事务,则直接撤销该重做日志记录对应的事务即可。
89.举例说明,假设在针对页面(页面1)进行修改操作时生成对应的数据库事务a和数据库事务b,其中,数据库事务a包括三个插入(insert)操作,数据库事务b包括两个插入(insert)操作。假设在执行数据库事务b时,页面1所在的数据库节点发生故障,在基于页面1对应的重做日志记录,对页面1进行故障恢复时,获取的数据库事务a对应的重做日志记录至少包括三个插入操作日志,且该三个插入操作日志以begin开头,以commit结尾,则说明数据库事务a为已提交状态;而获取的数据库事务b对应的重做日志记录可能仅包括一个插入操作日志或者包括两个插入操作日志,但该两个插入操作日志没有以begin开头,以commit结尾,则则说明数据库事务b为未提交状态。进而,可以直接撤销数据库事务b,仅对
于数据库事务a,基于数据库事务a对应的重做日志记录,修改目标页面,对第二节点进行故障恢复。
90.一种可选的实施方式中,将页面修改状态表中在当前数据持久化周期内未发生修改操作的页面,确定为第二节点中的第二页面,从第二节点的日志文件中获取第二页面对应的日志数据,其中,第二页面对应的日志数据为在当前检查点标识之前产生的已进行数据持久化的日志数据,进而,将第二页面对应的日志数据加载到第一节点,以对第二节点进行故障恢复。
91.本公开实施例中,基于上述s101获取的第二节点对应的页面修改状态表,还可以确定在当前数据持久化周期内未发生修改操作的页面,作为第二节点中的第二页面,在当前数据持久化周期内未发生修改操作的页面为已进行数据持久化的页面,则第二页面对应的日志数据存储在分布式数据库系统对应的外部存储装置(如共享磁盘)的第二模块中,直接从第二模块获取第二页面对应的日志数据加载到第一节点,以完成对第二节点的故障恢复。
92.本公开实施例提供的数据库节点的故障恢复方法中,首先,第一节点在确定第二节点发生故障时,获取第二节点对应的页面修改状态表,其中,第一节点和第二节点为同一个分布式数据库系统中的两个不同的数据库节点,页面修改状态表中包括第二节点中的页面与修改状态信息之间的对应关系,修改状态信息用于表征在当前数据持久化周期内是否发生针对与修改状态信息对应的页面的修改操作,然后,将页面修改状态表中在当前数据持久化周期内发生修改操作的页面,确定为第二节点中的待恢复页面,从第二节点的日志文件中的与当前数据持久化周期对应的日志数据中,获取第二节点中的待恢复页面对应的日志操作记录,进而,基于待恢复页面对应的日志操作记录,对第二节点进行故障恢复。可见,本公开实施例基于页面修改状态表,能够快速确定发生修改操作且没有进行持久化的页面,从而快速获取对应的日志操作记录,针对数据库节点故障实现快速恢复,从而缩短数据库无法对外提供服务的时间。
93.基于上述实施例,本公开提供了一种数据库节点的故障恢复方法的具体应用场景。如图2所示,为本公开实施例提供的另一种数据库节点的故障恢复方法的流程图,该数据库节点的故障恢复方法应用于第一节点,包括如下步骤:
94.s201:第一节点在确定第二节点发生故障时,获取第二节点对应的页面修改状态表。
95.其中,第一节点和第二节点为同一个分布式数据库系统中的两个不同的数据库节点,页面修改状态表中包括第二节点中的页面与修改状态信息之间的对应关系,修改状态信息用于表征在当前数据持久化周期内是否发生针对与修改状态信息对应的页面的修改操作。
96.本公开实施例中,第一节点和第二节点所在的同一个分布式数据库系统对应一个外部存储装置(如共享磁盘),共享磁盘包括第一模块(如xlog存储模块)和第二模块(如data存储模块)。
97.本公开实施例中,第一节点和第二节点各自对应一个集群管理软件,并且各个集群管理软件通信连接,当第一节点对应的集群管理软件接收到来自第二节点对应的集群管理软件发送的广播消息时,对该广播消息进行解析,得到第二节点发生故障的通知消息,进
而,第一节点在确定第二节点发生故障,获取第二节点对应的页面修改状态表,其中,页面修改状态表可以用于确定在当前数据持久化周期内,是否发生针对第二节点中的各个页面的修改操作。
98.本公开实施例中,页面修改状态表对应的数据结构可以为包含键值对关系的数据结构,其中,键key为第二节点中各个页面的页面id,值value为页面对应的修改状态信息,当value=1时,可以表征在当前数据持久化周期内有发生针对该页面的修改操作,value=0时,可以表征在当前数据持久化周期内没有发生针对该页面的修改操作。
99.本公开实施例中,当前数据持久化周期可以基于当前检查点标识(如checkpoint1)确定,在当前检查点标识checkpoint1之后产生的日志数据未进行数据持久化,未进行数据持久化对应的日志数据存储于xlog存储模块中。
100.s202:确定页面修改状态表中各个页面在当前数据持久化周期内是否存在修改操作,如果是,则执行s203;如果否,则执行s208。
101.本公开实施例中,基于上述s201中获取的页面修改状态表,确定第二节点的各个页面当前数据持久化周期内是否存在修改操作,假设以第二节点包括三个页面为例,在当前检查点标识checkpoint1对应的当前数据持久化周期内,基于页面修改状态表确定key=block1对应的value为1,key=block2对应的value为1,key=block3对应的value为0,则可以确定页面1和页面2为在当前数据持久化周期内存在修改操作的页面,针对页面1和页面2执行s203;页面3为在当前数据持久化周期内不存在修改操作的页面,针对页面3执行s208。
102.s203:将页面修改状态表中在当前数据持久化周期内发生修改操作的页面,确定为第二节点中的待恢复页面。
103.本公开实施例中,基于上述s202,将第二节点中的页面1和页面2确定为第二节点中的待恢复页面。
104.s204:从第二节点的日志文件中的与当前数据持久化周期对应的日志数据中,获取第二节点中的待恢复页面对应的日志操作记录。
105.其中,日志操作记录包括原始日志记录和重做日志记录。
106.本公开实施例中,基于上述s203确定的第二节点中的待恢复页面,从外部存储装置(如共享磁盘)的第一模块(如xlog存储模块)中获取第二节点对应的日志文件中与当前数据持久化周期对应的日志数据,在与当前数据持久化周期对应的日志数据中,获取第二节点中的待恢复页面对应的原始日志记录和重做日志记录,其中,重做日志记录可以包括插入操作日志、更新操作日志、提交操作日志、删除操作日志等。
107.s205:将待恢复页面对应的原始日志记录加载到第一节点,得到待恢复页面对应的目标页面。
108.其中,原始日志记录用于恢复被修改前的待恢复页面上的数据。
109.本公开实施例中,将上述s204获取的获取的第二节点中的待恢复页面对应的原始日志记录加载到第一节点,在第一节点上恢复被修改前的待恢复页面上的数据,得到待恢复页面对应的目标页面。
110.s206:针对目标页面进行上锁。
111.本公开实施例中,针对目标页面进行上锁,此时,用户无法通过第一节点或其他节点访问该目标页面。
112.s207:将待恢复页面对应的重做日志记录加载到第一节点,并基于重做日志记录,修改目标页面,对第二节点进行故障恢复。
113.本公开实施例中,将上述s204获取的获取的第二节点中的待恢复页面对应的重做日志记录加载到第一节点,基于一个或多个重做日志记录,对目标页面进行修改,完成对待恢复页面的故障恢复。
114.本公开实施例中,在基于重做日志记录,修改目标页面时,基于重做日志记录,确定重做日志记录对应的事务是否为已提交状态,如果确定重做日志记录对应的事务为未提交状态,则直接撤销该重做日志记录对应的事务;如果确定重做日志记录对应的事务为已提交状态,则基于重做日志记录,修改目标页面,对第二节点进行故障恢复。
115.s208:将页面修改状态表中在当前数据持久化周期内未发生修改操作的页面,确定为第二节点中的第二页面。
116.本公开实施例中,基于上述s202,将第二节点中的页面3确定为第二节点中的第二页面。
117.s209:从第二节点的日志文件中获取第二页面对应的日志数据。
118.其中,第二页面对应的日志数据为在当前检查点标识之前产生的已进行数据持久化的日志数据。
119.本公开实施例中,第二页面为已进行数据持久化的页面,则第二页面对应的日志数据存储在外部存储装置(如共享磁盘)的第二模块(如data存储模块)中,从data存储模块中中获取第二页面对应的日志数据。
120.s210:将第二页面对应的日志数据加载到第一节点,以对第二节点进行故障恢复。
121.本公开实施例中,将上述s209获取的第二页面对应的日志数据加载到第一节点,即可在第一节点上对第二页面进行故障恢复,以完成对第二节点的故障恢复。
122.本公开实施例提供的数据库节点的故障恢复方法中,首先,第一节点在确定第二节点发生故障时,获取第二节点对应的页面修改状态表,其中,第一节点和第二节点为同一个分布式数据库系统中的两个不同的数据库节点,页面修改状态表中包括第二节点中的页面与修改状态信息之间的对应关系,修改状态信息用于表征在当前数据持久化周期内是否发生针对与修改状态信息对应的页面的修改操作,然后,将页面修改状态表中在当前数据持久化周期内发生修改操作的页面,确定为第二节点中的待恢复页面,从第二节点的日志文件中的与当前数据持久化周期对应的日志数据中,获取第二节点中的待恢复页面对应的日志操作记录,进而,基于待恢复页面对应的日志操作记录,对第二节点进行故障恢复。可见,本公开实施例基于页面修改状态表,能够快速确定发生修改操作且没有进行持久化的页面,从而快速获取对应的日志操作记录,针对数据库节点故障实现快速恢复,从而缩短数据库无法对外提供服务的时间。
123.与上述实施例基于同一个发明构思,本公开实施例还提供了一种数据库节点的故障恢复装置,参考图3,为本公开实施例提供的一种数据库节点的故障恢复装置的结构示意图,所述数据库节点的故障恢复装置300包括:
124.第一获取模块301,用于在确定第二节点发生故障时,获取所述第二节点对应的页面修改状态表;其中,所述第一节点和所述第二节点为同一个分布式数据库系统中的两个不同的数据库节点,所述页面修改状态表中包括所述第二节点中的页面与修改状态信息之
间的对应关系,所述修改状态信息用于表征在当前数据持久化周期内是否发生针对与所述修改状态信息对应的页面的修改操作;
125.第一确定模块302,用于将所述页面修改状态表中在所述当前数据持久化周期内发生修改操作的页面,确定为所述第二节点中的待恢复页面;
126.第二获取模块303,用于从所述第二节点的日志文件中的与所述当前数据持久化周期对应的日志数据中,获取所述第二节点中的待恢复页面对应的日志操作记录;
127.恢复模块304,用于基于所述待恢复页面对应的日志操作记录,对所述第二节点进行故障恢复。
128.一种可选的实施方式中,所述当前数据持久化周期为基于当前检查点标识确定的,所述当前数据持久化周期的起始时间为检查点标识更新为所述当前检查点标识的时间点;其中,所述当前检查点标识用于表征在所述当前检查点标识之后产生的日志数据未进行数据持久化。
129.一种可选的实施方式中,所述装置还包括:
130.第三获取模块,用于接收第一节点发送的广播消息,并解析所述广播消息,获取针对所述第二节点发生故障的通知消息;
131.第二确定模块,用于基于所述针对所述第二节点发生故障的通知消息,确定所述第二节点发生故障。
132.一种可选的实施方式中,所述装置还包括:
133.第四获取模块,用于从日志文件系统中获取所述第二节点的日志文件;其中,所述日志文件系统用于存储所述分布式数据库系统中各个数据库节点对应的日志文件;
134.第五获取模块,用于从所述第二节点的日志文件中确定所述当前检查点标识之后生成的日志数据,获取与所述当前检查点标识对应的所述当前数据持久化周期对应的日志数据。
135.一种可选的实施方式中,所述日志操作记录包括原始日志记录和重做日志记录;所述恢复模块304,包括:
136.第一加载子模块,用于将所述待恢复页面对应的原始日志记录加载到所述第一节点,得到所述待恢复页面对应的目标页面;其中,所述原始日志记录用于恢复被修改前的所述待恢复页面上的数据;
137.上锁子模块,用于针对所述目标页面进行上锁;
138.第二加载子模块,用于将所述待恢复页面对应的重做日志记录加载到所述第一节点,并基于所述重做日志记录,修改所述目标页面,对所述第二节点进行故障恢复。
139.一种可选的实施方式中,所述第二加载子模块,包括:
140.确定子模块,用于基于所述重做日志记录,确定所述重做日志记录对应的事务是否为已提交状态;
141.恢复子模块,用于如果确定所述重做日志记录对应的事务为已提交状态,则基于所述重做日志记录,修改所述目标页面,对所述第二节点进行故障恢复。
142.一种可选的实施方式中,所述装置还包括:
143.第三确定模块,用于将所述页面修改状态表中在所述当前数据持久化周期内未发生修改操作的页面,确定为所述第二节点中的第二页面;
144.第六获取模块,用于从所述第二节点的日志文件中获取所述第二页面对应的日志数据;其中,所述第二页面对应的日志数据为在所述当前检查点标识之前产生的已进行数据持久化的日志数据;
145.加载模块,用于将所述第二页面对应的日志数据加载到所述第一节点,以对所述第二节点进行故障恢复。
146.本公开实施例提供的数据库节点的故障恢复装置中,首先,第一节点在确定第二节点发生故障时,获取第二节点对应的页面修改状态表,其中,第一节点和第二节点为同一个分布式数据库系统中的两个不同的数据库节点,页面修改状态表中包括第二节点中的页面与修改状态信息之间的对应关系,修改状态信息用于表征在当前数据持久化周期内是否发生针对与修改状态信息对应的页面的修改操作,然后,将页面修改状态表中在当前数据持久化周期内发生修改操作的页面,确定为第二节点中的待恢复页面,从第二节点的日志文件中的与当前数据持久化周期对应的日志数据中,获取第二节点中的待恢复页面对应的日志操作记录,进而,基于待恢复页面对应的日志操作记录,对第二节点进行故障恢复。可见,本公开实施例基于页面修改状态表,能够快速确定发生修改操作且没有进行持久化的页面,从而快速获取对应的日志操作记录,针对数据库节点故障实现快速恢复,从而缩短数据库无法对外提供服务的时间。
147.除了上述方法和装置以外,本公开实施例还提供了一种计算机可读存储介质,计算机可读存储介质中存储有指令,当所述指令在终端设备上运行时,使得所述终端设备实现本公开实施例所述的数据库节点的故障恢复方法。
148.另外,本公开实施例还提供了一种数据库节点的故障恢复设备400,参见图4所示,可以包括:
149.处理器401、存储器402、输入装置403和输出装置404。数据库节点的故障恢复设备中的处理器401的数量可以一个或多个,图4中以一个处理器为例。在本公开的一些实施例中,处理器401、存储器402、输入装置403和输出装置404可通过总线或其它方式连接,其中,图4中以通过总线连接为例。
150.存储器402可用于存储软件程序以及模块,处理器401通过运行存储在存储器402的软件程序以及模块,从而执行数据库节点的故障恢复设备的各种功能应用以及数据处理。存储器402可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序等。此外,存储器402可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。输入装置403可用于接收输入的数字或字符信息,以及产生与数据库节点的故障恢复设备的用户设置以及功能控制有关的信号输入。
151.具体在本实施例中,处理器401会按照如下的指令,将一个或一个以上的应用程序的进程对应的可执行文件加载到存储器402中,并由处理器401来运行存储在存储器402中的应用程序,从而实现上述数据库节点的故障恢复设备的各种功能。
152.需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些
要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
153.以上所述仅是本公开的具体实施方式,使本领域技术人员能够理解或实现本公开。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本公开的精神或范围的情况下,在其它实施例中实现。因此,本公开将不会被限制于本文所述的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1