一种分布式数据存储系统的修复方法转让专利

申请号 : CN201510506387.2

文献号 : CN105159603B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 高翔陈健赖建华刘志光

申请人 : 福建省海峡信息技术有限公司

摘要 :

本发明涉及一种分布式数据存储系统的修复方法,包括以下步骤:步骤S1:提供管理节点与复数个存储节点;存储节点中包括用以修复损坏数据块的存储节点集与用以存储修复数据所需的纠删码数据的存储节点集;步骤S2:管理节点监测查找系统中的损坏数据块,当管理节点查找到损坏数据块时,采用LeDiR算法选取最优存储节点,并授权最优存储节点进行数据修复工作;步骤S3:最优存储节点采用纠删码算法进行修复工作;步骤S4:最优存储节点完成数据修复后,将数据修复情况发送给管理节点。本发明依靠管理节点检测出损坏的存储节点,并基于纠删码算法进行修复,不同节点上的修复进程可并发进行,提高了存储系统的修复能力,减轻了管理服务器的负载。

权利要求 :

1.一种分布式数据存储系统的修复方法,其特征在于具体包括以下步骤:

步骤S1:提供一管理节点与复数个存储节点;所述管理节点用以查找所述存储节点中是否有数据损坏;所述存储节点中包括用以修复损坏数据块的存储节点集S与用以存储修复数据所需的纠删码数据的存储节点集A;

步骤S2:所述管理节点监测查找所述分布式数据存储系统中的损坏数据块,当所述管理节点查找到损坏数据块时,采用LeDiR算法在用以修复损坏数据块的存储节点集S中为所述损坏数据块选取最优存储节点,并授权所述最优存储节点进行数据修复工作;

步骤S3:所述最优存储节点向存储节点集A请求修复所述损坏数据块所需的纠删码数据,并为所述损坏数据分配一空间,启动所述损坏数据块的修复进程,采用纠删码算法进行修复工作;

步骤S4:所述最优存储节点完成数据修复后,将数据修复情况发送给管理节点;若是修复成功,则将最优存储节点上数据发送给管理节点进行数据更新;若是失败,则所述最优存储节点对所述损坏数据块重新进行修复。

2.根据权利要求1所述的一种分布式数据存储系统的修复方法,其特征在于:所述管理节点创建表T,用以记录纠删码信息元存储位置;所述管理节点创建表G,用以记录每个存储节点当前的访问量;所述管理节点包括一用以存储损坏数据块位置的链表badList,当所述管理节点采用心跳报文对所有存储节点的状态进行检测,当检测到损坏数据块时,将存储损坏数据块的存储节点添加到badList中。

3.根据权利要求1所述的一种分布式数据存储系统的修复方法,其特征在于:所述纠删码算法可记为(n,k,t,Q),用以修复损坏数据块,具体包括以下步骤:步骤S11:将待存入分布式数据存储系统的文件数据分为k个分片;

步骤S12:将k个分片进行冗余编码,生成n(n>k)个冗余分片,并且将所述n个冗余分片分别存储在不同的服务器节点上;步骤S13:当进行修复损坏数据块时,从n个分片中选取t(k≤t

4.根据权利要求1所述的一种分布式数据存储系统的修复方法,其特征在于:所述步骤S2中所述管理节点查找到损坏数据块时,若查找到的损坏数据块的数量大于1时,需对所有损坏数据块的优先数进行计算,其中所述损坏数据块的优先数用以表示进行数据修复的先后顺序,所述优先数越低的损坏数据块,优先权越高,则越需要优先修复,反之修复顺序越靠后;所述优先数计算采用以下公式得到:数据块优先级=静态优先数+u1*冗余数-u2*该数据块被访问频率+u3*相关数据访问负载数,其中 ,冗余数=该数据整体的所有纠删码-最少可以修复整个数据整体的纠删码数。

5.根据权利要求1所述的一种分布式数据存储系统的修复方法,其特征在于:所述用以修复损坏数据块的存储节点集S中的最优存储节点有多个修复损坏数据块的任务时,根据所述数据块优先数的大小进行排序,依次选择优先数小的损坏数据块进行修复; 在选定修复一损坏数据块后,所述最优存储节点集S所述最优存储节点向存储节点集A请求修复所述损坏数据块所需的纠删码数据。

6.根据权利要求5所述的一种分布式数据存储系统的修复方法,其特征在于:所需的纠删码数据包括进行纠删码算法所需要的k个其它纠删码信息元,当所述最优存储节点接收到存储节点集A中响应的纠删码信息元超过所需的k个时,则发送取消信号至所述存储节点集A,并采用纠删码算法对损坏数据块进行修复。

说明书 :

一种分布式数据存储系统的修复方法

技术领域

[0001] 本发明涉及分布式数据存储系统中数据修复的技术领域,特别是一种分布式数据存储系统修复方法。

背景技术

[0002] 随着互联网的普及与发展,数据在人类生活中起着越来越重要的作用,人们对数据的可靠性和安全性有了更高的要求。英特尔创始人之一戈登.摩尔(GordonMoore)提出来了摩尔定律,其内容为:当价格不变时,集成电路上可容纳的晶体管数目,约每隔18个月便会增加一倍,性能也将提升一倍。在1998年图灵奖获得者Jim Gray发表了著名的存储界的“摩尔定律”:每18个月全球新增信息量等于有史以来全部信息量的总和。数据海量化成为趋势,为了便于存储大规模数据,分布式存储系统就应运而生。
[0003] 分布式数据存储系统提供了两种可靠性:可用性(availability)和持久性(durability)。可用性是指故障节点中的数据能够通过当前其他可利用的节点来进行重建修复;而持久性是指,数据并不会因为系统中的某个或者某些节点故障(如节点下线、自然灾害、磁盘损坏等)而丢失原有的数据。也就是说,尽管系统中的数据,目前由于某些节点故障而不能现在修复,但是在将来的某一时刻,还是能够修复的。这两者之间的区别是,可用性强调的是节点当前数据是否可用,而持 久性强调的是将来系统的数据能够长久保存。
[0004] 目前比较著名的分布式文件系统有Google公司的GFS(Google File System开源的HDFS(Hadoop Distr ibuted file System)、Lustre、MooseFs以及清华大学自主研发的CarrierFs等。其中GFS管理着Google公司百万服务器上的海量数据,基于GFS的分布式数据库BigTable支撑着Google搜索、地图、社交网络等服务。HDFS为Hadoop底层分布式文件系统,由于Hadoop能够部署在通用平台上,相比较于传统的集中式存储,它具有更高具有可扩展性(Scalable)、低成本(Economical)、高效性(Efficient)与可靠性(Reliable)等优点,使其在分布式计算领域得到了广泛的。但是,分布式系统的单个节点的可用性不高,在系统中会不断出现节点因为磁盘损坏、节点下线、自然灾害等因素而失效。因此为了保证数据的持久性,在节点失效后,就一定要加入新节点代替失效节点,以此来维护整个系统的数据可靠性。由于分布式系统的存储的信息都是海量数据,要实现此功能无疑是个巨大挑战。
[0005] 目前,分布式数据存储的修复技术有基于副本的修复、基于编码的修复和基于路由器加速的修复。
[0006] 1.基于副本的数据修复:存储节点中存储的是源文件的副本数据,修复时newNode从任一provider中获取数据,也可从多provider并行下载以降低传输时间。
[0007] 当某个副本丢失或损坏后,系统需要再建立一个新的副本,为此系统选择一个存储节点作为newNode,newNode从至少一个存储节点 中接受数据,向newNode提供数据的节点称为provider。如图1中所示,在网络中,源文件被保存为3个副本保存于3个存储节点上,当其中一个丢失后,newNode将剩下的两个作为provider并从2个provider并行地接受数据,直到整个副本被下载到newNode。从而一个新的副本产生于newNode之上。
[0008] 该技术的缺点在于:节点需存储大量数据,每个存储节点均需存储一个文件副本,存储冗余度大,造成大量存储资源浪费。修复时间长,需传输整个文件,同时占用大量网络带宽资源。
[0009] 2.基于编码的数据修复(纠删码):源文件在被存储到存储节点前进行编码。整个文件被分为k块,编码后可得到n个编码块,n个编码块中的任意k块即可恢复源文件。每个存储节点中分别存储一个编码块。修复时,newNode至少需从k个provider下载编码块,由newNode对收到的编码块重新编码得到一个新的编码块。
[0010] 如图2,源文件被划分为3块,并被编码为4个编码块(不同编码块大小相同)。系统中4个存储节点分别保存一个编码块。当第4个编码块丢失后,系统选择一个节点作为newNode,newNode从剩余的3个存储节点(即provider)中接收数据。newNode接收3个编码块后,通过该3个编码块恢复出源文件,再重新编码得到一个新的编码块并保存。
[0011] 现在正在使用以纠删码(ErasureCode)为基础的存储系统有RobuStore(UCSD,2007),它专为大型数据对象和海量数据设计,使用LT(Luby Transform)编码,采用猜测访问机制,属于中心化 的架构,具有低时延、高传输率的特点。欧洲核子研究中心使用低密度奇偶校验码技术(Low Density Parity Check,LDPC),将整份原件分割成许多小块,每小块经过纠删码编码后分散存储到所有存储节点,属于分布式的架构。
[0012] 但是纠删码在修复损坏的数据节点时存在一个问题:修复M1大小的数据块需要通过网络连接从k个不同的节点上总共下载k×M1大小的数据块,这样修复带宽是昂贵的。
[0013] 3.基于路由器加速的数据修复方法:如图3,newNode向provider发送T消息,T中含有目的地址。路由器SR将其记录,SR将T转发出去,provider收到T消息后,回复一个ak消息(包含provider自身ip)。ak经过SR时,将所有ip保存,newNode的到所有provider的ip后向所有的provider发送re-ak消息。provider接收到re-ak消息后发送数据,SR接收缓存K个编码块后,一起发送到newNode,由newNode对收到的编码块重新编码得到一个新的编码块。
[0014] 在2002年,Weatherspoon和Kubiatowiez定量地比较了分别基于网络编码和副本这两种存储系统,经分析得出:在数据容度相同情况下,与网络编码相比,副本消耗存储量更大。基于路由器加速的修复算法虽然提高了修复效率,但由于所有的修复管理还是由管理节点负责,管理节点的负载较大,对路由器的性能和功能上有一定要求。
[0015] 分布式数据存储系统的特点是分布式存储与集中管理,所以所有的数据修复过程都要由管理节点进行管理调度,这大大的增加了管理节点的负担,以及遏制了整个系统的修复能力,因此我们希望能够将 管理节点从修复数据的负担中释放出来,将修复的工作分配给各个节点,管理节点不需要过多的关心修复问题,以提高整个系统综合的修复能力和整体工作效率。

发明内容

[0016] 有鉴于此,本发明的目的是提供一种分布式数据存储系统的修复方法,在现有的修复算法的基础上为简化管理、提高修复能力,依靠管理节点来检测出损坏的存储节点,并基于现有的纠删码或完全副本冗余算法来修复,不同节点上的修复进程可同时并发进行修复,以提高修复能力,同时减轻管理服务器的负载。
[0017] 本发明采用以下方案实现:一种分布式数据存储系统的修复方法,具体包括以下步骤:
[0018] 步骤S1:提供一管理节点与复数个存储节点;所述管理节点用以查找所述存储节点中是否有数据损坏;所述存储节点中包括用以修复损坏数据块的存储节点集S与用以存储修复数据所需的纠删码数据的存储节点集A;
[0019] 步骤S2:所述管理节点监测查找所述分布式数据存储系统中的损坏数据块,当所述管理节点查找到损坏数据块时,采用LeDiR算法在用以修复损坏数据块的存储节点集S中为所述损坏数据块选取最优存储节点,并授权所述最优存储节点进行数据修复工作;
[0020] 步骤S3:所述最优存储节点向存储节点集A请求修复所述损坏 数据块所需的纠删码数据,并为所述损坏数据分配一空间,启动所述损坏数据块的修复进程,采用纠删码算法进行修复工作;
[0021] 步骤S4:所述最优存储节点完成数据修复后,将数据修复情况发送给管理节点;若是修复成功,则将最优存储节点上数据发送给管理节点进行数据更新;若是失败,则所述最优存储节点对所述损坏数据块重新进行修复。
[0022] 进一步地,所述管理节点创建表T,用以记录纠删码信息元存储位置;所述管理节点创建表G。用以记录每个存储节点当前的访问量;所述管理节点包括一用以存储损坏数据块位置的链表badList,当所述管理节点采用心跳报文对所有存储节点的状态进行检测,当检测到损坏数据块时,将存储损坏数据块的存储节点添加到badlist中。
[0023] 进一步地,所述纠删码算法可记为(n,k,t,Q),用以修复损坏数据块,具体包括以下步骤:
[0024] 步骤S11:将待存入分布式数据存储系统的文件数据分为k个分片;
[0025] 步骤S12:将k个分片进行冗余编码,生成n(n>k)个冗余分片,并且将所述n个冗余分片分别存储在不同的服务器节点上;
[0026] 步骤S13:当进行修复损坏数据块时,从n个分片中选取t(k≤t
[0027] 进一步地,所述步骤S2中所述管理节点查找到损坏数据块时, 若查找到的损坏数据块的数量大于1时,需对所有损坏数据块的优先数进行计算,其中所述损坏数据块的优先数量用以表示进行数据修复的先后顺序,所述优先数越低的损坏数据块,优先权越高,则越需要优先修复,反之修复顺序越靠后;所述优先数计算采用以下公式得到:数据块优先级=静态优先数+u1*冗余数-u2*该数据块被访问频率+u3*相关数据访问负载数,其中u1+u2+u3=100%,冗余数=该数据整体的所有纠删码-最少可以修复整个数据整体的纠删码数。
[0028] 较佳的,在计算优先级时,采用加权平衡来实现,静态优先级是由用户预先指定的,而其他影响因子需要根据系统运行状态进行动态调整,所有影响因子之和为100%,因此使资源的分配更加合理,整个修复系统也更强大与完善。其中冗余数越大安全性和数据可靠性越高,但系统的存储开销也越大;相反,冗余数越小,安全性和数据可靠性越低,相比较冗余数小的也就需要先修复。
[0029] 进一步地,所述用以修复损坏数据块的存储节点集S中的最优存储节点有多个修复损坏数据块的任务时,根据所述数据块优先数的大小进行排序,依次选择优先数小的损坏数据块进行修复;在选定修复一损坏数据块后,所述最优存储节点集S所述最优存储节点向存储节点集A请求修复所述损坏数据块所需的纠删码数据。
[0030] 较佳的,所述的存储节点获取到的相关信息包含如下内容:1.与修复该数据有关的其它纠删码所在的存储节点位置及存储地址。2.该损坏的纠删码数据块所采用的纠删码算法的一下必要参数信息。当数据被访问的频率和相关数据被访问频率越高表示该数据的重要性 越高,而该数据被损坏对整个系统产生的影响也就越大,所以它是数据修复的积极因素,对比其他长期不被使用的数据,这种数据应该尽可能的先修复保证系统的良好运行。
[0031] 进一步地,所需的纠删码数据包括进行纠删码算法所需要的k个其它纠删码信息元,当所述最优存储节点接收到存储节点集A中响应的纠删码信息元超过所需的k个时,则发送取消信号至所述存储节点集A,并采用纠删码算法对损坏数据块进行修复。
[0032] 较佳的,由于数据块采用纠删码算法进行修复,其所需要的其它纠删码信息元只是全部纠删码中的任意k个即可,所以当接收到其它存储节点的响应信息超过所需的数量的k个时就已经足够了,再接收到响应信号则发送取消信号回去,表示不需要该资源了。对于前k个其它存储节点发过来的响应信号,采用即收即发的处理方式,立即发送纠删码数据发送信号过去,要求这些存储节点把纠删码数据立即发送过来。因此当存储节点B获取到足够的k个纠删数据时,则可以调用对应纠删码数据修复算法,进行对纠删码数据的修复。
[0033] 特别的,由于考虑到可能会发生管理节点损坏的问题,这是对系统致命的打击,为了避免这种危险的发生,应该用一个节点作为管理节点的备用存储节点newControler。一方面备用节点要定时存储管理节点上新更新的信息,另一方面用心跳报文实时监控着管理节点,如果一旦管理节点发生损坏或者下线等问题,就立即启动该备用的新的存储节点作为新的管理节点,马上替代原来的管理节点成为管理者的角色。首先该新管理节点上可以通过日志可以很快恢复原管理节点 的上新的动态信息,另外新管理节点首先要通知所有的存储节点新管理节点的位置所在,使系统平稳过渡管理节点的转换。最后要为该新管理节点寻找一个新的备用节点。若备用节点损坏或下线,则管理节点,就近选一个存储节点做为备用节点,将管理信息发送给新的备用节点。
[0034] 与现有技术相比,本发明的有益效果是:
[0035] 1.本发明的分布式数据存储系统中管理节点采用授权存储节点进行辅助修复的修复策略,这个策略尽可能的调用了存储节点的资源并且大大减轻了管理节点的负载,使管理节点能够更有效的工作,专注于更重要的部分。
[0036] 2.本发明的分布式数据存储系统中管理节点授权存储节点自行修复的修复策略采用了竞争机制,尽可能充分调用各个存储节点,使大量的修复数据的过程可以并行运行,一定程度上均衡负载,提高数据自我修复的综合能力。
[0037] 3.本发明的分布式数据存储系统中管理节点授权存储节点自行修复的修复策略没有使用管理节点进行统一修复的方式,而是用分布式方式让各存储节点进行并发修复。因为统一由管理节点管理的修复方式不仅有修复上限的瓶颈困扰,而且无疑对管理节点造成相当大的负担,而分布式数据存储系统中管理节点授权存储节点的自行修复的修复策略正好能解决这两个问题,提高系统性能,并且更符合当前技术发展的趋势。
[0038] 4.本发明的分布式数据存储系统中管理节点授权存储节点自行 修复的修复策略更简化了管理节点的管理机制,管理节点不再需要为修复数据提供负责的管理,这就是分布式的一个优点,简化管理。

附图说明

[0039] 图1为基于副本的数据修复方法的示意图。
[0040] 图2为基于编码的数据修复方法的示意图。
[0041] 图3为基于路由器的数据修复方法的示意图。
[0042] 图4为本发明的方法流程示意图
[0043] 图5为管理节点检测到有5个数据块损坏的示意图。
[0044] 图6为:存储节点S1、S2、S3分别向与损坏的a、b、d数据块相关的数据块所在的节点发送数据修复请求的示意图。
[0045] 图7为接收到请求的存储节点发送回响应信号给存储节点集S中的对应存储节点的示意图。
[0046] 图8为对应存储节点接收到相应的响应信息,立刻发送数据发送请求的示意图。
[0047] 图9为存储节点S1得到修复a数据块的所需纠删码数据,调用纠删码算法对a数据块进行修复的示意图。
[0048] 图10为存储节点S1、S2、S3分别修复好数据块a、b、d,向管理节点发送该数据块修复完成信号及该数据块的相关信息的示意图。
[0049] 图11为本发明中管理节点工作流程示意图。
[0050] 图12为本发明中存储节点工作流程示意图。

具体实施方式

[0051] 下面结合附图及实施例对本发明做进一步说明。
[0052] 本实施例提供一种分布式数据存储系统的修复方法,如图4所示,具体包括以下步骤:
[0053] 步骤S1:提供一管理节点与复数个存储节点;所述管理节点用以查找所述存储节点中是否有数据损坏;所述存储节点中包括用以修复损坏数据块的存储节点集S与用以存储修复数据所需的纠删码数据的存储节点集A;
[0054] 步骤S2:所述管理节点监测查找所述分布式数据存储系统中的损坏数据块,当所述管理节点查找到损坏数据块时,采用LeDiR算法在用以修复损坏数据块的存储节点集S中为所述损坏数据块选取最优存储节点,并授权所述最优存储节点进行数据修复工作;
[0055] 步骤S3:所述最优存储节点向存储节点集A请求修复所述损坏数据块所需的纠删码数据,并为所述损坏数据分配一空间,启动所述损坏数据块的修复进程,采用纠删码算法进行修复工作;
[0056] 步骤S4:所述最优存储节点完成数据修复后,将数据修复情况发送给管理节点;若是修复成功,则将最优存储节点上数据发送给管理节点进行数据更新;若是失败,则所述最优存储节点对所述损坏数据块重新进行修复。
[0057] 在本实施例中,所述管理节点创建表T,用以记录纠删码信息元存储位置;所述管理节点创建表G。用以记录每个存储节点当前的访 问量;所述管理节点包括一用以存储损坏数据块位置的链表badList,当所述管理节点采用心跳报文对所有存储节点的状态进行检测,当检测到损坏数据块时,将存储损坏数据块的存储节点添加到badlist中。
[0058] 较佳的,所述管理节点工作流程图如图11所示,在管理节点基于纠删码找到能修复损坏数据块的存储节点时,根据表G找到一个访问量最少的节点minTag,发送损坏数据块的大小和修复损坏数据块找到的minTag节点,并创建两个线程:
[0059] 线程1:
[0060] message=receive()
[0061] if type是修复数据块的反馈信息
[0062] if message.P is success
[0063] T[message.D]=message.A
[0064] if message.P is faile
[0065] badlist.add(messeage.D);
[0066] 线程2:
[0067] //开辟数组用于存储修复损坏块纠删码信息元存储位置信息tmp;
[0068] maxPower=min(badlist);//找到优先数最小的损坏的数据块//查找所有与修复损坏块有关纠删码信息元存储位置信息for t in T
[0069] //p表示信息元是否由同一数据块划分出来
[0070] if t.p==maxPower.p
[0071] tmp.add(t)
[0072] //在不存在与损坏数据maxPower有关的集合中找到一个访问量最少的存储节点[0073] minTag=Min(G-releated(maxPower))
[0074] message={'开辟空间大小':maxPower.size,'修复损坏块纠删码信息元存储位置',tmp}
[0075] //把信息message发送到minTag
[0076] Send(minTag,message)
[0077] 在本实施例中,所述纠删码算法可记为(n,k,t,Q),用以修复损坏数据块,具体包括以下步骤:
[0078] 步骤S11:将待存入分布式数据存储系统的文件数据分为k个分片;
[0079] 步骤S12:将k个分片进行冗余编码,生成n(n>k)个冗余分片,并且将所述n个冗余分片分别存储在不同的服务器节点上;
[0080] 步骤S13:当进行修复损坏数据块时,从n个分片中选取t(k≤t
[0081] 在本实施例中,所述步骤S2中所述管理节点查找到损坏数据块时,若查找到的损坏数据块的数量大于1时,需对所有损坏数据块的优先数进行计算,其中所述损坏数据块的优先数量用以表示进行数据修复的先后顺序,所述优先数越低的损坏数据块,优先权越高,则越 需要优先修复,反之修复顺序越靠后;所述优先数计算采用以下公式得到:数据块优先级=静态优先数+u1*冗余数-u2*该数据块被访问频率+u3*相关数据访问负载数,其中u1+u2+u3=100%,冗余数=该数据整体的所有纠删码-最少可以修复整个数据整体的纠删码数。
[0082] 在本实施例中,所述存储节点工作流程图如图12所示,所述用以修复损坏数据块的存储节点集S中的最优存储节点有多个修复损坏数据块的任务时,根据所述数据块优先数的大小进行排序,依次选择优先数小的损坏数据块进行修复;在选定修复一损坏数据块后,所述最优存储节点集S所述最优存储节点向存储节点集A请求修复所述损坏数据块所需的纠删码数据。所需的纠删码数据包括进行纠删码算法所需要的k个其它纠删码信息元,当所述最优存储节点接收到存储节点集A中响应的纠删码信息元超过所需的k个时,则发送取消信号至所述存储节点集A,并采用纠删码算法对损坏数据块进行修复。
[0083] 1.算法实现代码:
[0084] struts message{
[0085] recordNum;
[0086] tpye;
[0087] head;
[0088] temp;
[0089] list;
[0090] }
[0091] //用于存储所有接收的信息
[0092] messageList;
[0093] message=receive()
[0094] head=message.head
[0095] temp=message.temp;
[0096] type=messege.type;
[0097] if type是管理节点发送修复新节点请求
[0098] size=message('开辟空间大小')
[0099] newNode=newsizeof(size)
[0100] messageList.add(message)
[0101] for t in tmp
[0102] 向t节点发送请求信息
[0103] if type是提供修复数据的节点的响应
[0104] mg=messageList.search(head)
[0105] mg.recordNum++
[0106] if mg.recordNum>k
[0107] 退出接收响应线程
[0108] send(确认发送纠删码相关信息,t)
[0109] if type是提供修复数据的节点的数据流
[0110] mg=messageList.search(head)
[0111] ifmg.list=full
[0112] //k纠删码算法修复一个节点所需最少信息元个数
[0113] 开始修复
[0114] 修复完后发反馈信息----修复的数据块D,修复情况P,该节点地址A[0115] if type是其他存储节点的修复请求
[0116] if System不忙碌
[0117] 发送响应信号
[0118] if type是修复节点要求发送数据
[0119] 根据head发送相应信息
[0120] 在本实施例中,为了更好的说明该修复方法,假设在开始数据修复工作前的背景如下:文件以纠删码的形式存储,假设有5块文件被损坏,且经过计算后5个数据块的优先级由高到低记为a,b,c,d,e;如图5至图10所示,对所述五个数据块进行修复的过程具体包括以下步骤:
[0121] (1)第一步:管理节点检测到有5个数据块损坏。
[0122] (2)第二步:根据LeDiR算法[2],管理节点为损坏的数据块分配对应的最优节点进行数据修复工作。分别是a、c数据块分配到S1存储节点进行修复,b数据块分配到S2存储节点进行修复,d、e数据块分配到S3存储节点进行修复。
[0123] (3)第三步:向存储节点S1、S2、S3发送损坏纠删码数据块的对应的相关修复信息。
[0124] 信息中包含的内容如下:
[0125] 1.修复该数据有关的其他纠删码信息所在的其他节点位置,及所在的存储地址等。
[0126] 2.该纠删码修复算法所必需的参数信息,由该具体的修复算法所决定。
[0127] (4)第四步:存储节点S1、S2、S3接收到管理节点M发送的信息后,开始进行各自的数据修复。
[0128] (5)第五步:经计算,存储节点S1中a数据块的修复工作的优先权高于c数据块的修复工作,所以a数据块的修复工作先进行。同理,存储节点S3中d数据块修复工作的优先权高于e数据块修复工作,d数据块先修复。
[0129] (6)第六步:存储节点S1、S2、S3分别向与修复a、b、d数据块相关的数据块所在的存储节点节点发送数据修复请求。
[0130] (7)第七步:存储节点集A中如果有某个节点Ai被多个需要进行修复工作的节点请求数据,按先到先响应的规则,后到的则进入请求等待。
[0131] (8)第八步:接收到请求的存储节点Ai发送响应信号给存储节点集S中的对应存储节点。
[0132] (9)第九步:存储节点S1、S2、S3收到节点集A中各个存储节点响应,收到一个响应则立刻再发送一个“数据发送信号”过去,令其可以发送纠删码数据块。假设由于a数据块的修复只需k个纠删码的数据块即可,当接收到第k+1个响应信号时则发送取消信号回去。S2、S3同理。
[0133] (10)第十步:存储节点S1得到修复a数据块的所需纠删码数据,则调用对应的纠删码算法,对a数据块进行修复工作。S2、S3同理。
[0134] (11)第十一步:当存储节点S1修复好a数据块后,发送完成信号及a数据块的一些相关信息给管理节点M,以方便管理节点进行管理。S2、S3同理。
[0135] (12)第十二步:存储节点S1、S3分别开始修复数据块c,e。类似重复修复步骤的第六步至第十一步。
[0136] 以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所做的均等变化与修饰,皆应属本发明的涵盖范围。