分布式存储系统的数据同步修复方法及存储介质与流程

文档序号:18547607发布日期:2019-08-27 21:49阅读:277来源:国知局
分布式存储系统的数据同步修复方法及存储介质与流程

本发明涉及分布式存储领域,具体涉及一种对一个或多个失效节点进行同步修复的方法。



背景技术:

分布式存储系统因其高可用性、高可扩展性以及对海量数据的高效存储能力使其在存储技术领域得到了广泛应用。但是,不可避免的在分布式存储系统中的存储节点,会由于多种原因出现故障,失去对外提供数据服务的能力,从而成为失效节点。为了保证数据的安全,以及不间断地对外提供服务,传统解决方法是采用副本或纠删码等冗余技术。相对而言,副本方式比较浪费存储空间,纠删码的空间利用率相对较高,但采用纠删码技术修复失效节点需要的网络带宽较大。具体体现在,使用纠删码技术的分布式存储系统,即使只有一个节点失效,也必须要通过网络收集到完整的数据段才能恢复出失效节点上存储的那一小部分数据块。为了解决这个问题,一种名为“再生码”(regeneratingcode)的新型编码技术应运而生。通常的再生码和纠删码一样,也具有最大距离可分(maximumdistanceseparable,mds)的性质,不同的是,当修复失效节点时,再生码在特定的情况下只需要收集整个数据段的一小部分,因此可以大大节省网络带宽,继而显著地提高整个系统的性能。

再生码的理论框架中,关于修复所需带宽和存储空间效率之间的折中,有两个边界极值点,分别叫做“最小带宽再生”(minimumbandwidthregenerating,mbr)和“最小存储再生”(minimumstorageregenerating,msr),二者也分别代表了两种主要的再生码类别。在修复所需带宽和存储空间效率的折中曲线上,mbr码能达到理论上最小修复带宽的极值点,但存储效率并非最高。而msr则能达到曲线的另一端,即在最大化存储效率的前提下最小化修复带宽。再生码还可分为精确再生码和功能再生码。当有节点失效时,前者修复出的数据块与失效节点上丢失的数据块完全相同,而后者则可能不同,仅能保持mds和mbr/msr的特性。

目前已有的典型的精确修复msr码包括乘积矩阵(productmatrix,pm)码和干扰消除(interferencealignment,ia)码。遗憾的是,原始版本的这两种编码只解决了对单个失效节点的修复问题。在实际的分布式存储系统中,多个节点同时出现故障是很常见的现象,因此有必要给出多节点同步修复的解决方案。在这方面已有的研究成果包括协作式同时修复策略。这种策略的特点是替换失效节点的多个新节点在恢复数据时不仅从未失效的节点上下载数据,还在彼此之间交换数据,以此来达到同时重建多个数据块的目的。采用这种方式能够降低总体的修复带宽,甚至能达到理论的下限。然而节点间的协同实现复杂度较高,而且还会增加修复所需的时间和开销。

还有的研究者提出了一种能够用于pm码和ia码的多数据块联合修复方法,该方法不需要新节点间的协作,但是需要求解很大的方程,因此实用复杂度也比较高。



技术实现要素:

本申请提供一种使用基于干扰消除的最小存储再生码的分布式存储系统的数据同步修复方法,主要解决的技术问题是,提供一种分布式存储系统的数据修复方法,能够对分布式存储系统中的多个失效节点进行同步修复。在该修复方法中,将存储节点分为系统节点和校验节点,则实际修复的节点即待修复节点包括全部失效的系统节点和全部或部分失效的校验节点。

数据修复的过程包括如下步骤:

步骤1:从正常节点中选择辅助节点,基于待修复节点列表中失效节点的分布情况,辅助节点将编码得到的辅助数据子块和/或自己存储的数据子块发送给再生节点;

步骤2:分别构造与丢失的系统块和校验块相关的子修复矩阵;

步骤3:构造修复矩阵并对丢失的数据块进行重建。

实际修复过程中,待修复节点列表的选择应根据实际需求选择,即,当正常的校验节点较多时,则可以不修复全部丢失的数据块,而根据需要选择失效节点中的一部分节点进行修复。同时,当失效节点过多达到一定数量,应选用解码的方式重建丢失的数据块。

本发明的有益效果是:使用基于干扰消除的最小存储再生码的分布式存储系统的数据同步修复方法,能够在保证最小修复带宽下对一个或多个失效节点进行同步修复,并且能够根据需求选择待修复节点,以尽可能的减小修复带宽以及修复所需的时间和开销。

附图说明

图1为数据同步修复的系统模型;

图2为校验码的子修复矩阵计算过程示意图;

图3为修复矩阵计算过程示意图;

图4为多数据同步修复算法流程图。

具体实施方式

下面通过具体实施方式结合附图对本发明作进一步详细说明。在以下的实施方式中,很多细节描述是为了使得本申请能被更好的理解。然而,本领域技术人员可以毫不费力的认识到,其中部分特征在不同情况下是可以省略的,或者可以由其他方法所替代。在某些情况下,本申请相关的一些操作并没有在说明书中显示或者描述,这是为了避免本申请的核心部分被过多的描述所淹没,而对于本领域技术人员而言,详细描述这些相关操作并不是必要的,他们根据说明书中的描述以及本领域的一般技术知识即可完整了解相关操作。

另外,说明书中所描述的特点、操作或者特征可以以任意适当的方式结合形成各种实施方式。同时,方法描述中的各步骤或者动作也可以按照本领域技术人员所能显而易见的方式进行顺序调换或调整。因此,说明书和附图中的各种顺序只是为了清楚描述某一个实施例,并不意味着是必须的顺序,除非另有说明其中某个顺序是必须遵循的。

本发明提供了一种分布式存储系统的数据同步修复方法,将存储节点分为系统节点和校验节点,并分别构造与丢失的数据块相关的子修复矩阵,继而确定修复矩阵并通过将辅助数据子块与修复矩阵相乘最终得到丢失的数据块,完成数据修复,该方法能够对分布式存储系统中一个或多个失效节点进行同步修复。

本发明中提供了两种数据修复模式。一种是中心模式,即存在一个“代理”节点,负责收集通过辅助节点编码得到的辅助数据或辅助节点自己存储的数据,然后构造修复矩阵并重建丢失的数据块,最后将修复好的数据传送到对应的新节点上。另一种是分布式模式,即新节点自己对辅助节点编码得到的辅助数据或辅助节点自己存储的数据进行收集,然后构造修复矩阵并重建丢失的数据块,需要指出的是,新节点只负责对自己所替代的失效节点上丢失的数据进行重建。这两种修复模式各有优缺点和适用场合,使用基于干扰消除的最小存储再生码的分布式存储系统的数据修复方法适用于这两种修复模式。在任何一种模式下,特别是在分布模式下,再生节点可能不需要恢复出所有丢失的数据块。再生节点指的是中心模式下的代理节点或分布模式下的新节点。理论上已经证明,在有足够多的幸存节点的前提下,需要恢复的数据块的数量越少,所需的修复带宽越小。但我们的研究发现,对于ia码来说,所有的丢失的系统块都必须被同步修复,否则无法生成修复矩阵,进而导致修复失败。为此,本发明还提供一种辅助节点的选择方法,以在保证数据被成功重建的前提下,尽可能的降低修复带宽。

为了让论述清晰和简洁,这里首先给出本发明中要用到的系统模型和符号。一个ia码用c(n,k,d)表示,其中n是存储节点的总数,k是存放原始数据块的“系统节点”的数量,剩余的m=n-k个节点是存放编码数据块的“校验节点”的数量。d为“修复度”,指的是当全部n个节点中只有一个失效时,修复所需要的辅助节点的数目。并且,ia码要求n≥2k以及d≥2k-1。

根据ia码的构造方式,编码时首先将长度为b的数据被等分成k块,然后编码成n个数据块,分别用b1,b2,...,bn表示,其数据块编号分别为1,2,...,n。每个数据块bi包含α个数据子块bi=[bi1,bi2,...,biα]。根据msr码的相关理论,ia码满足下面的关系式:

α=d-k+1(1)

由于ia码是一种系统码其前k个数据块b=[b1,b2,...,bk]t是原始的未编码数据,也称为系统块,后m=n-k个数据块为校验块,用c=[c1,c2,...,cm]t=[bk+1,bk+2,...,bn]t表示。因此整段数据事实上被分成kα个系统子块,然后再编成mα个校验子块,最后总共得到nα个子块。ia码的构造公式和相应的符号如下式:

c=gb(2)

其中,编码矩阵为:

需要注意的是这里所有的计算都是在有限域gf(q)上进行的。其中,编码子阵表示为:

pji是m×m矩阵p的第j行第i列位置上的元素,p为满足所有编码子阵均可逆的矩阵,例如cauchy矩阵或者vardermonde矩阵。令u=[u1,u2,...,um]和v=[v1,v2,...,vm]两者皆为m×m可逆矩阵,并使得:

u=κ-1v'p(5)

其中,v'=(v-1)t是v的对偶基,κ∈gf(q)且满足1-κ2≠0。(4)式中的ui和vj分别是截取ui和vj的前α个元素组成的子向量。i是α×α维单位向量,因此(4)中的gij也是α×α矩阵。

图1给出了基于ia码对失效节点存储数据块进行同步修复的系统模型。在图示的分布式存储系统中,共有n个节点,分别用n={ni|i=1,...,n}表示。注意这里的节点可以是物理上,也可以是逻辑上的,也就是说,多个节点可以位于一个或多个物理机器上,并且不影响本发明的有效性。每个节点ni上存储一个数据块bi,那么n1,n2,.....,nk是存放系统块的系统节点,而nk+1,.....,nn则是存放校验块的校验节点。假设有t1个系统节点和t2个校验节点失效,其中t1,t2≥0,并且失效节点的总数t=t1+t2≥1。基于系统节点之间和校验节点之间都是对等的,可以不失一般性地假定失效节点是如图1所示。再生节点从k-t1个正常的系统节点和m-k2个正常的校验节点处获得辅助数据,然后将失效节点上丢失的数据块重建出来。这些提供辅助数据子块的正常节点统称为“辅助节点”。

在将辅助数据子块传输给再生节点之前,辅助节点需要先对自己拥有的数据块进行编码,编码的方式是计算α个数据子块与编码向量在gf(q)上的内积。如果系统块bi丢失,则编码向量为即v'的第i列的前α个元素组成的向量。反之如果校验块ci丢失,对应的编码向量则为ui。如果v为正交矩阵,则有v'=v以及进一步地,如果v是单位矩阵,则有:

其中,ei是一个单位向量,其第i个元素是1,其余的元素皆为0。在这种情况下,如果丢失的是系统块,辅助节点无需编码,只需将第i个数据子块传送给再生节点即可,因此可以省去计算的开销并降低实现的复杂度。由于在实际的存储系统中,系统块在读写操作中用到的比较多,在修复中具有较高的优先级,因此这种v=i的编码具有很大的实用价值。所以在本发明中,我们主要考虑此类ia码。在下面叙述的实施例中如果没有特别说明,均假定v=i。

在本实施例中,再生节点通过修复矩阵来恢复丢失的数据块。修复矩阵的构造过程如下:

不失一般性,我们假定系统块和校验块丢失,对应的失效节点的编号为如果实际上丢失的数据块并不是前t1个系统块和前t2个校验块,只需将数据块的编号和编码矩阵的行和列重新排列,将丢失的系统块和校验块映射到最前面的位置即可。定义实际修复的节点组成待修复节点列表,令r表示待修复节点列表中节点的数量,假设需要修复全部t个失效节点,则r=t,且待修复节点列表包括失效的t1个系统节点,以及失效的t2个校验节点,从剩余k-t1个系统节点和另外α-t2个正常的校验节点选取辅助节点,其中辅助节点的总数为d-t+1。由于系统节点之间和校验节点之间都是对等的,选择哪些系统节点和校验节点都是可以的。为了叙述简单,这里不失一般性地选择系统节点和校验节点作为辅助节点。所有正常的系统节点都必须被选作辅助节点,当打算修复的节点数量小于t时,如何选取辅助节点等辅助节点的选择方法会在后面做进一步的介绍。

首先考虑构造与丢失的系统块相关的子修复矩阵。对于一个丢失的系统块bi,每个辅助节点nj对自己的数据块进行编码得到由此可以得到辅助数据组成的向量

然后构造如下α×(tα)矩阵:

式(7)中最后的t2α列包含t2个成上三角排列的

然后构造如下的α×(d-t+1)矩阵:

矩阵γi的右下角处是一个(α-t2)×(α-t2)的单位阵。

以上为所有与丢失系统块相关的子修复矩阵的构造情况,下面考虑构造与丢失的校验块相关的子修复矩阵。

对于一个丢失的校验块ci,每个辅助节点nj对自己的数据块进行编码得到由此可以得到辅助数据组成的向量

然后按照下式计算α×d矩阵ψi:

式(9)等号右侧由两部分组成,左边中括号中矩阵的最后α-1列由两个单位矩阵组成:一个是位于左上角的i-1维单位矩阵,另一个是位于右下角的α-i维单位矩阵;右边中括号中的矩阵左上角是一个k×k单位矩阵,其余的元素全部为0。

下面利用ψi计算ci对应的子修复矩阵,如图2所示。用ψij表示ψi的第j列,令ji={j|j=1,...,t1,k+1,...,k+t2-1}表示ψi中与除了ci以外的丢失块对应的列的编号,并将ψi去掉编号为ji的那些列后剩余的部分用ψij表示。对每一个j∈ji,计算下式:

然后令:

以上为所有与丢失的校验块相关的子修复矩阵。

现在将前面得到的所有子修复矩阵合在一起,组成如下的等式:

则如果ξ可逆,则可得到修复矩阵如下所示:

r=ξ-1θ(13)

然后将修复矩阵r和辅助数据子块相乘,即可以重建出丢失的数据块。

如果实际上丢失的数据块并不是前t1个系统块和前t2个校验块,修复矩阵仍然可以通过上述方式来计算,只需将数据块的编号和编码矩阵的行和列重新排列,将丢失的系统块和校验块映射到最前面的位置即可。

从上面的叙述可以看出,使用本发明提出的数据同步修复方法,重建t个丢失的数据块共需要辅助数据子块数量为:

w=t(d-t+1)(14)

因此本发明提出的方法达到了多数据同时修复所需带宽的理论下限。此外,使用本发明的方法只在t<min{k,α}的情况下能节省带宽。当t≥min{k,α}时,可以采用解码的方式,即先从辅助节点下载整段数据,再解码出原始数据,然后再用编码的方式来重建丢失的数据块。根据ia码要求d>2k-1和α≥k,可以得到min{k,α}=k。因此如果是出于节省带宽的目的,本发明所述方法只适用于t<k的情形。

对于某些失效节点的组合,ξ可能不可逆,所以无法按照(13)式计算修复矩阵。遇到这种情况,可以向待修复节点列表中增加一个或若干个节点,增加的节点可以是失效节点也可以是正常节点,或者将某些待修复节点换成其他节点,用于替换之前确定的待修复节点的替换节点同样可以是失效节点也可以是正常节点,以使ξ变为可逆矩阵,或者使用解码的方式来重建丢失数据。

修复矩阵的计算过程如图3所示,具体总结如下:

第1步,对每一个1≤i≤t1:

按照式(7)计算φi;

按照式(8)计算γi。

第2步,对每一个1≤i≤t2:

按照(9)计算ψi;

对每一个j∈ji:

按照(10)计算ωi,j;

按照(11)构造矩阵δi和ψij

第3步,将上面得到的所有φi,γi,δi和ψij按照(12)式的方式组合,并构造出ξ和θ。

第4步,判断ξ是否可逆。如果可逆,按照(13)式计算修复矩阵r。

根据上面的叙述,如果要修复全部t个失效节点,仅需要s=d-t+1个辅助节点,其中k-t1个是系统节点,其余d-t+1-(k-t1)=α-t2个是校验节点。根据ia码的性质,满足n≥2k以及d≥2k-1,因此在一个系统中可能有多于α-t2个正常的校验节点。根据ia码编码矩阵的构成方式,所有的校验节点都是对等的。所以可以从全部n-k-t2个正常的校验节点中选择任意α-t2个作为辅助节点,只要ξ可逆。

进一步地,在另一个实施例中,如果有足够多的正常校验节点,可以不必修复全部丢失的校验块,而是根据需要选择t2'<t2个失效的校验节点进行修复。在一些情形中,比如在分布式的修复模式下,这样做可以减少修复带宽。但是当将同样的做法用于系统节点时,无法生成修复矩阵,也就是说在使用基于ia码的最小存储再生码通过修复矩阵对失效数据进行重建时,所有的失效系统节点必须被同时修复。因此,如果一个再生节点仅打算重建t1'≤t1个系统块和t2'≤t2个校验块,实际操作时则至少要同时修复r=t1+t2'个数据块,其中包含t1个系统块和t2'个校验块。当前系统中一共有k-t1个正常的系统节点和m-t2个正常的校验节点。考虑到式(14),此时需要从正常校验节点中选择d-(t1+t2')+1-(k-t1)=α-t2'个节点作为辅助节点。如果没有这么多正常的校验节点,即m-t2<α-t2',那么还需要将另外

α-t2'-(m-t2)个失效的校验节点加入到待修复数据块列表中,因此总共需要同步修复r=t1+t2'+α-t2'-(m-t2)=t1+t2+d+1-n个节点。在上述两种情况下,均需要d-r+1个辅助节点,而且每个辅助节点应提供r个针对丢失的系统块的未编码和/或针对丢失的校验块的编码的辅助数据子块。根据上面的描述,需要的辅助数据子块的总数如下式(15)所示:

如果满足式(15)中描述的前两种情况,则可以使用上面提出的数据同步修复方法以节省修复带宽,使用的时候应首先选择所有的正常系统节点作为辅助节点,然后再根据(15)式和上面的分析选择合适数量的正常校验节点作为辅助节点。如果失效节点比较少,那么在v=i的情况下,辅助节点可以全部选为系统节点,继而可以不用对数据进行编码而将自己存储的数据直接发送给再生节点,此种情况会大大降低计算的复杂度。当前两种情况都不满足的情况下,需要用解码的方式来恢复数据。需要指出的是应用本发明给出的使用ia码的多数据块同步修复方法,实际重建出的数据块的数量可能与再生节点打算重建的数量不同。

基于前面的叙述,在本申请的另一个实施例中给出完整的使用ia码的多数据块同步修复方法,如图4所示,具体过程如下。需要说明的是式(15)中的第4种情形是丢失数据无法恢复的情况,为了简洁起见,下面的叙述中对这种情况将不再予以阐述。

步骤001:检测各个参数的大小,对照式(15)判断数据修复适用情况,

如果符合第1种情形:

步骤110:设r=t1+t2',选择全部k-t1个正常的系统节点和任意α-t2'个正常的校验节点作为辅助节点;

步骤120:根据图3所示步骤计算ξ;

步骤130:判断ξ是否可逆。

如果ξ可逆,则:

步骤131:通知每个辅助节点向再生节点提供r个针对丢失的系统块的未编码和/或针对丢失的校验块的编码辅助数据子块;

步骤132:再生节点等待,直到收到全部的辅助数据子块;

步骤133:按照图3所示步骤计算修复矩阵;

步骤134:将修复矩阵与辅助数据子块相乘,重建丢失的数据块。

如果ξ不可逆,则执行步骤310,或者执行步骤135或步骤136:

步骤135:向待修复节点列表中增加一个节点,令r=r+1,重新计算ξ,如果ξ可逆,执行步骤131,否则执行步骤310,或步骤135,或步骤136。

步骤136:更换待修复节点列表中的一个节点,重新计算ξ,如果ξ可逆,执行步骤131,否则执行步骤310,或步骤135,或步骤136。

如果在执行步骤135和步骤136过程中,已经穷尽r<k的所有可能性,则执行步骤310。

如果符合第2种情形:

步骤210:除了t1个丢失的系统块和t2'个丢失的校验块,再另选α-t2'-m+t2个丢失的校验块放入待修复节点列表中,令r=t1+t2+d+1-n;

步骤220:将所有的正常节点选为辅助节点;

然后执行步骤120和步骤130,重建丢失的数据块。

如果符合第3种情形:

步骤310:从正常节点中选择k个节点作为辅助节点,再生节点向辅助节点发送请求,要求所有辅助节点都提供1个未编码的数据块;

步骤320:再生节点等待,直到收到全部的辅助数据块;

步骤330:对收到的辅助数据块进行解码得到原始数据段;

步骤340:对原始数据段进行编码,重建丢失的数据块。

本领域技术人员可以理解,上述实施方式中各种方法的全部或部分步骤可以通过程序来指令相关硬件完成。当上述实施方式中全部或部分功能通过计算机程序的方式实现时,该程序可以存储于一计算机可读存储介质中,其包括能够被处理器执行的程序。存储介质可以包括:只读存储器、随机存储器、磁盘、光盘、硬盘等,通过计算机执行该程序以实现上述功能。例如,将程序存储在计算机的存储器中,通过处理器执行存储器中程序,即可实现上述全部或部分功能。另外,当上述实施方式中全部或部分功能通过计算机程序的方式实现时,该程序也可以存储在服务器、另一计算机、磁盘、光盘、闪存盘或移动硬盘等存储介质中,通过下载或复制保存到本地设备的存储器中,或对本地设备的系统进行版本更新,当通过处理器执行存储器中的程序时,即可实现上述实施方式中全部或部分功能。

以上应用了具体实施例对本发明进行阐述,只是用于帮助理解本发明,并不用以限制本发明。对于本发明所属技术领域的技术人员,依据本发明的思想,还可以做出若干简单推演、变形或替换。

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