一种纠删码集群中失效节点的重构方法

文档序号:6522395阅读:206来源:国知局
一种纠删码集群中失效节点的重构方法
【专利摘要】本发明公开了一种纠删码存储集群中失效节点的重构方法,包括:1)有节点失效时,根据节点的负载和网络带宽,初始化所有存活节点的权重值;2)选取权重值最大的K个存活节点,作为恢复该失效节点中的数据块读取分布,其中K为存储集群中数据节点的数目;3)将上述K个存活节点的权重值分别减1;4)判断权值大于0的节点数量是否小于K,若是则转到步骤5),若否则转到步骤2);5)根据所有数据块读取分布,解码出失效节点上对应偏移地址的数据块中的数据。本发明根据权重值选择重构失效节点的数据节点,减少了负载不均衡时的响应时间;同时降低了纠删码存储集群中各个节点因频繁的超负载而崩溃的概率,提高整个纠删码存储集群的可靠性。
【专利说明】一种纠删码集群中失效节点的重构方法
【技术领域】
[0001]本发明属于计算机存储【技术领域】,更具体地,涉及一种纠删码集群中失效节点的重构方法。
【背景技术】
[0002]在大数据时代到来的今天,大规模的存储集群为云平台提供数据支撑。这样庞大的存储集群中,故障的发生越来越频繁。为了数据的可靠性,存储集群通常采用数据冗余技术。由于纠删码具有存储效率高的优点,已逐渐被基于多副本的传统存储集群所采用,用于读多次写一次的归档应用中,从而形成了一种基于纠删码的存储集群。根据存储硬件、软件等方面的差异性,网络集群可以划分为同构集群和异构集群。其中,集群异构性是普遍存在的,即使是在分布式的网络环境下同构存储集群中,每个节点表现出来的实时网络带宽,CPU处理能力等方面都普遍存在差异性。
[0003]基于Reed-Solomon编码的存储集群,即,RS (N,K)码存储集群,如果出现了一个失效数据节点,为了重构出该失效节点,传统的重构过程包括以下三步:(I)选取K个存活的存储节点;(II)读取这K个存储节点上相同偏移和长度的数据,即存活数据块,通过这K个存储数据块解码出失效节点上所对应的失效数据块;(III)重复步骤(II)直到恢复出该失效节点上的所有数据。如图1所示,为传统的纠删码集群中失效数据节点的重构过程,该过程是选取K个存活节点,读取这K个节点上相同位置上的相同长度的数据块,根据读取的K个块恢复失效节点上对应的数据块,选取不同偏移地址,重复上述恢复过程直到恢复出失效节点上的所有数据。图2给出该传统的重构失效数据节点的流程图。
[0004]在上述的传统的失效节点重构过程中,如果各个存活节点的负载比较均衡,并且节点网络带宽相近,则K个节点上的数据块读取时间是相近的。但是,当各个节点的负载和网络带宽相差很大,传统的纠删码存储集群会存在如下两方面问题:
[0005]一方面,在纠删码存储集群重构过程中,重构速度取决于K个节点中带宽最小的某个节点,这样的话,最晚完成数据块读取的这个存活节点将成为整个重构过程的瓶颈。
[0006]另一方面,在纠删码集群的重构过程中,某些节点的负载相对很轻,所能提供的数据读带宽就很高;反之,负载最重的存活节点就无法提供相近的读带宽,从而,重构过程将受限于该重负载的存储节点。只有读取到所有K个存活分块,才可能进行下一个数据重构操作。

【发明内容】

[0007]针对现有技术缺陷,本发明的目的在于提供一种纠删码存储集群中具有负载感知特性的重构优化方法。本方法同时适用于同构和异构存储集群。在各个存活节点的负载相对比较均衡时,该方法能获得与传统重构过程相同的重构性能;另外,它能够解决传统重构过程中由于各个节点负载相差较大而存在的重构性能瓶颈问题,即,存活节点对数据块读操作响应时间相差过大而导致的重构性能受限于‘最慢’存储节点的问题。本质上讲,传统重构方法无法充分利用存储集群资源。
[0008] 为实现上述目的,本发明提供了一种纠删码集群中失效节点的重构方法,该方法包括以下步骤:
[0009](I)当纠删码存储集群中有节点失效时,根据纠删码存储集群中节点的负载和网络带宽,初始化所有存活节点的权重值,并将所有存活节点的权重值保存在一个节点权重值数组中;
[0010](2)在节点权重值数组中选取权重值最大的K个存活节点,作为恢复该失效节点中对应偏移地址的数据块的数据块读取分布,其中所述K为存储集群中数据节点的数目;
[0011](3)将节点权重值数组中上述K个存活节点的权重值分别减I ;
[0012](4)判断节点权重值数组中权值大于0的节点数量是否小于K,若是则转到步骤
(5),若否则转到步骤(2);
[0013](5)根据得到的所有数据块读取分布,从相应存活节点上读取对应偏移地址的数据块中的数据,解码出失效节点上对应偏移地址的数据块中的数据。
[0014]优选地,所述步骤(1)中初始化所有存活节点的权重值具体为:给每个存活节点发送一个数据块的读请求,获取每个节点的响应时间;对每个节点的响应时间取倒数;再乘以100得到各个存活节点的权重值。
[0015]优选地,所述数据块的大小为512字节。
[0016]优选地,所述存储集群采用RS(N,K)编码方式,其中N表示集群中所有节点的数目,K表示编码时以K个节点为单位,K也是数据节点的个数,校验节点的个数为N-K。
[0017]总体而言,通过本发明所构思的以上技术方案与现有技术相比,具有下列有益效果:
[0018](I)根据节点的负载和网络带宽得到存活节点的权重值,从而得到重构失效节点所对应的数据块读取分布图,从该分布所对应的K个存活节点,可以读取恢复该数据条带的K个存活数据;而不是简单地连续读取特定K个节点上的所有数据块,通过上述方案,尽量在负载较轻的节点上多读取数据块,避免负载过重的节点拖慢重构过程。对存活节点权重值进行调度处理,减少了负载不均衡时的响应时间。
[0019](2)提高纠删码存储集群的可靠性:由于对存活节点上权重值的调度与重构时读取数据块的选择,总体来讲,多读负载轻节点上的数据,少读负载重节点上的数据。一定程度上是实现了存储集群重构过程中的负载均衡,降低了纠删码存储集群中各个节点因频繁的超负载而崩溃的概率,从而提高整个纠删码存储集群的可靠性。
【专利附图】

【附图说明】
[0020]图1为现有技术中重构数据、读取数据块分布示意图;
[0021]图2为现有技术中纠删码存储集群重构数据节点流程图;
[0022]图3为本发明一优选实施例中纠删码存储集群中各节点的条带与分块数据示意图;
[0023]图4为本发明中纠删码存储中失效节点的重构优化方法的流程图;
[0024]图5为本发明一优选实施例中重构数据结构示意图;
[0025]图6为本发明一优选实施例中RS^,4)编码重构数据时,读取数据块分布示意图。【具体实施方式】
[0026]为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
[0027]节点权重:本发明中以weight表示,其表达的意思是在一段时间内节点的性能和负载情况,权重值(weight)也可以用许多其它状态,例如CPU处理能力,网络带宽,I/O能力,存储能力等表征。在本发明中,用权重值(weight)反映的是:在一段时间内,所有节点在数据访问上的响应带宽和数据访问性能的比值。权重值(weight)越大表示节点性能越好。
[0028]调度层:本发明中在重构管理机制和和底层节点之间添加一层调度功能模块,充当重构I/O调度层,其主要职能是维护纠删码集群中每个节点的权重值。
[0029]节点数据块和偏移地址以及条带:在重构失效节点的过程中,恢复数据的单元就是数据块,即数据是一块一块的恢复的。定位到每个数据块单元的起始地址就是该数据块的偏移地址。在存储集群中,一个条带就是由在不同节点上相同偏移地址的数据块单元组成。重构过程就是反复利用每个条带内可用的K个数据块恢复失效节点的数据块。如图3所示,为节点数据块和条带的示意图,其数据块大小为512KB。
[0030]本发明提供了一种纠删码集群中失效节点的重构方法,本实施例采用的是RS(N,K)编码方式,即水平Vandermonde Reed-Solomon编码。其中N表示集群中所有节点的数目,K表示编码时以K个节点为单位(同时也是数据节点的个数),显然校验节点的个数为N-K。如图中(3 )所示,D (0,0)、D (1,0)、、、D (K-2, 0)、D (K-1,0)与 P (0,0)、、、P (N-K-1,0)组成一个条带。
[0031]该纠删码具有最大距离可分(Maximum Distance Separable,MDS)特性,即将一个数据对象分成K个分块(原始分块),然后编码成N个分块(编码分块),N个编码分块中的任意K个都可以解码出K个原始分块。Reed-Solomon编码(RS码)是一种具备MDS特性的纠删码,下面以RS码为案例来阐述本发明的思路。本发明不局限于RS码,它适用于具有MDS特性的纠删码。
[0032]如图4所示,为本发明提供的一种纠删码集群中失效节点的重构方法,具体的包含如下步骤:
[0033](I)当有节点失效时,开始重构。
[0034](2)根据纠删码存储集群上节点的负载和网络带宽,初始化所有节点的权重值,保存在一个节点权值数组中。
[0035](3)为了恢复一个条带上失效节点中的数据,在数组中选择权值最大的K个存活节点,作为恢复该失效数据的数据块读取分布;从该K个节点可以读取K个存活数据块,用于恢复出该数据条带。
[0036](4)将数组中最大的K个节点的权值分别减I。
[0037](5)判断数组中权值大于0的节点是否不少于K个,判断结果为是则转到步骤
(6),判断结果为假则转到步骤(7)。[0038](6)需要继续获得下一个数据条带所对应的数据块读取分布,从该分布所对应的K个存活节点,可以读取恢复该数据条带的K个存活数据,转到步骤(3)。
[0039](7)根据步骤(3)?(6)中得到的数据块读取分布图,从相应存活节点上读取数据,并解码出失效节点上的数据。
[0040](8)重复步骤(7)直到解码出失效节点上的全部数据。
[0041]如图5所示,本发明可通过在传统纠删码集群重构过程中添加一层I/O调度层,该调度层的主要工作是在重构时根据节点的负载情况维护每个节点的权重值,并对重构时读那些节点数据块进行调度。
[0042]如图6所示,假定集群上总共有六个节点。四个数据节点,两个检验节点,采用RS(6, 4)的编码方式实现的数据完整性保证。六个节点中任意一个节点失效了,需要数据重构操作。节点编号为{0,I, 2,3,4,5}。本发明实施例中,纠删码存储中失效节点的重构优化方法包括以下步骤。
[0043](I)当一个节点失效时(假定是节点5),开始重构。
[0044](2)根据纠删码存储集群上节点的负载和响应带宽,初始化所有存活节点的权重值(假定此时剩余的五个节点的权重值为〈4,4,3,3,2>)。
[0045]例如,存活节点权重值生成方法如下,给每个存活节点发送一个数据块的读请求,根据每个节点的响应时间(大约6ms?50ms)取倒数,再乘以100得到各个存活节点的权重值(大约0?20 )。不同的权值数组得到的数据块分布图长度不同,即,每次恢复失效数据时读取的数据块的数目不同。
[0046](3)在存活的节点中选择权值最大的4个节点(此时K的值为4),显然权值最大的4个节点为节点{0,I, 2,3})。对于权值相等的节点在选择数据块时是等价的。选择D(0,0)、D (I, 0)、D (2,0)、D (3,0),作为解码出数据块P (I, 0)的数据分布。
[0047](4)将这K个节点的权重值分别减I,权值变为〈3,3,2,2,2>。
[0048](5)对于剩下需要恢复的数据块,判断剩余的所有节点中权值大于0的节点不少于K个。显然此时满足条件,重复(3) (4)两步,下一个条带上选择0(0,1)、0(1,1)、D (2, I)、D(3,I),用于之后解码出失效节点上对应的数据块P(l,I),存活节点权值变为<2, 2, I, 1,2>;再次重复(3) (4)两步,选择0(0,2)、0(1,2)、0(2,2)、?(0,2)用于之后解码出失效节点上对应的数据块P(l,2),权值变为〈1,1,0, I, 1> ;再次重复(3) (4)两步,选择D (0,3)、D (1,3)、D (3,3)、P (0,3),用于之后解码出失效节点上对应的数据块P (1,3),权值变为〈0,0,0,0>。此时权值大于0的节点少于4个。此时得到了恢复数据块P(l,0)?P(l, 3)的数据分布,在恢复数据时,以图6所示的数据分布情况为恢复单元。每次依据得到的数据块分布图为单位读取数据,即在一次恢复过程中,读取数据时,在数据节点I上读取D(O1O)?D(0,3),在数据节点2上读取D(1,0)?D(1,3),在数据节点3上读取D (2,0-D (2,2),在数据节点上读取D (3,0),D (3,I),D (3,3),在校验节点I上读取P (0,2),P (0,3)。根据这样的数据分布反复进行数据读取和失效数据的解码,直到失效节点数据全部恢复。如图6所示,前四个数据块恢复数据时读取的数据块分布(阴影部分)。
[0049]对图的说明情况如下:
[0050]数据块的大小选取512字节,恢复数据时以512字节为单位恢复低地址到高地址。对于Pl盘失效时,两种方式的重构过程分别如下:[0051]传统纠删码存储集群上的失效节点恢复数据的过程为:
[0052]如图1所示,直接从4个数据节点上读取数据块D (0,O)、D (1,O)、D (2,O)、D (3,0)恢复P (I, 0);读取数据块D (0, I)、D (I, I)、D (2,I)、D (3,I)恢复P (1.1);每次恢复数据都是在四个数据节点上读取数据块解码出对应失效数据块直到恢复整个失效节点上的数据。
[0053]本发明方法的操作为:
[0054]第一步,根据每个存活节点上的负载情况分配权重值。
[0055]第二步,根据存活节点的权重值,选取权重值最大的K个节点,对于某一个条带上的失效数据,用于恢复的数据块就是这K个节点上的对应数据块。
[0056]第三步,将权重值最大的K个节点权值减一,返回第二步的操作,直到权值最大的K个节点中有权值等于O。这样就得到了恢复失效数据的数据块读取分布情况。
[0057]第四步,根据得到的数据分布情况读取数据块,反复解码出失效节点上的数据块,直到恢复了失效节点上的全部数据块,结束重构过程。
[0058]总而言之,本发明有如下优化效果:
[0059]1、在各个节点负载和网络带宽情况不均衡的情况下重构速度更快:由于采用了步骤(2)、步骤(3)、步骤(5)、步骤(6)四个步骤充分利用所有存活节点的带宽,尽量在负载较轻的节点上多读取数据块,避免负载过重的节点拖慢重构过程。对存活节点权重值进行调度处理,减少了负载不均衡时的响应时间。
[0060]2、提高纠删码存储集群的可靠性:由于对存活节点上权重值的调度与重构时读取数据块的选择,总体来讲,多读负载轻节点上的数据,少读负载重节点上的数据。一定程度上是实现了存储集群重构过程中的负载均衡,降低了纠删码存储集群中各个节点因频繁的超负载而崩溃的概率,从而提高整个纠删码存储集群的可靠性。
[0061]本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
【权利要求】
1.一种纠删码集群中失效节点的重构方法,其特征在于,该方法包括以下步骤: (1)当纠删码存储集群中有节点失效时,根据纠删码存储集群中节点的负载和网络带宽,初始化所有存活节点的权重值,并将所有存活节点的权重值保存在一个节点权重值数组中; (2)在节点权重值数组中选取权重值最大的K个存活节点,作为恢复该失效节点中对应偏移地址的数据块的数据块读取分布,其中所述K为存储集群中数据节点的数目; (3)将节点权重值数组中上述K个存活节点的权重值分别减I; (4)判断节点权重值数组中权值大于O的节点数量是否小于K,若是则转到步骤(5),若否则转到步骤(2); (5)根据得到的所有数据块读取分布,从相应存活节点上读取对应偏移地址的数据块中的数据,解码出失效节点上对应偏移地址的数据块中的数据。
2.如权利要求1所述的方法,其特征在于,所述步骤(I)中初始化所有存活节点的权重值具体为: 给每个存活节点发送一个数据块的读请求,获取每个节点的响应时间; 对每个节点的响应时间取倒数; 再乘以100得到各个存活节点的权重值。
3.如权利要求1或2所述的方法,其特征在于,所述数据块的大小为512字节。
4.如权利要求1至3任一项所述的方法,其特征在于,所述存储集群采用RS(N,K)编码方式,其中N表示集群中所有节点的数目,K表示编码时以K个节点为单位,K也是数据节点的个数,校验节点的个数为N-K。
【文档编号】G06F3/06GK103645861SQ201310651547
【公开日】2014年3月19日 申请日期:2013年12月3日 优先权日:2013年12月3日
【发明者】黄建忠, 曹强, 谢长生, 罗海兵, 代尔卫 申请人:华中科技大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1