组建分块组CKG的方法、装置、虚拟存储池及存储介质与流程

文档序号:17089167发布日期:2019-03-13 23:14阅读:570来源:国知局
组建分块组CKG的方法、装置、虚拟存储池及存储介质与流程

本发明涉及存储领域,尤其是涉及组建分块组ckg的方法、装置、虚拟存储池及存储介质。



背景技术:

随着存储技术的发展,磁盘块虚拟化以及分布式存储已成为当下热门的两项存储技术。

磁盘块虚拟化是将物理磁盘虚拟化为虚拟存储块来管理存储空间,以解决传统独立磁盘冗余阵列(redundantarraysofindependentdrives,raid)在单盘故障后,重构期间存在丢失数据的风险。但磁盘虚拟化技术却只能应用于单节点环境中,其采用的冗余策略是在同一节点内按虚拟分块进行冗余,当该节点发生故障后,由于该节点没有进行备份,所以无法为该节点恢复数据。

而现有技术中,分布式存储系统所采用的冗余策略是按节点进行冗余,所以可以较好的解决节点故障后无法恢复节点数据的问题,并且可以将计算、存储资源在集群中池化,从而达到负载均衡的目标。但,由于分布式存储系统的节点是基于物理磁盘构成的,而磁盘块虚拟化技术中的节点是基于虚拟存储块构成的,从而造成这两种技术不能融合到一起被使用,进而不能有效的提高硬盘的利用率、可靠性等。

鉴于此,如何使用磁盘块虚拟化技术将物理磁盘进行虚拟化后组建为构成虚拟存储池的虚拟分块组(chunkgroup,ckg),使磁盘块虚拟化与分布式存储系统能够结合在一起,充分发挥出各自的优势,成为一个亟待解决的技术问题。



技术实现要素:

本发明提供一种组件分块组ckg的方法,用以解决现有技术中存在的硬盘利用率较低的技术问题。

第一方面,为解决上述技术问题,本发明实施例提供的一种组件分块组ckg的方法,该方法的技术方案如下:

将指定集群下的节点作为矩阵元素,并按各节点的编号依次划分为多个同阶矩阵,获得第一矩阵集;其中,所述同阶矩阵中一列的节点个数与组成所述指定集群的虚拟存储池中的每个ckg的元素个数相同,所述第一矩阵集中每个同阶矩阵中的节点编号都不同;

按行对所述第一矩阵集中的同阶矩阵进行循环交叉替换,使各同阶矩阵中的每行节点被依次替换为其它矩阵中的相应行节点,获得第二矩阵集;其中,所述第二矩阵集还包含所述第一矩阵集中的所有同阶矩阵;

在获得所述第二矩阵集后,按照从所述第二矩阵集的每个矩阵中选取构成与所述每个矩阵对应的ckg的每个元素所对应的节点;或,在完成一次循环交叉替换后,按照从循环交叉替换后获得的每个矩阵中选取构成与所述每个矩阵对应的ckg的元素所对应的节点;其中,所述一次循环交叉替换为完成一次矩阵的行节点的替换;

按照第二算法从所述每个ckg的每个元素所对应的节点中,选取物理硬盘中的一个空闲虚拟分块,组建成所述虚拟存储池中的所述每个ckg。

通过先将指定集群下的节点作为矩阵元素,并按各节点的编号依次划分为多个同阶矩阵,获得第一矩阵集;再按行对第一矩阵集中的同阶矩阵进行循环交叉替换,使各同阶矩阵中的每行节点被依次替换为其它矩阵中的相应行节点,获得第二矩阵集;在获得第二矩阵集后,从第二矩阵集的每个矩阵中选取构成与每个矩阵对应的ckg的每个元素所对应的节点;或,在完成一次循环交叉替换后,从循环交叉替换后获得的每个矩阵中选取构成与每个矩阵对应的ckg的元素所对应的节点;最后,从每个ckg的每个元素所对应的节点中,选取物理硬盘中的一个空闲虚拟分块,组建成虚拟存储池中的每个ckg;其中,同阶矩阵中一列的节点个数与组成指定集群的虚拟存储池中的每个ckg的元素个数相同,且第一矩阵集中每个同阶矩阵中的节点编号都不同;第二矩阵集还包含第一矩阵集中的所有同阶矩阵;一次循环交叉替换为完成一次矩阵的行节点的替换。从而能够让同一节点上的不同虚拟分块被冗余到不同节点上,在节点出现故障时通过从其它节点恢复数据,从而不需要对相同数据进行重复备份,进而能有效的提高硬盘的利用率即可靠性。

可选的,获得第一矩阵集之前,还包括:

将所述指定集群下的每个节点下的每个物理硬盘按指定容量虚拟化为多个虚拟分块;其中,所述每个节点具有相同数量和容量的物理硬盘。

通过将指定集群下的每个节点下的每个物理硬盘按指定容量虚拟化为多个虚拟分块,可以让ckg的组建更加均衡、离散,进而能提高硬盘的并发度以及ckg的可靠性。

可选的,按行对所述第一矩阵集中的同阶矩阵进行循环交叉替换,使各同阶矩阵中的每行节点被依次替换为其它矩阵中的相应行节点,获得第二矩阵集,包括:

从所述第一矩阵集的各同阶矩阵的第一行开始,用后一同阶矩阵的相应行节点进行替换,直到所述第一矩阵集的第一个同阶矩阵中的最后一行节点被最后一个同阶矩阵的最后一行节点替换为止,获得新的矩阵集;

将所述第一矩阵集与所述新的矩阵集按获得的先后顺序,组成所述第二矩阵集。

可选的,从每个矩阵中选取构成ckg的每个元素所对应的节点,包括:

按第一公式,确定所述ckg中每个元素在当前矩阵中的坐标位置,并基于所述坐标位置获得所述每个元素所对应的节点;所述当前矩阵是为当前组建ckg的元素提供节点选取的矩阵;

其中,所述第一公式为:

ckp=(p,(i%n+(i/n)×p)%n)

其中,ckp为所述ckg中的第p个元素,i为对所述当前矩阵进行ckg分配的次数,n为所述同阶矩阵中的总列数,p为不大于所述ckg的元数总个数的自然数,/代表取商,%代表取余。

可选的,按照第二算法从所述每个ckg的每个元素所对应的节点中,选取物理硬盘中的一个空闲虚拟分块,组建成所述每个ckg,包括:

按照第二算法从所述每个ckg的每个元素对应的节点中,为所述每个元素选取对应的物理硬盘;

从所述每个元素对应的物理硬盘中,选取一个空闲的虚拟分块作为所述每个元素对应的虚拟分块。

可选的,按照第二算法从所述每个ckg的每个元素对应的节点中,为所述每个元素选取对应的物理硬盘,包括:

基于随机生成的第一随机数及所述每个元素对应的节点中总的物理硬盘数,按照公式start_disk=rand1%n计算起始硬盘的编号;其中,start_disk为所述起始硬盘的编号,rand1为所述第一随机数,n为所述总的物理硬盘数;

基于随机生成的第二随机数及所述物理硬盘数,按照公式step=rand2%n确定选取的物理硬盘相对于所述起始硬盘的步长;其中,step为所述步长,rand2为所述第二随机数,n为所述总的物理硬盘数;

基于所述起始硬盘的编号和所述步长,按照公式disk_id=(start_disk+step×t)%n计算出所述选取的物理硬盘的编号;其中,disk_id为所述选取的物理硬盘的编号,t为所述每个元素对应的节点当前被选取虚拟分块的次数,n为所述总的物理硬盘数。

第二方面,本发明实施例提供了一种用于组件分块组ckg的装置,该装置包括:

矩阵划分单元,用于将指定集群下的节点作为矩阵元素,并按各节点的编号依次划分为多个同阶矩阵,获得第一矩阵集;其中,所述同阶矩阵中一列的节点个数与组成所述指定集群的虚拟存储池中的每个ckg的元素个数相同,所述第一矩阵集中每个同阶矩阵中的节点编号都不同;

获得单元,用于按行对所述第一矩阵集中的同阶矩阵进行循环交叉替换,使各同阶矩阵中的每行节点被依次替换为其它矩阵中的相应行节点,获得第二矩阵集;其中,所述第二矩阵集还包含所述第一矩阵集中的所有同阶矩阵;

节点选取单元,用于在获得所述第二矩阵集后,从每个矩阵中选取构成与所述每个矩阵对应的ckg的每个元素所对应的节点;或,在完成一次循环交叉替换后,从循环交叉替换后获得的每个矩阵中选取构成与所述每个矩阵对应的ckg的元素所在的节点;其中,所述一次循环交叉替换为完成一次矩阵的行节点的替换;

ckg组建单元,用于从所述每个ckg的每个元素所对应的节点中,选取物理硬盘中的一个空闲虚拟分块,组建成所述虚拟存储池中的所述每个ckg。

可选的,所述矩阵划分单元,还用于:

将指定集群下的每个节点下的每个物理硬盘按指定容量虚拟化为多个虚拟分块;其中,所述每个节点具有相同数量和容量的物理硬盘。

可选的,所述获得单元具体用于:

从所述第一矩阵集的各同阶矩阵的第一行开始,用后一同阶矩阵的相应行节点进行替换,直到所述第一矩阵集的第一个同阶矩阵中的最后一行节点被最后一个同阶矩阵的最后一行节点替换为止,获得新的矩阵集;

将所述第一矩阵集与所述新的矩阵集按获得的先后顺序,组成所述第二矩阵集。

可选的,所述节点选取单元具体用于:

按第一公式,确定所述ckg中每个元素在当前矩阵中的坐标位置,并基于所述坐标位置获得所述每个元素所对应的节点;所述当前矩阵是为当前组建ckg的元素提供节点选取的矩阵;

其中,所述第一公式为:

ckp=(p,(i%n+(i/n)×p)%n)

其中,ckp为所述ckg中的第p个元素,i为对所述当前矩阵进行ckg分配的次数,n为所述同阶矩阵中的总列数,p为不大于所述ckg的元数总个数的自然数。

可选的,所述ckg组建单元具有用于:

按照第二算法从所述每个ckg的每个元素对应的节点中,为所述每个元素选取对应的物理硬盘;

从所述每个元素对应的物理硬盘中,选取一个空闲的虚拟分块作为所述每个元素对应的虚拟分块。

可选的,所述ckg组建单元还有用于:

基于随机生成的第一随机数及所述每个元素对应的节点中总的物理硬盘数,按照公式start_disk=rand1%n计算起始硬盘的编号;其中,start_disk为所述起始硬盘的编号,rand1为所述第一随机数,n为所述总的物理硬盘数;

基于随机生成的第二随机数及所述物理硬盘数,按照公式step=rand2%n确定选取的物理硬盘相对于所述起始硬盘的步长;其中,step为所述步长,rand2为所述第二随机数,n为所述总的物理硬盘数;

基于所述起始硬盘的编号和所述步长,按照公式disk_id=(start_disk+step×t)%n计算出所述选取的物理硬盘的编号;其中,disk_id为所述选取的物理硬盘的编号,t为所述每个元素对应的节点当前被选取虚拟分块的次数,n为所述总的物理硬盘数。

第三方面,本发明实施例还提供一种虚拟存储池,所述虚拟存储池中的ckg是采用如第一方面中所述的ckg组成的。

第四方面,本发明实施例还提供一种集群,在为业务提供数据读写服务时,采用的是如第四方面所述的虚拟存储池进行所述数据读写服务。

第五方面,本发明实施例还提供一种用于组件分块组ckg的装置,包括:

至少一个处理器,以及

与所述至少一个处理器连接的存储器;

其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述至少一个处理器通过执行所述存储器存储的指令,执行如上述第一方面所述的方法。

第六方面,本发明实施例还提供一种计算机可读存储介质,包括:

所述计算机可读存储介质存储有计算机指令,当所述计算机指令在计算机上运行时,使得计算机执行如上述第一方面所述的方法。

通过本发明实施例的上述一个或多个实施例中的技术方案,本发明实施例至少具有如下技术效果:

在本发明提供的实施例中,通过先将指定集群下的节点作为矩阵元素,并按各节点的编号依次划分为多个同阶矩阵,获得第一矩阵集;再按行对第一矩阵集中的同阶矩阵进行循环交叉替换,使各同阶矩阵中的每行节点被依次替换为其它矩阵中的相应行节点,获得第二矩阵集;在获得第二矩阵集后,从第二矩阵集的每个矩阵中选取构成与每个矩阵对应的ckg的每个元素所对应的节点;或,在完成一次循环交叉替换后,从循环交叉替换后获得的每个矩阵中选取构成与每个矩阵对应的ckg的元素所对应的节点;最后,从每个ckg的每个元素所对应的节点中,选取物理硬盘中的一个空闲虚拟分块,组建成虚拟存储池中的每个ckg;其中,同阶矩阵中一列的节点个数与组成指定集群的虚拟存储池中的每个ckg的元素个数相同,且第一矩阵集中每个同阶矩阵中的节点编号都不同;第二矩阵集还包含第一矩阵集中的所有同阶矩阵;一次循环交叉替换为完成一次矩阵的行节点的替换。从而能够让同一节点上的不同虚拟分块被冗余到不同节点上,在节点出现故障时通过从其它节点恢复数据,从而不需要对相同数据进行重复备份,进而能有效的提高硬盘的利用率即可靠性。

附图说明

图1为本发明实施例提供的一种组件分块组ckg方法的流程图;

图2为本发明实施例提供的用raid2.0技术将指定集群下的硬盘虚拟化为虚拟化分块的示意图;

图3为本发明实施例提供的将指定集群下的节点划分为多个同阶矩阵的示意图;

图4为本发明实施例提供的对第一矩阵集进行交叉轮换替换得到第二矩阵集的示意图;

图5为本发明实施例提供的第二矩阵集中矩阵的坐标示意图;

图6为本发明实施例提供的一种组件分块组ckg装置的结构示意图。

具体实施方式

本发明实施列提供组建分块组ckg的方法、装置、虚拟存储池及存储介质,以解决现有技术中存在的硬盘利用率较低的技术问题。

本申请实施例中的技术方案为解决上述的技术问题,总体思路如下:

提供一种组建分块组ckg方法,该方法包括:将指定集群下的节点作为矩阵元素,并按各节点的编号依次划分为多个同阶矩阵,获得第一矩阵集;其中,同阶矩阵中一列的节点个数与组成所述指定集群的虚拟存储池中的每个ckg的元素个数相同,第一矩阵集中每个同阶矩阵中的节点编号都不同;按行对第一矩阵集中的同阶矩阵进行循环交叉替换,使各同阶矩阵中的每行节点被依次替换为其它矩阵中的相应行节点,获得第二矩阵集;其中,第二矩阵集还包含第一矩阵集中的所有同阶矩阵;在获得第二矩阵集后,从第二矩阵集的每个矩阵中选取构成与每个矩阵对应的ckg的每个元素所对应的节点;或,在完成一次循环交叉替换后,从循环交叉替换后获得的每个矩阵中选取构成与每个矩阵对应的ckg的元素所在的节点;其中,一次循环交叉替换为完成一次矩阵的行节点的替换;按照第二算法从每个ckg的每个元素所对应的节点中,选取物理硬盘中的一个空闲虚拟分块,组建成虚拟存储池中的每个ckg。

由于在上述方案中,通过先将指定集群下的节点作为矩阵元素,并按各节点的编号依次划分为多个同阶矩阵,获得第一矩阵集;再按行对第一矩阵集中的同阶矩阵进行循环交叉替换,使各同阶矩阵中的每行节点被依次替换为其它矩阵中的相应行节点,获得第二矩阵集;在获得第二矩阵集后,从每个矩阵中选取构成与所述每个矩阵对应的ckg的每个元素所对应的节点;或,在完成一次循环交叉替换后,从循环交叉替换后获得的每个矩阵中选取构成与所述每个矩阵对应的ckg的元素所对应的节点;最后,从每个ckg的每个元素所对应的节点中,选取物理硬盘中的一个空闲虚拟分块,组建成虚拟存储池中的每个ckg;其中,同阶矩阵中一列的节点个数与组成指定集群的虚拟存储池中的每个ckg的元素个数相同,且第一矩阵集中每个同阶矩阵中的节点编号都不同;第二矩阵集还包含第一矩阵集中的所有同阶矩阵;一次循环交叉替换为完成一次矩阵的行节点的替换。从而能够让同一节点上的不同虚拟分块被冗余到不同节点上,在节点出现故障时通过从其它节点恢复数据,从而不需要对相同数据进行重复备份,进而能有效的提高硬盘的利用率即可靠性。

为了更好的理解上述技术方案,下面通过附图以及具体实施例对本发明技术方案做详细的说明,应当理解本发明实施例以及实施例中的具体特征是对本发明技术方案的详细的说明,而不是对本发明技术方案的限定,在不冲突的情况下,本发明实施例以及实施例中的技术特征可以相互组合。

请参考图1,本发明实施例提供一种组建分块组的方法,该方法的处理过程如下。

步骤101:将指定集群下的节点作为矩阵元素,并按各节点的编号依次划分为多个同阶矩阵,获得第一矩阵集;其中,同阶矩阵中一列的节点个数与组成指定集群的虚拟存储池中的每个ckg的元素个数相同,第一矩阵集中每个同阶矩阵中的节点编号都不同。

指定集群可以是云数据中心中的一个集群,也可以是多个集群,其中,每个集群的节点数相同,且每个节点下的物理硬盘数相同,且每个物理硬盘的存储容量相同。

在获得第一矩阵集之前,还需要先将指定集群下的所有硬盘组成的硬盘域,用独立磁盘冗余数据组raid2.0技术,将指定集群下的每个节点下的每个物理硬盘按指定容量虚拟化为多个虚拟分块;其中,每个节点具有相同数量和容量的物理硬盘。

例如,请参见图2,指定集群包括集群1和集群2共2个集群,其中,每个集群下有2个节点(所有节点为节点0、节点1、节点2、节点3),每个节点下有2个硬盘(所有硬盘为硬盘0至硬盘7)。用独立磁盘冗余数据组raid2.0技术,将指定集群下每个节点下的每个硬盘按指定容量128mb(假设每个硬盘的总容量为256mb),共划分为16个虚拟分块(即chunk0-chunk15),并按集群、节点和硬盘顺序为所有的虚拟分块进行编号,如集群1下的节点0下的硬盘0被划分为虚拟分块0(即chunk0)和虚拟分块1(即chunk1),集群2下的节点2下的硬盘4被划分为chunk8和chunk9,每个虚拟分块的容量均为128mb。

需要理解的是,在本发明提供的实施例中,只是为了便于举例将硬盘的容量假设为128mb,而在实际应用中,硬盘的容量可能为ngb、ntb或更多,具体对硬盘的容量不做限定。

在将指定集群下的每个节点下的每个物理硬盘按指定容量虚拟化为多个虚拟分块后,若指定集群下不同集群下的节点的编号是非连续的,则还需要对指定集群下的所有节点按顺序进行编号。若指定集群只是一个集群,则不需重新对指定集群下的节点进行编号。

之后,便可执行步骤101。即将指定集群下的节点作为矩阵元素,并按各节点的编号依次划分为多个同阶矩阵,获得第一矩阵集。

其中,同阶矩阵是指行数和列数相等的矩阵。

例如,一个ckg中由2个元素组成,指定集群为2个集群,每个集群下有4个节点,每个节点下有2个硬盘,每个硬盘被划分为2个虚拟分块。则组成的第一矩阵集包括第一个同阶矩阵和第二个同阶矩阵,其中,第一个同阶矩阵中的矩阵元素包括节点0、节点1、节点2、节点3,第二个同阶矩阵中的矩阵元素包括节点4、节点5、节点6、节点7,如图3所示。

需要理解的是,若将指定集群中的节点划分为第一矩阵集后,若还有剩余的节点未能划分入第一矩阵集中,则剩余节点暂不参与当前轮次的分配,在下轮分配时域当前分配的节点作交换。

在将指定集群下的节点划分为具有多个同阶矩阵的第一矩阵集之后,便可执行步骤102。

步骤102:按行对第一矩阵集中的同阶矩阵进行循环交叉替换,使各同阶矩阵中的每行节点被依次替换为其它矩阵中的相应行节点,获得第二矩阵集;其中,第二矩阵集还包含第一矩阵集中的所有同阶矩阵。

具体的,可以通过以下方式获得第二矩阵集:

从第一矩阵集的各同阶矩阵的第一行开始,用后一同阶矩阵的相应行节点进行替换,直到第一矩阵集的第一个同阶矩阵中的最后一行节点被最后一个同阶矩阵的最后一行节点替换为止,获得新的矩阵集;其中,在替换的过程,最后一个同阶矩阵的后一个同阶矩阵为第一个同阶矩阵,新的矩阵集中的矩阵与第一矩阵集中的同阶矩阵不相同;

将第一矩阵集与新的矩阵集按获得的先后顺序,组成第二矩阵集。

例如,请参见图4,第一矩阵集为3个5×5的同阶矩阵,对第一矩阵集中矩阵的第一行进行交叉替换,即用第二个同阶矩阵的第一行的节点替换第一个同阶矩阵的第一行,用第三个同阶矩阵的第一行节点替换第二个同价矩阵的第一行,用第一个同阶矩阵的第一行节点替换第三个同阶矩阵的第一行节点,便完成了第一次交叉替换,得到第一轮(交叉循环替换)的第一次交叉替换后的3个矩阵;之后还可继续按上述方式对第一轮的第一次交叉替换后的3个矩阵进行交叉替换,得到第一轮的第二次交叉替换后的3个矩阵。

在继续对第一轮的第二次交叉替换后的3个矩阵的第一行进行交叉替换后,得到矩阵为第一矩阵集中的矩阵不计入新的矩阵集中,即对于一个只含有3个矩阵的第二矩阵集,第一轮替换进行2次即可完成第一轮的替换,此时对第一矩阵集中的第二行按照第一行的交叉替换方式进行循环交叉替换,得到第二轮的第一次交叉替换和第二轮的第二次交叉替换后的6个矩阵。

其它行的矩阵循环交叉替换方式依次类推,在此不再赘述,直到完成对第一矩阵集中的第五行节点进行交叉循环,得到第五轮的第一次交叉替换和第五轮的第二次交叉替换矩阵为止。通过上述交叉循环方式得到的多个矩阵30个矩阵即为新的矩阵集,将第一矩阵集中的3个矩阵集及新的矩阵集中的30个矩阵组成第二矩阵集(共33个矩阵),矩阵在第二矩阵集中的顺序为从第一矩阵集中的3个矩阵开始按图4中的顺序到第五轮的第二次交叉替换后得到的3个矩阵。

在获得第二矩阵集或获得第二矩阵集的过程中,可以对ckg进行组建,具体请参见步骤103及步骤104。

步骤103:在获得第二矩阵集后,从第二矩阵集的每个矩阵中选取构成与每个矩阵对应的ckg的每个元素所对应的节点;或,在完成一次循环交叉替换后,从循环交叉替换后获得的每个矩阵中选取构成与每个矩阵对应的ckg的元素所在的节点;其中,一次循环交叉替换为完成一次矩阵的行节点的替换,一个矩阵能组建出与该矩阵中矩阵元素个数相同数量的ckg。

例如,第二矩阵集中的矩阵为5×5的矩阵,那么第二矩阵集中的一个矩阵由25个矩阵,通过该矩阵可以组建出25个ckg。

若在获得第二矩阵集后才开始组建ckg,则在获得第二矩阵集后,便可从每个矩阵中选取构成ckg的每个元素所对应的节点。

若在获得第二矩阵集的过程中逐步组建ckg,便在完成一次循环交叉替换后,便可从循环交叉替换后获得的每个矩阵中选取构成ckg的元素所在的节点。

不管是在什么时候组建ckg,都是按照相同的规则从每个矩阵中选取构成ckg的每个元素所对应的节点,具体为:

按第一公式,确定ckg中每个元素在当前矩阵中的坐标位置,并基于坐标位置获得每个元素所对应的节点;当前矩阵是为当前组建ckg的元素提供节点选取的矩阵。

具体的,第一公式为:

ckp=(p,(i%n+(i/n)×p)%n)

其中,ckp为ckg中的第p个元素,i为对当前矩阵进行ckg分配的次数,n为同阶矩阵中的总列数,p为不大于ckg的元素总个数的自然数,/代表取商,%代表取余。

例如,以图4中的第一个同阶矩阵组建ckg为例,n=5,p=0~4,i=0~24,按照第一公式计算第一个ckg,请参见图5。

当i=0,p=0时,ckg(i=0,p=0)=(0,(0%5+((0/5)×0))%5)=(0,(0+(0×0))%5)=(0,0%5)=(0,0);即第0个ckg中的第0个元素对应的节点在第一同阶矩阵中的坐标位置为(0,0),进而可以确定第0个ckg中的第0个元素对应的节点为节点0。

当i=0,p=1时,ckg(i=0,p=1)=(1,(0%5+((0/5)×1))%5)=(1,(0+(0×1))%5)=(1,0%5)=(1,0);即第0个ckg中的第1个元素对应的节点在第一同阶矩阵中的坐标位置为(1,0),进而可以确定第0个ckg中的第1个元素对应的节点为节点5。

以此类推,当i=0,p=4时,ckg(i=0,p=4)=(4,(0%5+((0/5)×4))%5)=(4,(0+(0×1))%5)=(4,0%5)=(4,0);即第0个ckg中的第4个元素对应的节点在第一同阶矩阵中的坐标位置为(4,0),进而可以确定第0个ckg中的第4个元素对应的节点为节点20。至此,便确定出了第0个ckg中每个元素对应的节点。

当i=1~24时,按照上述计算方式得到第5个ckg~第24个ckg中每个元素对应的节点。

通过上述方式为第0个ckg~第24个ckg确定每个元素对应的节点后,便完成了从第一个同阶矩阵中选取所有ckg的每个元素的节点选取。在完成一个矩阵的所有ckg的每个元素的节点选取后,即可接着按照上述过程完成其它矩阵的所有ckg的每个元素的节点选取。

需要理解的是,若在获得第二矩阵集的过程中逐步组建ckg,则是在完成一次交叉替换后对刚得到的3个矩阵依次进行ckg中元素节点的选取,其中,在得到第一矩阵集的3个矩阵后便可依次对第一矩阵集中3个矩阵依次进行ckg中元素节点的选取。

在为一个ckg的每个元素选取完节点后,便可按照步骤104的方式从每个元素对应的节点中确定每个元素对应的虚拟分块(即chunk)。

步骤104:从每个ckg的每个元素所对应的节点中,选取物理硬盘中的一个空闲虚拟分块,组建成虚拟存储池中的每个ckg。

具体的,可以按照以下方式组建虚拟存储池中的每个ckg。

先从每个ckg的每个元素对应的节点中,为每个元素选取对应的物理硬盘,具体按照以下三步为每个元素选取对应的物理硬盘:

第一步,基于随机生成的第一随机数及每个元素对应的节点中总的物理硬盘数,按照公式start_disk=rand1%n计算起始硬盘的编号;其中,start_disk为起始硬盘的编号,rand1为第一随机数,n为每个元素对应的节点中总的物理硬盘数。

第二步,基于随机生成的第二随机数及物理硬盘数,按照公式step=rand2%n确定选取的物理硬盘相对于起始硬盘的步长;其中,step为步长,rand2为第二随机数,n为每个元素对应的节点中总的物理硬盘数。

第三步,基于起始硬盘的编号和步长,按照公式disk_id=(start_disk+step×t)%n计算出选取的物理硬盘的编号;其中,disk_id为选取的物理硬盘的编号,t为每个元素对应的节点当前被选取虚拟分块的次数,n为每个元素对应的节点中总的物理硬盘数。

最后,再从每个元素对应的物理硬盘中,选取一个空闲的虚拟分块作为每个元素对应的虚拟分块。

例如,以图4中的第5个ckg为例,记为ckg(i=1,p=0)其5个元素对应的节点依次为节点0、节点6、节点12、节点18、节点24。假设每个节点中总的物理硬盘数为5,即n=5。

假设rand1=13,rand2=5则start_disk=13%5=3,step=5%5=0;

以计算ckg(i=1,p=0)中的第0个元素(对应节点0)为例,由于节点0在之前的ckg中已经被选取过一次,所以ckg(i=1,p=0)中的第0个元素在节点0中选取硬盘,相对于节点0而言,是进行第2次硬盘的选取,故t=2,ckg(i=1,p=0)中的第0个元素在节点0中选取的对应物理硬盘的编号为disk_id=(3+0×2)%5=3,之后,从节点0中的物理硬盘编号为3的硬盘中选取一个空闲的虚拟分块作为ckg(i=1,p=0)中的第0个元素对应的虚拟分块。其它ckg的选取方式与此类似,不再赘述。

通过本发明提供的实施例,使用上述ckg组成的存储池进行数据冗余时,可以按照虚拟存储技术的方式进行冗余,即对一个ckg中的一个虚拟分块写入数据后,用该ckg中的另一个虚拟分块进行冗余备份,当该一个虚拟分块对应的节点被破坏后,由于ckg中的各个虚拟分块均来自不同的节点,所以使得被破坏的数据可以从其它节点中获取,从而能够有效的提高安全性及可靠性,减少对相同数据进行过多的冗余,从而能有效提高硬盘利用率。

进一步的,通过使用由本发明实施例中提供的ckg组成的虚拟存储池,在进行数据写入时,由于每个ckg中的每个虚拟分块均来自不同的节点下的不同物理硬盘,所以能够同时对多个节点下的不同硬盘进行写入,从而能够充分发挥硬盘间的并发性、提高写效率,充分使用网络资源,减少网络资源的浪费。

需要理解的是,在本发明提供的实施例中,物理硬盘还可以是磁盘,或其它物理存储介质,在此不做限定。

基于同一发明构思,本发明一实施例中提供一种用于组件分块组的装置,该装置的分块组的组建方法的具体实施方式可参见方法实施例部分的描述,重复之处不再赘述,请参见图6,该装置包括:

矩阵划分单元601,用于将指定集群下的节点作为矩阵元素,并按各节点的编号依次划分为多个同阶矩阵,获得第一矩阵集;其中,所述同阶矩阵中一列的节点个数与组成所述指定集群的虚拟存储池中的每个ckg的元素个数相同,所述第一矩阵集中每个同阶矩阵中的节点编号都不同;

获得单元602,用于按行对所述第一矩阵集中的同阶矩阵进行循环交叉替换,使各同阶矩阵中的每行节点被依次替换为其它矩阵中的相应行节点,获得第二矩阵集;其中,所述第二矩阵集还包含所述第一矩阵集中的所有同阶矩阵;

节点选取单元603,用于在获得所述第二矩阵集后,从所述第二矩阵集的每个矩阵中选取构成与所述每个矩阵对应的ckg的每个元素所对应的节点;或,在完成一次循环交叉替换后,从循环交叉替换后获得的每个矩阵中选取构成与所述每个矩阵对应的ckg的元素所在的节点;其中,所述一次循环交叉替换为完成一次矩阵的行节点的替换;

ckg组建单元604,用于从所述每个ckg的每个元素所对应的节点中,选取物理硬盘中的一个空闲虚拟分块,组建成所述虚拟存储池中的所述每个ckg。

可选的,所述矩阵划分单元601,还用于:

将指定集群下的每个节点下的每个物理硬盘按指定容量虚拟化为多个虚拟分块;其中,所述每个节点具有相同数量和容量的物理硬盘。

可选的,所述获得单元602具体用于:

从所述第一矩阵集的各同阶矩阵的第一行开始,用后一同阶矩阵的相应行节点进行替换,直到所述第一矩阵集的第一个同阶矩阵中的最后一行节点被最后一个同阶矩阵的最后一行节点替换为止,获得新的矩阵集;

将所述第一矩阵集与所述新的矩阵集按获得的先后顺序,组成所述第二矩阵集。

可选的,所述节点选取单元603具体用于:

按第一公式,确定所述ckg中每个元素在当前矩阵中的坐标位置,并基于所述坐标位置获得所述每个元素所对应的节点;所述当前矩阵是为当前组建ckg的元素提供节点选取的矩阵;

其中,所述第一公式为:

ckp=(p,(i%n+(i/n)×p)%n)

其中,ckp为所述ckg中的第p个元素,i为对所述当前矩阵进行ckg分配的次数,n为所述同阶矩阵中的总列数,p为不大于所述ckg的元数总个数的自然数。

可选的,所述ckg组建单元604具有用于:

按照第二算法从所述每个ckg的每个元素对应的节点中,为所述每个元素选取对应的物理硬盘;

从所述每个元素对应的物理硬盘中,选取一个空闲的虚拟分块作为所述每个元素对应的虚拟分块。

可选的,所述ckg组建单元604还有用于:

基于随机生成的第一随机数及所述每个元素对应的节点中总的物理硬盘数,按照公式start_disk=rand1%n计算起始硬盘的编号;其中,start_disk为所述起始硬盘的编号,rand1为所述第一随机数,n为所述总的物理硬盘数;

基于随机生成的第二随机数及所述物理硬盘数,按照公式step=rand2%n确定选取的物理硬盘相对于所述起始硬盘的步长;其中,step为所述步长,rand2为所述第二随机数,n为所述总的物理硬盘数;

基于所述起始硬盘的编号和所述步长,按照公式disk_id=(start_disk+step×t)%n计算出所述选取的物理硬盘的编号;其中,disk_id为所述选取的物理硬盘的编号,t为所述每个元素对应的节点当前被选取虚拟分块的次数,n为所述总的物理硬盘数。

基于同一发明构思,本发明实施例中提供了一种虚拟存储池,所述虚拟存储池中的ckg是采用如上所述的组建分块组ckg方法得到的ckg组成的。

基于同一发明构思,本发明实施例中提供了一种集群,在为业务提供数据读写服务时,采用如上所述的虚拟存储池进行所述数据读写服务。

基于同一发明构思,本发明实施例中提供了一种用于组建分块组ckg的装置,包括:至少一个处理器,以及

与所述至少一个处理器连接的存储器;

其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述至少一个处理器通过执行所述存储器存储的指令,执行如上所述的组建分块组ckg方法。

基于同一发明构思,本发明实施例还提一种计算机可读存储介质,包括:

所述计算机可读存储介质存储有计算机指令,当所述计算机指令在计算机上运行时,使得计算机执行如上所述的组建分块组ckg方法。

在本发明提供的实施例中,通过先将指定集群下的节点作为矩阵元素,并按各节点的编号依次划分为多个同阶矩阵,获得第一矩阵集;再按行对第一矩阵集中的同阶矩阵进行循环交叉替换,使各同阶矩阵中的每行节点被依次替换为其它矩阵中的相应行节点,获得第二矩阵集;在获得第二矩阵集后,从每个矩阵中选取构成与每个矩阵对应的ckg的每个元素所对应的节点;或,在完成一次循环交叉替换后,从循环交叉替换后获得的每个矩阵中选取构成与每个矩阵对应的ckg的元素所对应的节点;最后,从每个ckg的每个元素所对应的节点中,选取物理硬盘中的一个空闲虚拟分块,组建成虚拟存储池中的每个ckg;其中,同阶矩阵中一列的节点个数与组成指定集群的虚拟存储池中的每个ckg的元素个数相同,且第一矩阵集中每个同阶矩阵中的节点编号都不同;第二矩阵集还包含第一矩阵集中的所有同阶矩阵;一次循环交叉替换为完成一次矩阵的行节点的替换。从而能够让同一节点上的不同虚拟分块被冗余到不同节点上,在节点出现故障时通过从其它节点恢复数据,从而不需要对相同数据进行重复备份,进而能有效的提高硬盘的利用率即可靠性。

本领域内的技术人员应明白,本发明实施例可提供为方法、系统、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本发明实施例是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

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