一种避免CTDB数据恢复时崩溃的方法、装置及介质与流程

文档序号:15888469发布日期:2018-11-09 19:48阅读:207来源:国知局
一种避免CTDB数据恢复时崩溃的方法、装置及介质与流程

本发明涉及数据库领域,特别是涉及一种避免ctdb数据恢复时崩溃的方法、装置及介质。

背景技术

samba服务是在linux或unix系统上实现smb协议的软件,能够实现客户端对服务器中数据的访问。

samba服务会将运行时所使用或产生的用户数据以及工作记录存储至ctdb(临时数据库集群)中,ctdb往往被搭载于集群环境下的多个设备节点中,其中ctdb数据节点用于控制不同的tdb(临时数据库)的数据存取,ctdb主节点用于监控以及控制ctdb数据节点。当有ctdb主节点出现故障或发生改变时,往往需要恢复其对tdb整体化的记录。进行数据恢复的所需要的相关参数往往被注册在任务列表中。

如图1所示的,是当前情况下进行数据恢复所参照的任务列表的结构,其中,srvid_handler_list为任务列表;srvid为任务id(身份识别号);srvid_handler*h为记录数据恢复函数(pull_database_handler)与预先申请的内存空间地址(tevent_req*req)之间对应关系的映射链表,任务id与映射链表之间存在唯一对应关系。在进行数据恢复时,ctdb主节点依照上述任务列表的结构根据任务id查找对应的映射链表,并根据映射链表获悉对应的恢复函数以及内存空间地址,进而执行该恢复函数以将所获得的数据缓存至该内存空间地址。

但是由于在恢复过程中,ctdb数据节点仍可能对tdb中数据进行io操作,因此可能出现数据恢复错误的情况。在此情况下,ctdb主节点会释放内存空间地址(tevent_req*req)下用于缓存恢复数据的内存空间,当系统再次尝试数据恢复或对数据恢复任务进行相关监控时,将由于无法通过内存空间地址找到该内存空间而产生core文件,进而导致ctdb主节点的崩溃,难以保证ctdb进行数据恢复时的可靠性。

由此可见,提供一种避免ctdb数据恢复时崩溃的方法,以保证ctdb进行数据恢复时的可靠性,是本领域技术人员需要解决的问题。



技术实现要素:

本发明的目的是提供一种避免ctdb数据恢复时崩溃的方法、装置及介质,以保证ctdb进行数据恢复时的可靠性。

为解决上述技术问题,本发明提供一种避免ctdb数据恢复时崩溃的方法,包括:

当ctdb主节点执行数据恢复任务时,获取目标任务id所对应的目标恢复任务的当前状态;

当当前状态异常时,在任务列表中查找目标任务id对应的映射链表;其中,映射链表中包括用于执行目标恢复任务的数据恢复函数以及用于缓存恢复数据而预先申请的内存空间地址,且数据恢复函数与内存空间地址存在映射关系;

将映射链表移除出任务列表,以避免对内存空间地址进行访问而造成ctdb主节点崩溃。

优选的,当当前状态异常时,该方法进一步包括:

将目标恢复任务的相关信息记录至表征未完成任务的任务日志;其中,相关信息中至少包括内存空间地址所对应的内存空间容量以及数据恢复函数。

优选的,在将目标恢复任务的相关信息记录至表征未完成任务的任务日志后,该方法进一步包括:

依照内存空间容量在ctdb主节点中申请新内存空间地址,并建立新内存空间地址与数据恢复函数之间的映射关系,生成新映射链表;

将新映射链表与新目标任务id对应记录至任务列表,以用于再次执行目标恢复任务。

优选的,获取目标任务id所对应的目标恢复任务的当前状态具体为:

以随机的方式获取目标任务id所对应的当前状态。

优选的,目标任务id具体为十六进制形式的随机数。

优选的,ctdb主节点具体为运行有linux操作系统的服务器。

此外,本发明还提供一种避免ctdb数据恢复时崩溃的装置,包括:

状态获取模块,用于当ctdb主节点执行数据恢复任务时,获取目标任务id所对应的目标恢复任务的当前状态;

链表查找模块,用于当当前状态异常时,在任务列表中查找目标任务id对应的映射链表;其中,映射链表中包括用于执行目标恢复任务的数据恢复函数以及用于缓存恢复数据而预先申请的内存空间地址,且数据恢复函数与内存空间地址存在映射关系;

链表移除模块,用于将映射链表移除出任务列表,以避免对内存空间地址进行访问而造成ctdb主节点崩溃。

优选的,该装置进一步包括:

日志记录模块,用于将目标恢复任务的相关信息记录至表征未完成任务的任务日志;其中,相关信息中至少包括内存空间地址所对应的内存空间容量以及数据恢复函数。

此外,本发明还提供一种避免ctdb数据恢复时崩溃的装置,包括:

存储器,用于存储计算机程序;

处理器,用于执行计算机程序时实现如上述的避免ctdb数据恢复时崩溃的方法的步骤。

此外,本发明还提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现如上述的避免ctdb数据恢复时崩溃的方法的步骤。

本发明所提供的避免ctdb数据恢复时崩溃的方法,当ctdb主节点所进行的数据恢复出现异常时,根据异常任务的任务id在任务列表中查找对应映射链表,并且将映射链表从任务列表中移除。由于映射链表中包含有预先申请的内存空间地址,因此即使出现系统因数据恢复出现异常而将内存空间地址释放的情况,也能够确保系统尝试再次执行该异常任务或进行该异常任务的相关监控时,无法在任务列表中获悉内从空间地址的情况,以此避免系统由于无法找到该内存空间而产生core文件,进而避免了ctdb的崩溃,保证了ctdb进行数据恢复时的可靠性。此外,本发明还提供一种避免ctdb数据恢复时崩溃的装置及介质,有益效果同上所述。

附图说明

为了更清楚地说明本发明实施例,下面将对实施例中所需要使用的附图做简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为当前情况下进而数据恢复所参照的任务列表的结构;

图2为本发明实施例提供的一种避免ctdb数据恢复时崩溃的方法的流程图;

图3为本发明实施例提供的一种避免ctdb数据恢复时崩溃的装置的结构图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下,所获得的所有其他实施例,都属于本发明保护范围。

本发明的核心是提供一种避免ctdb数据恢复时崩溃的方法,以保证ctdb进行数据恢复时的可靠性。本发明的另一核心是提供一种避免ctdb数据恢复时崩溃的装置及介质。

为了使本技术领域的人员更好地理解本发明方案,下面结合附图和具体实施方式对本发明作进一步的详细说明。

实施例一

图2为本发明实施例提供的一种避免ctdb数据恢复时崩溃的方法的流程图。请参考图2,避免ctdb数据恢复时崩溃的方法的具体步骤包括:

步骤s10:当ctdb主节点执行数据恢复任务时,获取目标任务id所对应的目标恢复任务的当前状态。

需要说明的是,ctdb数据节点往往管理有多个tdb数据库,ctdb主节点执行数据恢复任务时,是以tdb数据库为单位进行的,即针对每一个tdb数据库建立对应的数据恢复任务,数据恢复任务用于实现拉取tdb数据库中的数据并重新构建至ctdb节点中,相应的,每一个数据恢复任务都有对应的任务id。另外,对于ctdb主节点与ctdb数据节点之间的数据交互是本领域所公知的技术内容,在此不做赘述。在本步骤中,通过选定目标任务id以获悉该目标id对应的目标恢复任务的当前状态,由于可能存在拉取tdb数据库进行数据恢复时,该tdb数据库尚未被“冻结”,仍有数据io的情况,导致数据不一致,进而当前状态可能因此存在异常。

步骤s11:当当前状态异常时,在任务列表中查找目标任务id对应的映射链表。

其中,映射链表中包括用于执行目标恢复任务的数据恢复函数以及用于缓存恢复数据而预先申请的内存空间地址,且数据恢复函数与内存空间地址存在映射关系。

任务列表的具体结构请参考图1,任务列表中(srvid_handler_list)包含有一系列的数据恢复任务,每一个数据恢复任务都有对应的任务id(srvid),并且任务id与对应的映射链表(srvid_handler*h)存在对应关系,即每个任务id仅有一个对应的映射链表,在映射链表中对应记录有数据恢复函数(pull_database_handler)与内存空间地址(tevent_req*req),在ctdb节点执行数据恢复任务时,将依照目标任务id获取目标映射链表,进而调用目标映射链表中记录的恢复函数,并将恢复函数所产生的结果缓存至内存空间地址下的内存块中。

步骤s12:将映射链表移除出任务列表,以避免对内存空间地址进行访问而造成ctdb主节点崩溃。

由于在数据恢复任务的执行出现异常时,映射链表中的内存空间地址对应的内存空间将被释放,进而无法根据内存空间地址查找到用于缓存数据的内存块,因此一旦因再次执行此数据恢复任务或对此数据恢复任务进行相关监控而访问内存空间地址时,会造成内存空访问的发生,导致ctdb主节点崩溃。而本步骤采取将映射链表移除出任务列表的方式,避免在任务列表中检索到映射链表,进而防止检索到内存空间地址的情况发生。

本发明所提供的避免ctdb数据恢复时崩溃的方法,当ctdb主节点所进行的数据恢复出现异常时,根据异常任务的任务id在任务列表中查找对应映射链表,并且将映射链表从任务列表中移除。由于映射链表中包含有预先申请的内存空间地址,因此即使出现系统因数据恢复出现异常而将内存空间地址释放的情况,也能够确保系统尝试再次执行该异常任务或进行该异常任务的相关监控时,无法在任务列表中获悉内从空间地址的情况,以此避免系统由于无法找到该内存空间而产生core文件,进而避免了ctdb的崩溃,保证了ctdb进行数据恢复时的可靠性。

实施例二

在上述实施例的基础上,本发明还提供以下一系列优选的实施方式。

作为一种优选的实施方式,当当前状态异常时,该方法进一步包括:

将目标恢复任务的相关信息记录至表征未完成任务的任务日志。

其中,相关信息中至少包括内存空间地址所对应的内存空间容量以及数据恢复函数。

考虑到ctdb主节点执行数据恢复任务的总量往往较大,当有数据恢复任务执行异常时,则可能导致tdb数据库中的数据未被顺利重构至ctdb主节点,这对于ctdb主节点整体的数据恢复来说是不完整的,因此本实施方式采取任务日志的方式记录未完成的目标恢复任务的相关信息,便于技术人员根据任务日志所记录的内容对未完成的目标恢复任务进行相应的处理。由于充足的内存空间容量以及正确的数据恢复函数是确保完成数据恢复的基础,因此在本实施方式中,相关信息中至少包括内存空间地址所对应的内存空间容量以及数据恢复函数,以便于再次对未恢复成功的数据进行恢复。

在上述实施方式的基础上,作为一种优选的实施方式,在将目标恢复任务的相关信息记录至表征未完成任务的任务日志后,该方法进一步包括:

依照内存空间容量在ctdb主节点中申请新内存空间地址,并建立新内存空间地址与数据恢复函数之间的映射关系,生成新映射链表;

将新映射链表与新目标任务id对应记录至任务列表,以用于再次执行目标恢复任务。

可以理解的是,本实施方式是根据任务日志所记载的内存空间容量申请新的内存空间地址,进而将新的内存空间地址与数据恢复函数映射为新的映射链表,并将映射链表与新目标任务id对应记录至任务列表以实现ctdb主节点根据任务列表中的新目标任务id再次执行目标恢复任务,以此保证ctdb主节点进行数据恢复的完整性。

此外,作为一种优选的实施方式,获取目标任务id所对应的目标恢复任务的当前状态具体为:

以随机的方式获取目标任务id所对应的当前状态。

由于在任务列表中,各个数据恢复任务的任务id均是顺序排列的,为了提高选取的目标恢复任务的随机性,确保能够相对公平的获悉每一个数据恢复任务的当前状态,本实施方式采用随机的方式获取目标任务id所对应的当前状态,相对提高了获取状态异常的数据恢复任务的效率。

此外,作为一种优选的实施方式,目标任务id具体为十六进制形式的随机数。

由于考虑到在当前情况下ctdb主节点所管理的tdb数据库的数量相对庞大,每一个tdb数据库均对应有一个数据恢复任务,因此数据恢复任务的整体数量也比较庞大,采用随机数作为任务id可以避免任务id之间出现重复的情况,并且由于十六进制数的每个数位能够表示的值相对更多,因此通过十六进制数表征任务id能够相对减少数位对空间的占用。

此外,作为一种优选的实施方式,ctdb主节点具体为运行有linux操作系统的服务器。

由于考虑到linux操作系统是开源操作系统,相对节省使用成本并且由于其底层代码可见,因此更加易于维护,相较于windows系统来说linux系统的稳定性以及安全性更高,保证了ctdb节点工作的可靠性。

实施例三

在上文中对于避免ctdb数据恢复时崩溃的方法的实施例进行了详细的描述,本发明还提供一种与该方法对应的避免ctdb数据恢复时崩溃的装置,由于装置部分的实施例与方法部分的实施例相互对应,因此装置部分的实施例请参见方法部分的实施例的描述,这里暂不赘述。

图3为本发明实施例提供的一种避免ctdb数据恢复时崩溃的装置的结构图。本发明实施例提供的避免ctdb数据恢复时崩溃的装置,包括:

状态获取模块10,用于当ctdb主节点执行数据恢复任务时,获取目标任务id所对应的目标恢复任务的当前状态。

链表查找模块11,用于当当前状态异常时,在任务列表中查找目标任务id对应的映射链表;其中,映射链表中包括用于执行目标恢复任务的数据恢复函数以及用于缓存恢复数据而预先申请的内存空间地址,且数据恢复函数与内存空间地址存在映射关系。

链表移除模块12,用于将映射链表移除出任务列表,以避免对内存空间地址进行访问而造成ctdb主节点崩溃。

本发明所提供的避免ctdb数据恢复时崩溃的装置,当ctdb主节点所进行的数据恢复出现异常时,根据异常任务的任务id在任务列表中查找对应映射链表,并且将映射链表从任务列表中移除。由于映射链表中包含有预先申请的内存空间地址,因此即使出现系统因数据恢复出现异常而将内存空间地址释放的情况,也能够确保系统尝试再次执行该异常任务或进行该异常任务的相关监控时,无法在任务列表中获悉内从空间地址的情况,以此避免系统由于无法找到该内存空间而产生core文件,进而避免了ctdb的崩溃,保证了ctdb进行数据恢复时的可靠性。

在实施例三的基础上,该装置还包括:

日志记录模块,用于将目标恢复任务的相关信息记录至表征未完成任务的任务日志;其中,相关信息中至少包括内存空间地址所对应的内存空间容量以及数据恢复函数。

实施例四

本发明还提供一种避免ctdb数据恢复时崩溃的装置,包括:

存储器,用于存储计算机程序;

处理器,用于执行计算机程序时实现如上述避免ctdb数据恢复时崩溃的方法的步骤。

本发明所提供的避免ctdb数据恢复时崩溃的装置,当ctdb主节点所进行的数据恢复出现异常时,根据异常任务的任务id在任务列表中查找对应映射链表,并且将映射链表从任务列表中移除。由于映射链表中包含有预先申请的内存空间地址,因此即使出现系统因数据恢复出现异常而将内存空间地址释放的情况,也能够确保系统尝试再次执行该异常任务或进行该异常任务的相关监控时,无法在任务列表中获悉内从空间地址的情况,以此避免系统由于无法找到该内存空间而产生core文件,进而避免了ctdb的崩溃,保证了ctdb进行数据恢复时的可靠性。

本发明还提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现如上述避免ctdb数据恢复时崩溃的方法的步骤。

本发明所提供的避免ctdb数据恢复时崩溃的计算机可读存储介质,当ctdb主节点所进行的数据恢复出现异常时,根据异常任务的任务id在任务列表中查找对应映射链表,并且将映射链表从任务列表中移除。由于映射链表中包含有预先申请的内存空间地址,因此即使出现系统因数据恢复出现异常而将内存空间地址释放的情况,也能够确保系统尝试再次执行该异常任务或进行该异常任务的相关监控时,无法在任务列表中获悉内从空间地址的情况,以此避免系统由于无法找到该内存空间而产生core文件,进而避免了ctdb的崩溃,保证了ctdb进行数据恢复时的可靠性。

以上对本发明所提供的一种避免ctdb数据恢复时崩溃的方法、装置及介质进行了详细介绍。说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。

还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1