基于chunk块版本号的分布式块存储系统数据恢复判定方法与流程

文档序号:11524297阅读:306来源:国知局

本发明涉及分布式块存储系统领域,具体涉及一种基于chunk块版本号的分布式块存储系统数据恢复判定方法。



背景技术:

分布式存储系统是将数据分散存储在多台独立的设备上。分布式存储系统在数据组织处理上有两种模式:块级和文件级,即分布式块存储和分布式文件系统。分布式文件系统,例如pvfs、lustre、ceph、ppfs,一般多个终端用户共同使用单个文件命名空间,这种系统往往比较复杂,并且必须支持所有在分布式环境中的文件系统的相关方案。分布式块存储系统,譬如:petal、sheepdog、parallax、blast等,根据分布式环境的特点,利用多点资源,为用户提供基本的块存储服务,具有良好的可靠性、性能并支持弹性扩展。

对于分布式块存储系统,su即storeunit,系统级存储单元;在su中,将其划分成多个大小相等的chunk块;在每个chunk中,又会将其划分为多个大小相等的blk;本质上来讲,这三者为不同粒度的存储单元。现有的su宕机后又重新上线,采用现有方法则需要对整个su的数据进行恢复,当su的数据量大时,其数据恢复量也大,十分耗时。



技术实现要素:

本发明为了解决上述技术问题提供一种基于chunk块版本号的分布式块存储系统数据恢复判定方法,以chunk块版本号为主要特征来判定数据是否需要恢复,减少传统分布式块文件系统恢复数据时的数据量。

本发明通过下述技术方案实现:

基于chunk块版本号的分布式块存储系统数据恢复判定方法,分布式块存储系统具有多个编码组,每个编码组中有多个su,每个su的chunk块都有一个版本号,包括,

chunk块版本号命名方法:根据对卷的操作、对chunk块的第一个blk块和最后一个blk块的写入操作对chunk块版本号命名;

异常判断:一台su宕机后又重新上线,且su能够获取该su中每个chunk块隶属于的编码组,将该su上每个chunk块与其所在编码组的chunk块进行版本号的比较以对出现数据异常的chunk块的进行判断;

数据恢复:对出现数据异常chunk块数据进行恢复。

本方法的原理基于流式数据的读写特性,同一个编码组group中所有的chunk块都同时更新,其版本号在正常情况下保持一致。chunk块的版本号在不断的改变过程中,即可根据chunk块的版本号对系统异常进行判断。通过上述原理即可对异常进行判断,即当同一个编码组中的chunk块版本号不一致即可判定异常,当异常出现时,仅对出现异常的chunk块数据进行恢复即可。每个su上有多个chunk块,其数据量大,采用现有对整个su的数据进行恢复的方式,其数据恢复量大,而本方案将恢复量从整个su降至单个或几个chunk块,恢复的数据量大大减小。

作为优选,所述异常判断的方法具体为:

若chunk块为该编码组的第一个单元,则将其与所在编码组的第二个单元上的相应chunk块进行版本号的比较;

若chunk块不是该编码组的第一个单元,则将其与所在编码组的前一个单元所对应的chunk块进行版本号的比较。采用该异常判定方法,其可有效的提高其异常判定的可靠性。

作为优选,所述异常判断的方法具体为:若同一编码组的某一chunk块的版本号大于另一chunk块的版本号,则说明版本号出现不一致问题,系统出现异常,需对另一版本号较小chunk块对应的su上的数据进行恢复;若同一编码组的某一chunk块的版本号小于另一chunk块的版本号,则需对该chunk块对应的su上的数据进行恢复。

作为优选,所述chunk块版本号命名方法具体为:

在创建、删除卷时,对该编码组的所有chunk块的版本号进行重置;

在扩展卷时,该卷中原有的chunk块版本号不变,对新分配的chunk块版本号进行重置;

在对chunk块的第一个blk块或最后一个blk块进行写入操作时,对该chunk块的版本号进行递增操作。

进一步的,所述重置均为置0,所述递增操作的递增量为1。

本发明与现有技术相比,具有如下的优点和有益效果:

本发明通过chunk块的版本号来判定数据是否需要恢复,减少传统分布式块文件系统恢复数据时的数据量。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚明白,下面结合实施例,对本发明作进一步的详细说明,本发明的示意性实施方式及其说明仅用于解释本发明,并不作为对本发明的限定。

实施例1

分布式块存储系统具有多个编码组,本方法以编码组为单位,每个编码组中有多个su,每个su的chunk块都有一个版本号ver_num,记录这个chunk块被整块覆盖写的次数,这是实现本方法的前置条件,具体的基于chunk块版本号的分布式块存储系统数据恢复判定方法包括以下步骤。

chunk块版本号命名方法:根据对卷的操作、对chunk块的第一个blk块和最后一个blk块的写入操作对chunk块版本号命名,具体的:

在创建、删除卷时,对该编码组的所有chunk块的版本号进行重置0;

在扩展卷时,该卷中原有的chunk块版本号不变,对新分配的chunk块版本号进行重置0;

在对chunk块的第一个blk块或最后一个blk块进行写入操作时,对该chunk块的版本号进行递增1操作。

由于流式数据的读写特性,同一个编码组group中所有的chunk块都同时更新,其版本号在正常情况下保持一致。chunk块的版本号在不断的改变过程中,即可根据chunk块的版本号对系统异常进行判断。异常判断的方法为当同一个编码组中的chunk块版本号不一致,判定系统出现异常。

当某一编码组出现异常,则需确定该编码组中出现错误的su,以对该su对应所属该编码组的chunk块上的数据进行恢复。su能够获取该su中每个chunk块隶属于哪个编码组,当一台发生故障的su宕机后又重新上线则进行异常判断步骤,针对出现异常的编码组,对各chunk块版本号大小进行比较,判断需要恢复数据的相应su的chunk块。

异常判断可采用下列方法:若同一编码组的某一chunk块的版本号大于另一chunk块的版本号,则需对另一chunk块对应的su上的数据进行恢复;若同一编码组的某一chunk块的版本号小于另一chunk块的版本号,则需对该chunk块对应的su上的数据进行恢复。比如su1和su2同在一个编码组中,su1上的chunk块的版本号为ver1,su2上的chunk块的版本号为ver2,其数据恢复判定过程具体为:若ver1>ver2,说明su1上的chunk块数据已被覆盖写,但su2的chunk块数据没有更新,存在不一致,需要对su2上的数据进行恢复;若ver1=ver2,说明两个chunk块同步更新,属于正常情况;若ver1<ver2,说明su2上的chunk块数据已被覆盖写,但su1的chunk块数据没有更新,存在不一致,需要对su1上的数据进行恢复。

上述的的异常判定方法中版本号的比较属于随机比较,其可能存在可靠性不强的问题,为了提高其判定的可靠性,可采用下述实施方式。

具体的,su上每个chunk块与其所在编码组的chunk块进行版本号的比较,若chunk块为该编码组的第一个单元,则将其与所在编码组的第二个单元上的相应chunk块进行版本好的比较;若chunk块不是该编码组的第一个单元,则将其与所在编码组的前一个单元所对应的chunk块进行版本号的比较。举例说明,假设su2上的chunk2和su1上的chunk1、su3上的chunk3、su4上的chunk4属于同一编码组a,su2上的chunk1和su3上的chunk2、su4上的chunk3、su5上的chunk5属于同一编码组b。当su2发生故障又重新上线后,则将su2上的chunk2与其所在的同一编码组的前一单元su1上的chunk1的版本号进行比较,若二者版本号不一致,su2上的chunk2的版本号一定小于等于su1上chunk1的版本号,则su2上chunk2的数据需要恢复;在编码组b中,su2为第一个单元,则将su2上的chunk1与同一编码组的第二个单元su3的chunk2的版本号进行比较,若二者版本号不一致,则su2上chunk1的数据需要恢复。异常判断的步骤从理论上来讲,可以采用随机方式同一编码组的其他单元进行比较。但是由于是顺序读写的特性,与前一单元进行比较更为保险可靠。原因如下:由于是顺序读写,在同一编码组中,当当前su上的数据出现异常时,其后继单元上的数据很有可能都会出现异常,在这种情况下,与后面单元进行比较所得结果是无效的。所以与同一编码组的前一单元进行比较,更为可靠,这也是采用该比较方法的优势所在。

采用本方法可有效的减少存储系统进行数据恢复时的数据量。以每台su配备了40个chunk块,每个chunk块大小为100g为例,一台su在一个编码组中拥有一个chunk块,不同的su可以隶属于不同的编码组。当系统发生异常时,若采用本发明进行数据恢复,只需恢复故障su上版本号不一致的chunk块中的数据,而不必将整台su的数据全部恢复,这就将需要恢复的数据量由整台su降低到只需恢复个别chunk块的数量级,效率可观。

以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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