一种数据恢复方法、服务器和计算机可读介质与流程

文档序号:16207657发布日期:2018-12-08 07:19阅读:239来源:国知局
一种数据恢复方法、服务器和计算机可读介质与流程

本发明涉及计算机的技术领域,尤其是涉及一种数据恢复方法、服务器和计算机可读介质。

背景技术

随着信息技术的飞速发展,信息数据量也是爆炸式增长。为了安全灵活可靠的对上述大量信息数据进行存储,分布式存储系统ceph就是一个能很好解决以上问题的开源分布式存储系统。作为一个面向大规模的分布式存储系统,ceph存储集群可以在节点失效时候正常提供对外业务服务,这得益于ceph中归置组(placementgroup,简称pg)组件。pg是ceph中的逻辑存储单元,当有数据存储到集群中时,数据会被划分成若干对象,第一次采用哈希hash算法先将对象映射到pg上,然后再采用crush算法将pg映射到osd(objectstoragedevice,对象存储设备)上,这样数据就会被写到对应的osd上。

ceph集群可以应付一定程度的节点异常情况。在写数据时,ceph集群会采用副本技术或者是纠删码技术来存储数据。但是,ceph集群在运行中不可避免地会出现设备节点异常的情况,会导致pg的各个副本间的数据存在不一致的情况,这样就会进行数据的恢复工作。ceph集群依靠pg来进行数据的恢复操作,可以有效应对部分节点异常情况,从而保证集群数据存储的可靠性。

但是,在ceph集群运行中,某些情况下会错误地选择版本落后的节点osd作为权威osd构建出落后的权威pglog(也即,pg日志),这样就会导致ceph集群数据以错误的pglog为参考来进行恢复,从而导致ceph集群数据异常,无法对外正常提供存储业务服务。



技术实现要素:

有鉴于此,本发明的目的在于提供一种数据恢复方法、装置、服务器和计算机可读介质,以缓解了通过现有的数据恢复方法对ceph集群进行数据恢复时由于错误的选择权威osd导致的数据恢复异常的技术问题。

第一方面,本发明实施例提供了一种数据恢复方法,所述方法包括:在第一osd确定出自身处于数据落后状态之后,基于ceph集群中的目标pg所对应的osd发生变化的各个历史阶段时期确定osd序列;所述数据落后状态表示与第二osd相比,第一osd中存储的目标pg的副本落后于第二osd中存储的目标pg的副本,第一osd和第二osd均为目标pg所对应的osd,所述osd序列中的osd用于存储所述目标pg的副本,且在ceph集群中处于标准工作状态;在所述osd序列中查找目标osd,其中,所述目标osd中关系图osdmap的版本值与所述ceph集群监控器中关系图osdmap的版本值相同;如果查找到所述目标osd,则在所述osd序列中选择权威osd,并基于所述权威osd对待恢复osd进行数据恢复操作。

进一步地,在所述osd序列中查找目标osd之前,所述方法还包括:判断所述osd序列中osd的数量是否为多个;如果判断出所述osd序列中osd的数量是为多个,则判断所述osd序列中是否存在所述目标osd;其中,如果判断出osd序列中存在所述目标osd,则在所述osd序列中选择权威osd,并基于所述权威osd对待恢复osd进行数据恢复操作。

进一步地,如果判断出所述osd序列中的osd的数量为一个,所述方法还包括:在检测到新的osd加入到所述osd序列中之后,则执行判断所述osd序列中是否存在所述目标osd的步骤;其中,如果判断出osd序列中包括所述目标osd,则在所述osd序列中选择权威osd,并基于所述权威osd对待恢复osd进行数据恢复操作。

进一步地,如果在所述osd序列中未查找到所述目标osd,所述方法还包括:周期性获取所述目标pg在各个历史阶段时期内所对应的osd,直至检测到存在目标osd时,将检测到的所述目标osd的标识信息添加至所述osd序列中,并执行在所述osd序列中选择权威osd的步骤。

进一步地,在所述osd序列中选择权威osd,并基于所述权威osd对待恢复osd进行数据恢复操作包括:确定所述权威osd的日志信息,其中,所述日志信息中包括所述目标pg的全部操作信息;基于所述权威osd的日志信息确定待恢复数据,并在所述待恢复osd中执行待恢复数据的恢复操作。

第二方面,本发明实施例提供了另一种数据恢复方法,所述方法包括:在检测到故障osd恢复到正常运行之后,对所述故障osd进行预隔离处理,以使预隔离处理之后的所述故障osd处于停止工作模式;在检测到激活指令之后,按照上述所述的数据恢复方法对所述故障osd进行数据恢复,其中,所述激活指令为激活处于停止工作模式的故障osd。

进一步地,所述激活指令为所述ceph集群中的监控器在检测到所述ceph集群满足数据恢复条件的情况下,向所述故障osd发送的所述激活指令。

第三方面,本发明实施例提供了一种服务器,所述服务器为设置有ceph集群中对象存储设备osd的服务器,所述服务器包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述第一方面和第二方面所述的方法。

第四方面,本发明实施例提供了一种具有处理器可执行的非易失的程序代码的计算机可读介质,所述程序代码使所述处理器执行上述第一方面和第二方面所述的方法。

在本实施例中,通过osdmap定义了健康osd和非健康osd,如果某个osd被确定为非健康osd,那么该osd有很大可能处于数据落后的状态,而健康osd未处于数据落后状态。因此,在本实施例中,通过在osd序列中包括健康osd(即,目标osd)的情况下,在osd序列中选择权威osd的方式,能够避免出现处于数据落后状态的osd被选择为权威osd的情况,从而有效防止由于错误权威osd以及错误权威日志信息的选取而导致的数据恢复错误的情况,以缓解通过现有的数据恢复方法对ceph集群进行数据恢复时由于错误的选择权威osd导致的数据恢复异常的技术问题,从而实现了防止ceph集群中节点异常的情况下对权威osd以及权威日志的错误选举的发生。

本发明的其他特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。

为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。

附图说明

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

图1是根据本发明实施例的一种可选的数据恢复方法的流程图;

图2是根据本发明实施例的第一种可选的数据恢复方法的流程图

图3是根据本发明实施例的第二种可选的数据恢复方法的流程图

图4是根据本发明实施例的第三种可选的数据恢复方法的流程图;

图5是根据本发明实施例的第四种可选的数据恢复方法的流程图;

图6是根据本发明实施例的另一种数据恢复方法的流程图;

图7是根据本发明实施例的另一种可选地数据恢复方法的流程图;

图8是根据本发明实施例的一种数据恢复装置的示意图;

图9是根据本发明实施例的另一种数据恢复装置的示意图。

具体实施方式

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

ceph集群在运行中不可避免地会出现节点出现异常的情况,这就会导致pg所对应的对象的各个副本间出现数据不一致的情况,此时,就会进行数据的恢复工作。ceph集群依靠pg来进行数据的恢复操作,其中,数据恢复是使从副本完成达成一致的状态。数据的恢复操作可以有效应对当部分节点异常情况,保证集群数据存储的可靠性。下面具体描述该数据恢复操作。

例如,ceph集群中的逻辑组织单元pg(例如,pg1.0)所对应的对象以三副本存储方式存储在osd.0(即primaryosd),osd.1(即secondaryosd)和osd.2(即tertiaryosd)中。其中,三副本包括:一个主副本和两个从副本。

如果集群监控器monitor感知到osd.0异常下线,则monitor计算与该osd.0具有映射关系的全部pg(假设只有pg1.0),并主动向集群中与pg1.0具有映射关系的osd发送通知消息,通知信息为osd.0处于异常下线。

当osd.0掉线之后,pg1.0所对应对象的副本数未达到规定的数量。此时,标记pg1.0为降级(degraded)状态。如果在规定时间内osd.0恢复上线并通知monitor,monitor收到osd.0的上线通知后会判断出osd.0是ceph集群中旧有的osd,此时pg分配按原来的分布继续使用,monitor会向pg1.0所映射的osd发送通知消息,以通知该osd.0恢复上线的情况。

如果osd.0用来存储pg1.0所对应某一对象的主副本,则osd.0在离线时,主副本的角色临时由其他节点中的从副本代替。在osd.0重新上线后,会主动去查询pg1.0所对应对象的从副本的pg元数据。收到回复后,osd.0进行比较会发现自己处于落后状态,并就将收到的信息合并出最新最权威的pglog,同时建立missing结构列表标记过时数据,权威pglog建立完成后,标记pg1.0由peering(等待互联)状态变换为active(活动)状态。之后,按照权威pglog进行数据的恢复操作。

如果osd.0用来存储所对应某一对象的从副本,那么在从副本所在的osd重新上线后会响应主副本所在osd节点发送的查询请求,并回复自己已经过时的pglog和元数据。主副本所在osd节点在收到后该pglog和元数据之后,就会知道该从副本处于落后状态,此时,主副本所在osd节点同样也会建立missing结构列表标记过时数据。

如上所述,ceph集群依靠自身的恢复模块设计能逐步进行数据的恢复,让所有副本达到一致的状态。

但是,在实际生产的环境中出现的异常情况往往会比较复杂,一些异常情况下甚至会导致集群数据无法恢复,无法对外提供存储服务。

例如,在一个ceph集群中,包括3个节点,且该集群中pg以3副本方式进行存储。在本实施例中,节点可以是机架,机房和服务器,本实施例中不做限定。在上述3个节点中,设置有osd,例如osd.1位于节点1中,osd.2位于节点2中、osd.3位于节点3中。如果3个osd中的osd.3突发故障,osd.1和osd.2仍是正常状态,ceph集群此时仍不断有存储io操作。因为ceph集群仍能在两个osd的情况下对外提供存储服务,故异常的osd.3并没有立马去进行修复,也即ceph集群一直以2节点和2副本的状态运行。在ceph集群运行若干天后,ceph集群中节点出现故障,并批量重启,之前故障的osd.3也重新上线,并重新加入到ceph集群。假设,过段时间后osd.1和osd.2故障掉线,在相关技术中,要求选择的权威osd为up且in状态的osd,由此,osd.3会被选择为权威osd,并且osd.1和osd.2在重新上线之后,将会进行数据恢复的操作。具体地,待节点osd.1和节点osd.2上线后,osd.3作为权威osd会发送本地的pg_info给osd.1和osd.2,osd.1和osd.2会发现自己本地的pglog与权威pglog相差太大,ceph集群以osd.3的旧版本数据来恢复pg,就导致集群数据恢复错误,最终就可能导致osd震荡,集群出现unfound丢失数据的状态,集群存储业务就无法正常对外提供。

在ceph集群peering过程后,在数据恢复过程中找不到对象正确版本所在的osd,数据无法恢复,则标记对象为unfound。

针对上述问题,在本实施例中,提出了一种数据恢复方法,该方法能够有效避免数据恢复错误的情况,以缓解通过现有的数据恢复方法对ceph集群进行数据恢复时由于错误的选择权威osd导致的数据恢复异常的技术问题,从而实现了防止ceph集群中节点异常的情况下对权威osd以及权威日志的错误选举的现象发生。下面将结合具体实施例介绍该数据恢复方法。

根据本发明实施例,提供了一种数据恢复的实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。

图1是根据本发明实施例的一种数据恢复方法的流程图。如图1所示,该方法包括如下步骤:

步骤s102,在第一osd确定出自身处于落后状态之后,基于ceph集群中的目标pg所对应的osd发生变化的各个历史阶段时期确定osd序列;所述数据落后状态表示与第二osd相比,第一osd中存储的目标pg的副本落后于第二osd中存储的目标pg的副本,第一osd和第二osd均为目标pg所对应的osd,所述osd序列中的osd为用于存储所述目标pg的副本的osd,且在ceph集群中处于标准工作状态;

在本实施例中,目标pg所对应的osd发生变化的各个历史阶段时期又可以称为pastinterval,interval是一个osdmap版本值epoch的序列,在这个interval内,可能存在多个epoch,但是pg所对应的osd成员却不会改变。如果pg所对应的osd成员发生变化,则会形成newinterval,current是当前的序列,past是指过去的interval。第二osd为除了第一osd以外,目标pg所对应的osd。

在本实施例中,osd序列又可以称为priorosd。osd序列中的osd为用于存储目标pg的副本的osd,且在ceph集群中处于标准工作状态,其中,标准工作状态是指osd处于up且in的状态。up且in状态为osd的一种标准工作状态,表示osd正常运行,且承载至少一个pg的数据。

对于任意一个osd,共有四种可能的状态:

up且in:说明该osd正常运行,且已经承载至少一个pg的数据。这是一个osd的标准工作状态;

up且out:说明该osd正常运行,但并未承载任何pg,其中也没有数据。一个新的osd刚刚被加入ceph集群后,便会处于这一状态。而一个出现故障的osd被修复后,重新加入ceph集群时,也是处于这一状态;

down且in:说明该osd发生异常,但仍然承载着至少一个pg,其中仍然存储着数据。这种状态下的osd刚刚被发现存在异常,可能仍能恢复正常,也可能会彻底无法工作;

down且out:说明该osd已经彻底发生故障,且已经不再承载任何pg。

如果pg为pg1.0,那么osd序列中包括的osd满足以下条件:用于存储pg1.0所对应对象的主从副本,且该osd处于标准工作状态。其中,用于存储pg1.0的主从副本可以理解为该osd为pg1.0所对应的actingset集合中的osd。

一般情况下,每个pg会对应两个集合,分别为:actingset和upset。其中,actingset就是一个pg对应的副本所在的osd列表;upset是某一个pgmap历史版本的actingset。在大多数情况下,actingset和upset是一致的,除非出现了pgtemp。pgtemp是一个临时的actingset。pgmap是由monitor维护的所有pg的状态。

例如,某个pg的actingset是[osd.0,osd.1,osd.2],当osd.0异常掉线后,变为[osd.3,osd.1,osd.2]。由于,此时osd.3还是空的,因此它无法提供数据服务。所以osd.3还需要等待数据恢复过程结束。此时,可以向监控器申请一个临时的actingset比如[osd.1,osd.2,osd.3]。临时的actingset表示此时将由osd.1作为主osd提供数据服务。数据恢复过程结束后,该临时actingset会被丢弃,重新由osd.3作为主osd提供服务。

步骤s104,在所述osd序列中查找目标osd,其中,所述目标osd中关系图osdmap的版本值与所述ceph集群监控器中关系图osdmap的版本值相同;

在本实施例中,目标osd又可以称为健康osd,与此相对的,集群中的osd还包括不健康osd。

当ceph集群中的节点出现硬盘故障或者阵列卡故障时,此时,节点的osd处于离线状态。此时,对于存储设备处于离线状态的节点来说,集群监控器monitor所持有的osdmap的版本与该节点本地osd所持有的osdmap的版本就会存在差异,即节点本地存储的osdmap版本会落后于集群监控器monitor持有的osdmap的版本。因此,在本实施例中,定义节点本地osd存储的osdmap的版本落后于monitor持有的osdmap的版本的osd称为“不健康osd”。与此相对的就是节点本地osd存储的osdmap的版本和monitor持有的osdmap的版本一致的就称为“健康osd”。

步骤s106,如果查找到所述目标osd,则在所述osd序列中选择权威osd,并基于所述权威osd对待恢复osd进行数据恢复操作。

在本实施例中,如果在priorosd中查找到健康的osd,则在osd序列中选择权威osd,并基于权威osd对待恢复osd进行数据恢复操作。

需要说明的是,在本实施例中,在ceph集群进行数据恢复的过程中,涉及多个pg,但对于任意一个pg(例如,目标pg),在数据恢复过程中选择出来的权威osd应该是一个。但是对于目标pg来说,目标pg的权威osd还有可能是其他pg的非权威osd。在本实施例中,仅以一个pg(目标pg)为例进行说明,涉及其他pg的数据恢复过程与涉及目标pg的数据恢复过程相同,此处不再赘述。

在本实施例中,通过osdmap定义了健康osd和非健康osd,如果某个osd被确定为非健康osd,那么该osd有很大可能处于数据落后的状态,而健康osd未处于数据落后状态。因此,在本实施例中,通过在osd序列中包括健康osd(即,目标osd)的情况下,在osd序列中选择权威osd的方式,能够避免出现处于数据落后状态的osd被选择为权威osd的情况,从而有效防止由于错误权威osd以及错误权威日志信息的选取而导致的数据恢复错误的情况,以缓解通过现有的数据恢复方法对ceph集群进行数据恢复时由于错误的选择权威osd导致的数据恢复异常的技术问题,从而实现了防止ceph集群中节点异常的情况下对权威osd以及权威日志的错误选举的发生。

在本实施例中,触发ceph集群进行数据恢复的场景包括以下几种:

场景一、osd短暂离线后,其数据版本落后于集群中的其他osd,此时,需要对该短暂离线的osd进行数据恢复;

场景二、osd永久异常,那么此时会有替代该osd角色的osd开始工作,新osd也是没有对应信息的,所以需要进行数据恢复。

在一个可选的实施例中,如果在所述osd序列中未查找到所述目标osd,在上述步骤s102-s106所描述的实施例的基础上,若在osd序列中未查找到目标osd,如图2所示,该方法还包括如下步骤:

步骤s201,周期性获取所述目标pg在各个历史阶段时期内所对应的osd;直至检测到存在目标osd时执行步骤s202;

步骤s202,将检测到的所述目标osd的标识信息添加至所述osd序列中,并执行在所述osd序列中选择权威osd的步骤。

在本实施例中,在第一osd确定出自身处于数据落后状态之后,首先,确定目标pg所对应的osd发生变化的各个历史阶段时期pastinterval。然后,基于各个历史阶段时期pastinterval确定用于执行数据恢复的osd序列priorosd。其中,确定osd序列priorosd的过程如上述步骤s102所述,此处不再赘述。接下来,在osd序列priorosd中查找目标osd(即,健康osd)。

如果在osd序列priorosd中查找到健康osd,则在osd序列priorosd中选择权威osd,并基于权威osd对待恢复osd进行数据恢复操作。如果在osd序列priorosd中未查找到健康osd,则周期性的继续在目标pg在各个历史阶段时期内所对应的osd中检测目标osd(健康osd),直至检测到存在目标osd时,将该健康osd添加至osd序列中。在将该健康osd添加至osd序列中之后,就可以返回继续执行步骤s106,即在osd序列中选择权威osd,并基于权威osd对待恢复osd进行数据恢复操作。

通过上述描述可知,在数据恢复时需要选择权威osd。在本实施例中,首先获取目标pg在各个历史阶段时期pastinterval内所对应的osd,进而,根据这些osd构建osd序列priorosd;然后,在osd序列priorosd中包含健康osd的情况下,从osd序列中选择权威osd。

需要说明的是,如果承载目标pg的所有osd都出现异常,那么就会导致数据的丢失,该情况不在本实施例的考虑范围内。本实施例针对的是一个pg所对应的部分osd失效后数据恢复的情况。这样在选出的每个pg的priorosd的集合中可能会有健康osd和不健康osd。

如果在priorosd的集合中没有健康osd,则数据恢复不再往下进行,即不会选择出权威osd。此时会周期性的反复探测pastinterval内的健康osd,如果发现健康osd,则会将该健康osd的标识信息加入到priorosd的集合中。因为健康osd在权威osd选举中一定会较不健康osd胜出,故就不会错误地选举到不健康osd作为权威osd,从而避免了不健康osd记录的错误的权威pglog(权威osd的日志信息)。

综上,在本实施例中,能够有效避免数据恢复错误的情况,以缓解通过现有的数据恢复方法对ceph集群进行数据恢复时由于错误的选择权威osd导致的数据恢复异常的技术问题,从而实现了防止ceph集群中节点异常的情况下对权威osd以及权威日志的错误选举的发生。

在一个可选的实施例中,如图3所示,该方法包括如下步骤:

步骤s102,在第一osd确定出自身处于数据落后状态之后,基于ceph集群中的目标pg所对应的osd发生变化的各个历史阶段时期确定osd序列;所述数据落后状态表示与第二osd相比,第一osd中存储的目标pg的副本落后于第二osd中存储的目标pg的副本,第一osd和第二osd均为目标pg所对应的osd,所述osd序列中的osd为用于存储所述目标pg的副本的osd,且在ceph集群中处于标准工作状态;

步骤s301,判断所述osd序列中osd的数量是否为多个;如果判断出所述osd序列中osd的数量是为多个,则执行步骤s303;否则执行步骤s302;

步骤s302,检测是否有新的osd加入到osd序列中,其中,在检测到新的osd加入到所述osd序列中之后,则执行步骤s303;

步骤s303,判断所述osd序列中是否存在所述目标osd;如果存在,则执行步骤s104和步骤s106,否则执行上述实施例中的步骤s201和步骤s202。

针对单节点完全脱离ceph集群,且monitor通信也是异常的情况下,monitor中的osdmap版本值可能与节点本地的osdmap版本值相同,即此时不太好判断出非健康osd的身份。因此,要求在构成priorosd的集合中不能只有一个节点的osd,若是只有一个节点的osd则要求停止探测该pg在各个历史阶段时期内所对应的osd,直至有新的节点osd加入该priorosd为止,然后才会向下进行。

由此,本实施例中通过步骤s303判断osd序列中osd的数量是否为多个;如果判断出osd序列中osd的数量是多个,则判断osd序列中是否包括健康osd;如果判断出osd序列中osd的数量是一个,则在检测到新的osd加入到osd序列中之后,执行判断osd序列中是否包括健康osd的步骤。

如果判断出包括健康osd,则在osd序列中选择权威osd,并基于权威osd对待恢复osd进行数据恢复操作。如果判断出不包括健康osd,则执行上述实施例中步骤s201和步骤s202所示的方法,此处不再赘述。

在一个可选的实施方式中,如图4所示,步骤s106,在所述osd序列中选择权威osd,并基于所述权威osd对待恢复osd进行数据恢复操作包括如下步骤:

步骤s401,确定所述权威osd的日志信息,其中,所述日志信息中包括所述目标pg的全部操作信息;

步骤s402,基于所述权威osd的日志信息确定所述待恢复数据,并在所述待恢复osd中执行待恢复数据的恢复操作。

在本实施例中,在确定出权威osd之后,就可以确定权威osd的日志信息,即权威log。在确定出权威osd的日志信息之后,就可以基于权威osd的日志信息确定待恢复数据,并在待恢复osd中执行待恢复数据的恢复操作。

具体地,在确定出权威osd的日志信息之后,可以基于权威osd的日志信息生成missing结构,missing结构为非权威osd从权威osd中获取权威osd的日志信息和missing信息,并合成待恢复的对象object(也即,待恢复数据)。

需要说明的是,在本实施例中,非权威osd和权威osd是相对于目标pg而言的。由于一个osd会承载很多pg。因此,相对于目标pg而言的非权威osd,对于其他pg而言,还可能是权威osd;以及相对于目标pg而言的权威osd,对于其他pg而言,还可能是非权威osd。

在生成missing结构之后,就可以确定待恢复osd所缺失的且需要恢复的待恢复数据(也即,待恢复对象object)。在确定出待恢复osd的待恢复对象object之后,就可以确定待恢复对象object可以从哪些osd上进行拷贝。之后,就可以切换目标pg的peering(等待互联)状态为active状态,并触发数据的恢复操作。当ceph完成peering过程,pg将会变active状态,其中,active状态意味着pg中的数据变的可用,primarypg将可以执行读写操作。peering过程是指ceph集群中pg出现各副本间数据不一致的现象,在数据恢复前确定权威osd和权威日志信息,以及形成本地missing结构的阶段就是peering过程。

如图5所示的另一种可选的数据恢复方法的流程图,如图5所示,该方法包括如下步骤:

步骤s501,确定目标pg所对应的osd发生变化的各个历史阶段时期;

步骤s502,基于各个历史阶段时期pastinterval确定用于执行数据恢复的osd序列priorosd;

在本实施例中,osd序列又可以称为priorosd。osd序列中的osd为用于存储目标pg的副本的osd,且在ceph集群中处于标准工作状态,其中,标准工作状态是指osd处于up且in的状态。up且in状态为osd的一种标准工作状态,表示osd正常运行,且承载至少一个pg的数据。

如果pg为pg1.0,那么osd序列中包括的osd满足以下条件:用于存储pg1.0的主从副本,且该osd处于标准工作状态。其中,用于存储pg1.0的主从副本可以理解为该osd为该pg1.0所对应的actingset集合中的osd。

步骤s503,判断osd序列priorosd中osd的数量是否为多个;如果判断出是,则执行步骤s505,否则,否则执行步骤s504;

步骤s504,检测是否有新的osd加入到osd序列priorosd中,其中,在检测到新的osd加入到osd序列priorosd中之后,则执行步骤s505;

步骤s505,判断osd序列priorosd中是否包括目标osd;如果包括,则执行步骤s508,否则执行上述实施例中的步骤s506和步骤s507;

步骤s506,周期性的获取所述目标pg在各个历史阶段时期内所对应的osd;直至检测到存在目标osd时,执行步骤s507;

步骤s507,将目标osd的标识信息添加至osd序列中,并返回执行步骤s503;

通过上述步骤s503至步骤s507的描述可知,通过上述描述可知,在本实施例中,要求在osd序列priorosd中包含不止一个osd,且osd序列priorosd中包含健康osd。这是因为对于单节点完全脱离ceph集群,且monitor通信也是异常的情况下,monitor中的osdmap可能与本地osdmap版本吻合,即此时不太好判断出非健康节点的身份。因此,要求在构成priorosd的集合中不能只有一个节点的osd,若是只有一个节点的osd则要求停止在该阶段反复探测该pg对应的其他节点osd的情况,直至有新的节点osd加入该priorosd为止,然后才会向下进行。

步骤s508,在osd序列选择权威osd;

步骤s509,确定权威osd的日志信息,其中,日志信息中包括目标pg的全部操作信息;

步骤s510,基于权威osd的日志信息生成missing结构,missing结构为非权威osd从权威osd中获取权威osd的日志信息和missing信息,并合成待恢复的对象object(也即,待恢复数据);

步骤s511,确定待恢复osd所缺失的且需要恢复待恢复数据;

步骤s512,确定待恢复对象object可以从哪些osd上进行待恢复数据的获取;

步骤s513,切换目标pg的状态由peering状态为active状态,并触发数据的恢复操作。

具体地,通过步骤s508至步骤s513可知,在确定出权威osd的日志信息之后,可以基于权威osd的日志信息生成missing结构,missing结构为非权威osd从权威osd中获取权威osd的日志信息和missing信息,并合成待恢复的对象object(也即,待恢复数据)。在生成missing结构之后,就可以确定待恢复osd所缺失的且需要恢复待恢复数据(也即,待恢复对象object)。在确定出待恢复osd的待恢复对象object之后,就可以确定待恢复对象object可以从权威哪些osd上进行拷贝。之后,就可以切换目标pg的状态为active状态,并触发数据的恢复操作。其中,active状态意味着pg中的数据变得可用,primarypg将可以执行读写操作。peering过程是指ceph集群中pg出现各副本间数据不一致的现象,在数据恢复前确定权威osd和权威日志信息,以及形成本地missing结构的阶段就是peering过程。

为了保证数据恢复的正常进行,就一定要保证在数据恢复前得到的权威osd和权威log是完整且正确的。在ceph集群节点都正常的情况下,正确地进行权威osd的选举是没有问题的,但恰恰就在一些情况下,却错误的选举出权威osd和权威log,最终导致ceph集群存储数据异常和功能异常。基于此,本实施例中,对osd赋予了新的角色状态判断,利用osdmap信息比较确认出健康osd与非健康osd。在数据恢复时候,对于peering的osd集合进行合理限制,防止错误权威osd以及错误权威pglog的选出而导致集群数据异常。

图6是根据本发明实施例的一种数据恢复方法的流程图。如图6所示,该方法包括如下步骤:

步骤s602,在检测到故障osd恢复到正常运行之后,对所述故障osd进行预隔离处理,以使预隔离处理之后的所述故障osd处于停止工作模式;

其中,步骤s602所指的正常运行指的是上面的实施例中所述的up且out状态。

步骤s604,在检测到激活指令之后,可以按照上述图1至图5中任一所述的数据恢复方法对故障osd进行数据恢复,其中,所述激活指令为激活处于停止工作模式的故障osd。

具体地,当ceph集群中的一个节点因为故障离开ceph集群之后,该节点中的osd会因为没有和其他节点的osd交互心跳报文而处于down状态,其中,down状态表示osd处于非正常运行状态。当该节点再加入ceph集群时,为了避免该落后节点可能导致的数据恢复错误。在本实施例中,也可以对这样的节点设置预隔离处理,以使预隔离处理之后的节点处于osddown状态或者进入“维护模式”。这样就不会出现落后的osd被选举到priorosd的集合中去了。系统管理员可以根据ceph集群状态来选择是否激活该osd或者解除该osd的预隔离处理,让其能正常参与到集群的数据恢复活动中去。优选地,ceph集群可以根据判断自身状态是否满足恢复条件来决定是否重新接受该节点的加入和恢复。当判断出满足恢复条件时,则向该节点发送激活指令。

在本实施例中,步骤s602和步骤s604所描述的方法可以应用在该故障osd所在的节点中。具体地,故障osd启动恢复是指故障osd在离开ceph集群之后,又准备要重新加入到该ceph集群中。

在一个可选的实施方式中,可以在故障osd的启动恢复的程序中添加限制条件,以控制该故障osd处于停止工作模式,也即,一直处于osddown状态。

此时,如果管理员通过对ceph集群状态的判断,确定出可以允许故障osd重新加入到ceph集群中时,通过集群监控器monitor向故障osd发送激活指令。故障osd在获取到激活指令之后,就可以按照上述图1至图5中任一所述的数据恢复方法对故障osd进行数据恢复。

在另一个可选的实施方式中,集群监控器monitor可以对重新加入到ceph集群中的故障osd进行标记,比如,标记该故障osd为down状态,以控制该故障osd处于停止工作模式。

集群监控器monitor还可以根据ceph集群的状态是否发生激活指令,如果集群监控器monitor根据ceph集群的状态确定出可以允许故障osd重新加入到ceph集群中时,则向故障osd发送激活指令。故障osd在获取到激活指令之后,就可以按照上述图1至图5中任一所述的数据恢复方法对故障osd进行数据恢复。

综上所述,激活指令为ceph集群中的监控器在检测到ceph集群满足数据恢复条件的情况下,向故障osd发送的所述激活指令。

通过上述描述可知,在本实施例中,当因为故障离开ceph集群的节点又重新请求加入该ceph集群时,对该故障osd进行预隔离处理,以防止落后节点影响ceph集群数据。在本实施例中,还可以根据ceph集群状态来自动激活和恢复落后节点(即,上述故障osd所在节点),这样有效避免了落后节点加入后数据恢复异常的状况。

如图7所示的另一种可选的数据恢复方法的流程图,如图7所示,该方法包括如下步骤:

步骤s701,在检测到故障osd恢复到正常运行之后,对所述故障osd进行预隔离处理,以使预隔离处理之后的所述故障osd处于停止工作模式;

其中,可以通过在故障osd的启动恢复程序中添加限制条件,来控制该故障osd处于osddown状态或者控制该故障osd进入维护模式。还可以根据集群监控器monitor来对该故障osd进行标记,来控制该故障osd处于osddown状态或者控制该故障osd进入维护模式。

步骤s702,判断故障osd所在节点是否向ceph集群中的其他节点发送连接请求;如果判断出是,则执行步骤s703,否则继续执行步骤s702;

步骤s703,建立故障osd所在节点与其他节点之间的通信连接,该其他节点为故障osd所在节点在ceph集群中搜索的节点;

步骤s704,判断通信连接是否成功;如果成功,则执行步骤s705;否则继续执行步骤s703;

步骤s705,判断ceph集群的状态是否满足恢复条件;如果判断出是,则执行步骤s706,否则执行步骤s705;

步骤s706,激活故障osd,以使该故障osd参与到数据恢复的过程中。

通过上述描述可知,在本实施例中,当因为故障离开ceph集群的节点又重新请求加入该ceph集群时,对该故障osd进行预隔离处理,以防止落后节点影响ceph集群数据。在本实施例中,还可以根据ceph集群状态来自动激活和恢复落后节点(即,上述故障osd所在节点),这样有效避免了落后节点加入后数据恢复异常的状况。

本发明实施例还提供了一种数据恢复装置,该数据恢复装置主要用于执行本发明实施例上述图1至图5中所提供的数据恢复方法,以下对本发明实施例提供的数据恢复装置做具体介绍。

图8是根据本发明实施例的一种数据恢复装置的示意图,如图8所示,该数据恢复装置主要包括确定单元10,查找单元20和数据恢复单元30,其中:

确定单元10,用于在第一osd确定出自身处于数据落后状态之后,基于ceph集群中的目标pg所对应的osd发生变化的各个历史阶段时期确定osd序列;所述数据落后状态表示与第二osd相比,第一osd中存储的目标pg的副本落后于第二osd中存储的目标pg的副本,第一osd和第二osd均为目标pg所对应的osd,所述osd序列中的osd用于存储所述目标pg的副本,且在ceph集群中处于标准工作状态;

查找单元20,用于在所述osd序列中查找目标osd,其中,所述目标osd中关系图osdmap的版本值与所述ceph集群监控器中关系图osdmap的版本值相同;

数据恢复单元30,用于如果查找到所述目标osd,则在所述osd序列中选择权威osd,并基于所述权威osd对待恢复osd进行数据恢复操作。

在本实施例中,通过osdmap定义了健康osd和非健康osd,如果某个osd被确定为非健康osd,那么该osd有很大可能处于数据落后的状态,而健康osd未处于数据落后状态。因此,在本实施例中,通过在osd序列中包括健康osd(即,目标osd)的情况下,在osd序列中选择权威osd的方式,能够避免出现处于数据落后状态的osd被选择为权威osd的情况,从而有效防止由于错误权威osd以及错误权威日志信息的选取而导致的数据恢复错误的情况,以缓解通过现有的数据恢复方法对ceph集群进行数据恢复时由于错误的选择权威osd导致的数据恢复异常的技术问题,从而实现了防止ceph集群中节点异常的情况下对权威osd以及权威日志的错误选举的发生。

可选地,该装置还用于:在所述osd序列中查找目标osd之前,判断所述osd序列中osd的数量是否为多个;如果判断出所述osd序列中osd的数量是为多个,则判断所述osd序列中是否存在所述目标osd;其中,如果判断出osd序列中存在所述目标osd,则在所述osd序列中选择权威osd,并基于所述权威osd对待恢复osd进行数据恢复操作。

可选地,该装置还用于:在判断出所述osd序列中的osd的数量为一个的情况下,且在检测到新的osd加入到所述osd序列中之后,则执行判断所述osd序列中是否存在所述目标osd的步骤;其中,如果判断出osd序列中包括所述目标osd,则在所述osd序列中选择权威osd,并基于所述权威osd对待恢复osd进行数据恢复操作。

可选地,该装置还用于:如果在所述osd序列中未查找到所述目标osd,则周期性获取所述目标pg在各个历史阶段时期内所对应的osd,直至检测到存在目标osd时,将检测到的所述目标osd的标识信息添加至所述osd序列中,并执行在所述osd序列中选择权威osd的步骤。

可选地,数据恢复单元用于:确定所述权威osd的日志信息,其中,所述日志信息中包括所述目标pg的全部操作信息;基于所述权威osd的日志信息确定所述待恢复数据,并在所述待恢复osd中执行待恢复数据的恢复操作。

本发明实施例还提供了另一种数据恢复装置,该数据恢复装置主要用于执行本发明实施例上述图6和图7所提供的数据恢复方法,以下对本发明实施例提供的数据恢复装置做具体介绍。

图9是根据本发明实施例的一种数据恢复装置的示意图,如图9所示,该数据恢复装置主要包括预隔离单元40和数据恢复单元50,其中:

预隔离单元40,用于在检测到故障osd恢复到正常运行之后,对所述故障osd进行预隔离处理,以使预隔离处理之后的所述故障osd处于停止工作模式;

数据恢复单元50,用于在检测到激活指令之后,按照上述图1至图5中所提供的数据恢复方法对所述故障osd进行数据恢复,其中,所述激活指令为激活处于停止工作模式的故障osd。

在本实施例中,当因为故障离开ceph集群的节点又重新请求加入该ceph集群时,对该故障osd进行预隔离处理,以防止落后节点影响ceph集群数据。在本实施例中,还可以根据ceph集群状态来自动激活和恢复落后节点(即,上述故障osd所在节点),这样有效避免了落后节点加入后数据恢复异常的状况。

可选地,所述激活指令为所述ceph集群中的监控器在检测到所述ceph集群满足数据恢复条件的情况下,向所述故障osd发送的所述激活指令。

本发明实施例所提供的装置,其实现原理及产生的技术效果和前述方法实施例相同,为简要描述,装置实施例部分未提及之处,可参考前述方法实施例中相应内容。

在另一个实施例中,还提供了一种服务器,所述服务器为设置有ceph集群中对象存储设备osd的服务器,所述服务器包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述方法实施例中所描述的方法。

在另一个实施例中,还提供了具有处理器可执行的非易失的程序代码的计算机可读介质,所述程序代码使所述处理器执行上述方法实施例中所述的方法。

另外,在本发明实施例的描述中,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。

在本发明的描述中,需要说明的是,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

最后应说明的是:以上所述实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。

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