具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一:
请参阅图1,图1为本发明实施例一提供的一种冗余保护方法的流程图。如图1所示,该方法可以包括:
101:将至少两个存储节点的磁盘进行分组,获得至少一个磁盘组;
102:根据每一个磁盘组所包含的磁盘数,从预设的磁盘数与RAID类型的对应关系中选取相应的RAID类型;
103:利用所选取的RAID类型计算出该磁盘组的每个磁盘的校验块,并将校验块分别存储到该磁盘组的每个磁盘中。
举例来说,上述101将至少两个存储节点的磁盘进行分组,获得若干个磁盘组可以采用但不限于如下方法:
请一并参阅图2,图2为本发明实施例一提供的一种获得磁盘组的方法流程图。如图2所示,该方法可以包括:
201:判断至少两个存储节点的磁盘总数是否小于或等于预设阈值,如果是,则执行202;如果否,则执行203;
其中,至少两个存储节点的磁盘总数是指至少两个存储节点中每一个存储节点所包含的磁盘数的总和。
202:将至少两个存储节点的磁盘划分成一个磁盘组;
其中,上述202中的磁盘组所包含的磁盘数等于上述至少两个存储节点的磁盘总数。
203:将至少两个存储节点的磁盘划分成分组值个磁盘组。
其中,分组值为上述至少两个存储节点的磁盘总数除以上述预设阈值的一半所获得的商的整数部分;
在上述203划分的分组值个磁盘组中,有一个磁盘组包含的磁盘数是通过计算至少两个存储节点的磁盘总数与预设阈值的一半的模,再将计算得到 的模与预设阈值的一半相加而获得的;其余的磁盘组中每个磁盘组包含的磁盘数为预设阈值的一半。
举例来说,上述102中的RAID类型为里德-所罗门编码(RS,Reed-Solomon)算法所提供的RAID基本类型,如RAID5+2、RAID11+4、RAID25+6、RAID55+8、RAID127+10、RAID223+32等等;
或者,上述102中的RAID类型可以是通过对Reed-Solomon算法所提供的RAID基本类型进行改进而得到的,例如,可以对Reed-Solomon算法所提供的RAID25+6类型进行改进来实现RAID12+6类型。具体实现方法可以为:采用12个数据块+13个特定的已知数据块(内容全为1或0)计算出6个校验块,由于13个特定的已知数据块的内容是固定不变的,不需要存储,所以只需要将12个数据块和6个校验块存储到磁盘上,从而实现RAID12+6类型。
举例来说,上述103中利用所选取的RAID类型对磁盘组进行冗余保护后,如果磁盘中的数据块发生丢失或者损坏时,可以通过该磁盘存储的校验块将发生丢失或者损坏的数据块进行恢复,从而可以保证该磁盘中数据的完整性和可靠性。
上述对本发明实施例一所提供的一种冗余保护方法进行了介绍,本发明实施例可以根据每一个磁盘组中所包含的磁盘数的不同,从预设的磁盘数与RAID类型的对应关系中为每一个磁盘组选取相应的RAID类型进行冗余保护,这样可以同时支持包含不同磁盘数的磁盘组的冗余保护。
实施例二:
请参阅图3,图3为本发明实施例二提供的一种冗余保护方法的流程图。本实施例假设存储集群当前包含6个存储节点,分别是存储节点0~存储节点5;其中,每一个存储节点包含了编号分别为N0,N1,N2,N3,N4,N5的6个磁盘;预设阈值为12;本发明实施例提供的冗余备份方法可以包括:
301:判断存储节点0~存储节点5的磁盘总数36大于预设阈值12,将36个磁盘划分成6个磁盘组;
其中,6个磁盘组=磁盘总数36/(预设阈值12/2)。
举例来说,在划分的6个磁盘组中,可以由存储节点0~存储节点5的第N0个磁盘构成第1个磁盘组所包含的6个磁盘;由存储节点0~存储节点5的第N1个磁盘构成第2个磁盘组所包含的6个磁盘;由存储节点0~存储节点5的第N2个磁盘构成第3个磁盘组所包含的6个磁盘;......;以及,由存储节点0~存储节点5的第N5个磁盘构成第6个磁盘组所包含的6个磁盘。
302:根据每一个磁盘组所包含的磁盘数为6,从预设的磁盘数与RAID类型的对应关系中选取相应的RAID类型;
下面的表1表示的是预设的磁盘数与RAID类型的对应关系。其中,表1中的RAID类型是通过对Reed-Solomon算法所提供的RAID基本类型进行改进而得到的,具体的实现方法在上述实施例一中已经介绍,本实施例不再复述。
磁盘数 |
RAID类型 |
每磁盘一次 读取数据块
个数 |
总数据 块个数 |
校验 块个 数 |
每磁盘 存储校 验块个 数 |
可靠性 |
有效的 存储空
间比 |
1 |
RAID1+0 |
1 |
1 |
0 |
0 |
无冗余 |
1 |
2 |
RAID2+2 |
1 |
2 |
2 |
1 |
1 |
1/2 |
3 |
RAID6+3 |
2 |
6 |
3 |
1 |
1 |
2/3 |
4 |
RAID8+4 |
2 |
8 |
4 |
1 |
1 |
2/3 |
5 |
RAID10+5 |
2 |
10 |
5 |
1 |
1 |
2/3 |
6 |
RAID12+6 |
2 |
12 |
6 |
1 |
2 |
2/3 |
7 |
RAID14+7 |
2 |
14 |
7 |
1 |
2 |
2/3 |
8 |
RAID16+8 |
2 |
16 |
8 |
1 |
2 |
2/3 |
9 |
RAID18+9 |
2 |
18 |
9 |
1 |
3 |
2/3 |
10 |
RAID20+10 |
2 |
20 |
10 |
1 |
3 |
2/3 |
11 |
RAID22+11 |
2 |
22 |
11 |
1 |
3 |
2/3 |
12 |
RAID24+12 |
2 |
24 |
12 |
1 |
4 |
2/3 |
表1
上述表1中,可靠性指的是允许出现故障的磁盘数;有效的存储空间比指的是有效存储空间占总磁盘容量的比例。可见,RAID1+0类型的有效的存 储空间比最大,但可靠性最差。
由于上述划分的6个磁盘组中每个磁盘组的磁盘数都为6,因此,根据每个磁盘组的磁盘数可以从上述表1中选取相应的RAID12+6类型。
303:利用所选取的RAID12+6类型计算出每个磁盘组的每个磁盘的校验块,并将每个磁盘的校验块分别存储到每个磁盘组的每个磁盘中。
举例来说,可以根据选取的RAID12+6类型,对每个磁盘组进行冗余保护,实现过程可以如下:
1)从每个磁盘组包含的6个磁盘的数据块存储区,分别读取2个数据块,总共有6×2=12个数据块;
2)将读取的12个数据块,通过选取的RAID12+6类型计算出6个校验块;
3)将计算出的6个校验块分别存储到对应磁盘组包含的6个磁盘的校验块存储区。
这样,每个磁盘都存储了2个数据块和1个校验块,存储集群允许有两个磁盘(6个块)同时出现损坏时,仍然可以从剩下的12个块中恢复出所有数据块。
本实施例仅为了便于介绍,以存储集群当前包含6个存储节点、每一个存储节点都包含了6个磁盘、预设阈值为12的具体实施例来介绍本发明实施例提供的冗余备份方法,本领域技术人员可以理解,存储集群还可以包含其他数量的存储节点,每一个存储节点也可以包含其他数量的磁盘,预设阈值还可以取其他数值,这样,最终可以选取其他的相应的RAID类型进行磁盘组的冗余保护,本实施例在此不做限定。
本发明实施例可以根据每一个磁盘组中所包含的磁盘数,从预设的磁盘数与RAID类型的对应关系中为每一个磁盘组选取相应的RAID类型进行冗余保护,这样可以同时支持包含不同磁盘数的磁盘组的冗余保护。
实施例三:
请参阅图4,图4为本发明实施例三提供的一种冗余保护装置的结构图。如图4所示,该装置可以包括:
分组模块401,用于将至少两个存储节点的磁盘进行分组,以获得至少 一个磁盘组;
举例来说,分组模块401可以判断至少两个存储节点的磁盘总数是否小于或等于预设阈值,如果是,则将至少两个存储节点的磁盘划分成一个包含至少两个存储节点的磁盘总数的磁盘组;反之,分组模块401可以在判断至少两个存储节点的磁盘总数大于预设阈值时,将至少两个存储节点的磁盘划分成分组值个磁盘组;
其中,该分组值为至少两个存储节点的磁盘总数除以预设阈值的一半所获得的商的整数部分;在分组值个磁盘组中,有一个磁盘组包含的磁盘数是通过计算至少两个存储节点的磁盘总数与预设阈值的一半的模,再将计算得到的模与预设阈值的一半相加而获得的;其余的磁盘组中每个磁盘组包含的磁盘数为预设阈值的一半。
选取模块402,用于根据每个磁盘组包含的磁盘数,从预设的磁盘数与RAID类型的对应关系中选取相应的RAID类型;
举例来说,选取模块402获取的RAID类型可以是Reed-Solomon算法所提供的RAID基本类型,如RAID5+2、RAID11+4、RAID25+6、RAID55+8、RAID127+10、RAID223+32等等;
或者,选取模块402获取的RAID类型可以是通过对Reed-Solomon算法所提供的RAID基本类型进行改进而得到的,例如,选取模块402获取的RAID类型可以是RAID12+6类型;其中,RAID12+6类型是由Reed-Solomon算法所提供的RAID25+6类型进行改进而得到的。
处理模块403,用于根据选取的RAID类型计算出相应磁盘组中每个磁盘的校验块,并将校验块分别存储到相应磁盘组的每个磁盘中。
这样,当有磁盘中的数据块发生丢失或者损坏时,可以通过该磁盘存储的校验块将发生丢失或者损坏的数据块进行恢复,从而可以保证该磁盘中数据的完整性和可靠性。
请一并参阅图5,图5为本发明实施例三提供的一种分组模块的结构图,如图5所示,分组模块401可以包括:
判断子模块4011,用于判断至少两个存储节点的磁盘总数是否小于或等 于预设阈值;
第一划分子模块4012,用于当判断子模块4011的判断结果为是时,将至少两个存储节点的磁盘划分成一个包含至少两个存储节点的磁盘总数的磁盘组;
第二划分子模块4013,用于当判断子模块的判断结果为否时,将至少两个存储节点的磁盘划分成分组值个磁盘组;其中,该分组值为至少两个存储节点的磁盘总数除以预设阈值的一半所获得的商的整数部分;
在划分的分组值个磁盘组中,有一个磁盘组包含的磁盘数是通过计算至少两个存储节点的磁盘总数与预设阈值的一半的模,再将计算得到的模与预设阈值的一半相加而获得的;其余的磁盘组中每个磁盘组包含的磁盘数为预设阈值的一半。
举例来说,选取模块402选取的RAID类型是由Reed-Solomon算法提供的RAID基本类型改进得到的;
或者,选取模块402选取的RAID类型为Reed-Solomon算法提供的RAID基本类型。
请一并参阅图6,图6为本发明实施例三提供的一种处理模块的结构图,如图6所示,处理模块403可以包括:
计算子模块4031,用于利用所选取的RAID类型计算出相应磁盘组的每个磁盘的校验块;
存储子模块4032,用于将相应磁盘组的每个磁盘的校验块分别存储到相应磁盘组的每个磁盘中。
上述对本发明实施例三所提供的一种冗余保护装置进行了介绍,本发明实施例中,由分组模块401将至少两个存储节点的磁盘进行分组,获得若干个磁盘组,选取模块402再根据每一个磁盘组中所包含的磁盘数的不同,从预设的磁盘数与RAID类型的对应关系中为每一个磁盘组选取相应的RAID类型进行冗余保护,这样可以同时支持包含不同磁盘数的磁盘组的冗余保护。
实施例四:
请参阅图7,图7为本发明实施例四提供的一种存储集群系统的结构图。 如图7所示,该存储集群系统可以包括:
冗余保护装置701和至少两个存储节点702;
其中,冗余保护装置701,用于将至少两个存储节点702的磁盘进行分组,获得若干个磁盘组;根据磁盘组包含的磁盘数,从预设的磁盘数与RAID类型的对应关系中选取相应的RAID类型;根据选取的RAID类型计算出相应磁盘组中每个磁盘的校验块,并将每个磁盘的校验块分别存储到相应磁盘组的每个磁盘中;
至少两个存储节点702,用于存储数据,其中,每一个存储节点702包含若干个磁盘。
举例来说,冗余保护装置701可以判断至少两个存储节点702的磁盘总数是否小于或等于预设阈值,如果是,则将至少两个存储节点702的磁盘划分成一个包含至少两个存储节点702的磁盘总数的磁盘组;
反之,冗余保护装置701可以在判断至少两个存储节点702的磁盘总数大于预设阈值时,将至少两个存储节点702的磁盘划分成分组值个磁盘组;其中,该分组值为至少两个存储节点的磁盘总数除以预设阈值的一半所获得的商的整数部分;
在划分的分组值个磁盘组中,有一个磁盘组包含的磁盘数是通过计算至少两个存储节点的磁盘总数与预设阈值的一半的模,再将计算得到的模与预设阈值的一半相加而获得的;其余的磁盘组中每个磁盘组包含的磁盘数为预设阈值的一半。
冗余保护装置701可以根据磁盘组包含的磁盘数,从预设的磁盘数与RAID类型的对应关系中选取相应的RAID类型;利用所选取的RAID类型计算出相应磁盘组的每个磁盘的校验块,并将每个磁盘的校验块分别存储到相应磁盘组的每个磁盘中;这样,当有磁盘中的数据块发生丢失或者损坏时,可以通过该磁盘存储的校验块将发生丢失或者损坏的数据块进行恢复,从而可以保证该磁盘中数据的完整性和可靠性。
举例来说,冗余保护装置701获取的RAID类型可以是Reed-Solomon算法所提供的RAID基本类型,如RAID5+2、RAID11+4、RAID25+6、 RAID55+8、RAID127+10、RAID223+32等等;
或者,冗余保护装置701获取的RAID类型可以是通过对Reed-Solomon算法所提供的RAID基本类型进行改进而得到的,例如,冗余保护装置701获取的RAID类型可以是RAID12+6类型;其中,RAID12+6类型是由Reed-Solomon算法所提供的RAID25+6类型进行改进而得到的。
上述对本发明实施例四所提供的一种存储集群系统进行了介绍,本发明实施例可以根据每一个磁盘组中所包含的磁盘数的不同,从预设的磁盘数与RAID类型的对应关系中为每一个磁盘组选取相应的RAID类型进行冗余保护,这样可以同时支持包含不同磁盘数的磁盘组的冗余保护。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:只读存储器(ROM)、随机存取器(RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上对本发明实施例所提供的一种冗余保护方法、装置及系统进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。