一种基于改进型纠删码的失效数据修复方法

文档序号:6535878阅读:127来源:国知局
一种基于改进型纠删码的失效数据修复方法
【专利摘要】本发明公开了一种基于改进型纠删码的失效数据修复方法,目的是设计针对数据访问特点的高效的失效数据修复方法。技术方案是构建一个由1个控制节点和N个存储节点组成的分布存储系统,控制节点安装有数据写入管理程序和数据修复程序;存储节点安装有数据写入程序和数据读取程序;数据写入管理程序接收用户提交的数据对象,对其进行分块和编码计算,将得到的数据块写入存储节点;数据修复程序接收失效数据子块修复请求,从存储节点读取可用数据子块,进行解码计算,得到修复的数据子块。采用本发明可提高系统的数据可用性,降低数据块失效对数据访问的影响,减少数据访问涉及的失效数据量,减少网络传输数据量,提高失效数据的修复效率。
【专利说明】一种基于改进型纠删码的失效数据修复方法
【技术领域】
[0001]本发明涉及分布存储系统的数据容错方法,尤其是基于纠删码的失效数据修复方法。
【背景技术】
[0002]数据容错是海量数据分布存储的关键技术之一,数据容错对于提高系统的可用性和可靠性至关重要。目前,数据容错技术主要包括基于复制的容错技术和基于纠删码的容错技术。
[0003]基于复制的容错技术简单直观,易于实现和部署,需要为每个数据对象创建若干同样大小的副本,存储空间开销较大。基于纠删码的容错技术通过将数据对象分割为多个数据块,通过利用纠删码算法对原始的数据块进行编码得到冗余的数据块,把多个数据块的信息融合到较少的冗余信息中,有效节省存储空间。与基于复制的容错技术相比,基于纠删码的容错技术具有冗余度低、存储空间利用率高等优点,已经逐步成为大数据时代数据容错的主流技术。
[0004]基于纠删码的容错技术的基本思想是对k个原始数据块进行编码计算得到m个冗余数据块;只需k+m个数据块中的任意k个数据块,就可通过解码计算恢复得到原始的k个数据块。
[0005]具体而言,每个冗余数据块Cj (j = 1,2,^m)都是k个原始数据块Di (i =I,2,…,k)的线性组合,编码计算可表示为公式(I),其中,GjJ j = I, 2,…,m, i = I, 2,…,k)是数据块编码系数。也就是说,对于冗余数据块& (j = 1,2,...,πι)而言,首先,编码系数Gji (i = 1,2,…,k)与数据块Di (i = 1,2,…,k)进行逐位相乘,得到k个新数据块Tji =
GjiXDi (i = 1,2,…,k);然后,k个新数据块L (i = 1,2,...,k)进行逐位相加,得到冗余
数据块
【权利要求】
1.一种基于改进型纠删码的失效数据修复方法,其特征在于包括以下步骤: 第一步,构建一个分布存储系统,它由多个节点构成,每个节点都是一台可独立运行的计算机,各节点通过网络设备互连; 分布存储系统中的节点分为两类:控制节点和存储节点,控制节点和存储节点上均安装有操作系统、TCP/IP协议软件,配置了网络环境; 分布存储系统包括一个控制节点,负责与用户交互,控制节点上安装有数据写入管理程序和数据修复程序;数据写入管理程序接收用户提交的数据对象写入请求,负责存储编码系数,对数据对象进行分块和编码计算,向各存储节点分发数据块写入请求;数据修复程序接收用户提交的失效数据子块修复请求,负责存储解码系数,从各存储节点获取可用数据子块,进行解码计算,完成修复后向用户发送修复成功的数据子块; 分布存储系统包括 N个存储节点,N为正整数,它们负责存储数据对象的原始数据块和冗余数据块,执行数据块写入任务和可用数据子块读取任务,所述原始数据块由多个原始数据子块组成,冗余数据块由多个冗余数据子块组成; 存储节点上安装有数据写入程序和数据读取程序,数据写入程序负责接收来自控制节点的数据块写入请求,完成数据块写入任务,数据读取程序负责接收来自控制节点的可用数据子块读取请求,读取可用数据子块,并发送给控制节点; 第二步,控制节点执行数据写入管理程序,接收用户提交的数据对象NDO,对数据对象NDO进行分块和编码计算,得到原始数据块和冗余数据块,将原始数据块和冗余数据块写入存储节点,具体步骤如下: . 2.1控制节点的数据写入管理程序接收用户提交的数据对象NDO写入请求; . 2.2控制节点的数据写入管理程序将数据对象NDO分割为k个原始数据块,并将每个原始数据块分割为f个原始数据子块,记这k个原始数据块为TD1~TDk,记原始数据块TDx分割的第I个原始数据子块为tdxy, l^x^k, l^y^f; .2.3控制节点的数据写入管理程序重新构建k个原始数据块,记这k个原始数据块为D1~Dk,Di包括f个原始数据子块,Di的第I个原始数据子块记为Clil, i = 1,2,…,k,I = .2.4控制节点的数据写入管理程序利用存储的编码系数对k个原始数据块即D1-Dk的原始数据子块进行编码计算,得到m个冗余数据块即C1~Cm的冗余数据子块,EDi的第I个原始数据子块为dil;记Cj的第I个冗余数据子块为Cjl, I≤i≤k, I≤j≤m, I≤I≤f,具体步骤如下:. 2.4.1初始化信息,具体包括: . 2.4.1.1令冗余数据块Cj的序号j = I ; . 2.4.1.2令冗余数据子块Cjl的序号1 = 1; . 2.4.1.3令原始数据块Di的序号i = I ; .2.4.2控制节点的数据写入管理程序进行编码计算,将编码系数Gm与原始数据子块CliI进行逐位相乘,即,tja = GuXdil,得到新数据子块tjn ; . 2.4.3如果i=l,令Cj1 = tjU,转第2.4.4步;否则,将tjn与Cjl进行逐位相加,即,Cjl=Cj^tjil,转第 2.4.4 步; .2.4.4更新原始数据块Di的序号,i = i+1 ;.2.4.5 如果 i >k,则令 i = I, I = 1+1 ;
.2.4.6 如果 I > f,则令 l = l,j = j+1 ; .2.4.7如果j > m,则转第2.5步;否则,转第2.4.2步; .2.5控制节点的数据写入管理程序将D1~Dk和C1~Cm分别写入不同的存储节点,写入存储节点的数据对象记为DO ; 第三步,控制节点执行数据修复程序,接收用户提交的数据对象DO的失效数据子块CliI修复请求;从数据对象DO的k+m-1个可用数据块中任意选择k个可用数据块,采用存储节点数组SNArray存储这k个可用数据块所在的存储节点,SNArray [j]表示第j个可用数据块所在的存储节点,k ;向k个可用数据块所在的存储节点发送可用数据子块读取请求、可用数据块编号和待修复的失效数据子块序号I ; 第四步,k个可用数据块所在的存储节点即SNArray[l]~SNArray[k]同时执行数据读取程序,接收来自控制节点的可用数据子块读取请求、可用数据块编号和待修复的失效数据子块序号I ;根据可用数据块编号获取本地存储的可用数据块,记为;根据待修复的失效数据子块序号I读取可用数据块&中的数据子块A1,将可用数据子块A1发送给控制节点; 第五步,控制节点执行数据修复程序,接收来自SNArray[l]~SNArray[k]的可用数据子块eu~ekl,利用存储的解码系数Hil~Hik进行解码计算,得到修复成功的数据子块(Iil,并向用户发送数据子块Clil,具体步骤如下: .5.1初始化信息,令存储节点数组的节点序号j = I ; .5.2控制节点的数据修复程序接收来自存储节点SNArray[j]的可用数据子块; .5.3控制节点的数据修复程序进行解码计算,将解码系数Hu与可用数据子块%进行逐位相乘,即,Sijl = Hij Xejl,得到新数据子块; .5.4如果j=l,那么,令(Iil = Sijl,转第5.5步;否贝丨』,将Sijl与(Iil进行逐位相加,即,(Iil=(^+Sijl,转第 5.5 步; . 5.5更新存储节点数组的节点序号,j = j+1 ; . 5.6如果j > k,转第5.7步;否则,转第5.2步; .5.7控制节点的数据修复程序向用户发送修复的数据子块Clilt5
2.如权利要求1所述的一种基于改进型纠删码的失效数据修复方法,其特征在于所述.2.3步中控制节点的数据写入管理程序重新构建k个原始数据块的具体步骤是: . 2.3.1初始化信息,具体包括: . 2.3.1.1令数据对象NDO的原始数据块TDx的序号x = I ; .2.3.1.2令数据对象NDO的原始数据块TDx的原始数据子块tdxy的序号y = I ; .2.3.1.3令重新构建的原始数据块Di的序号i = I ; . 2.3.1.4令重新构建的原始数据块Di的原始数据子块Clil的序号1 = 1; .2.3.2将原始数据子块tdxy分配给Di,具体包括:
.2.3.2.1 令(Iil = tdxy ;
.2.3.2.2 如果 I = 1,则 Di = {(W,转第 2.3.3 步;否则,Di = Di U {dj,转第 2.3.3步 .2.3.3更新原始数据块序号和原始数据子块序号,具体包括:.2.3.3.1更新tdxy的序号,即令y = y+1 ;
.2.3.3.2 如果 y > f,则令 y = I, x = x+1 ; .2.3.3.3更新Di的序号,即令i = i+1 ;
.2.3.3.4 如果 i > k,则令 i = 1, 1 = 1+1 ; .2.3.4如果X > k,则k个原始数据块构建结束;否则,转第2.3.2步。
3.如权利要求1所述的一种基于改进型纠删码的失效数据修复方法,其特征在于所述.2.5步数据写入管理程序将D1~Dk和C1~Cm分别写入不同的存储节点的具体步骤是:. .2.5.1初始化信息,具体包括: .2.5.1.1分布存储系统的N个存储节点构成集合SNSet ; .2.5.1.2令原始数据块Dx的序号x=l; .2.5.1.3令冗余数据块Cy的序号y = 1 ; .2.5.2控制节点的数据写入管理程序从SNSet中任意选择一个存储节点SN,控制节点的数据写入管理程序向存储节点SN发送Dx的写入请求,将存储节点SN从SNSet中删除,即,SNSet = SNSet-{SN}; .2.5.3存储节点SN的数据写入程序接收来自控制节点的Dx写入请求,将Dx写入本地磁盘; .2.5.4更新Dx的序号,X = x+1 ; .2.5.5如果X > k,则转第2.5.6步;否则,转到第2.5.2步; . 2.5.6控制节点的数据写入管理程序从SNSet中任意选择一个存储节点SN,控制节点的数据写入管理程序向存储节点SN发送Cy的写入请求,将存储节点SN从SNSet中删除,即,SNSet = SNSet-{SN}; .2.5.7存储节点SN的数据写入程序接收来自控制节点的Cy写入请求,将Cy写入本地磁盘; .2.5.8更新Cy的序号,y = y+1 ; .2.5.9如果y > m,则转第2.5.10步;否则,转第2.5.6步; .2.5.10将写入存储节点的数据对象记为DO。
【文档编号】G06F3/06GK103729151SQ201410019879
【公开日】2014年4月16日 申请日期:2014年1月16日 优先权日:2014年1月16日
【发明者】王意洁, 孙伟东, 裴晓强, 许方亮, 符永铨, 程力, 李小勇, 马行空, 王媛, 赵越, 林轩, 熊泽宇 申请人:中国人民解放军国防科学技术大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1