发明内容
本发明的目的是提供一种磁盘阵列扩容方法、装置、设备及存储介质,能够实现数据的均匀分布的同时,大大降低算法控制的复杂性。
为了实现上述目的,本发明提供如下技术方案:
一种磁盘阵列扩容方法,包括:
将扩容添加的每个磁盘中各盘位分别划分至每个条带,得到扩容后的磁盘阵列;其中,所述磁盘阵列中每一行包含同一条带的全部盘位,每一列包含同一磁盘的全部盘位,且每个盘位能够存储一个数据块;
确定所述磁盘阵列中由扩容前存在的磁盘向扩容添加的磁盘的方向为正向方向;其中,扩容添加的磁盘均位于扩容前存在的全部磁盘的一侧;
保持所述磁盘阵列中任意一个条带不变,依次确定所述磁盘阵列中除该任意一个条带之外的其他每个条带分别为当前条带,由当前条带中与上一个条带所包含的第一个空的盘位属于同一磁盘的盘位起,沿正向方向依次排列多个盘位均为有效盘位,并将当前条带中的数据块分别存储至每个所述有效盘位中;其中,当前条带中有效盘位的数量等于当前条带中数据块的数量,当前条带的上一个条带为在当前条带前确定的最后一个当前条带。
优选的,沿正向方向依次排列多个盘位均为有效盘位,包括:
沿正向方向依次排列多个盘位的过程中,如果排列的盘位数量少于当前条带中数据块的数量、但已排列到最后一个盘位,则由当前条带中该最后一个盘位对应的第一个盘位开始继续排列,直至排列得到全部有效盘位为止。
优选的,将当前条带中的数据块分别存储至每个所述有效盘位中,包括:
确定当前条带中除有效盘位之外的盘位为非有效盘位,将存储有数据块的非有效盘位中存储的数据块分别搬移至未存储有数据块的有效盘位中。
优选的,将存储有数据块的非有效盘位中存储的数据块分别搬移至未存储有数据块的有效盘位中,包括:
确定存储有数据块的非有效盘位中存储的数据块均为待搬移数据块,按照每个所述待搬移数据块搬移前后所在盘位之间距离均相同的原则,将每个所述待搬移数据块分别搬移至未存储有数据块的有效盘位中。
一种磁盘阵列扩容装置,包括:
划分模块,用于:将扩容添加的每个磁盘中各盘位分别划分至每个条带,得到扩容后的磁盘阵列;其中,所述磁盘阵列中每一行包含同一条带的全部盘位,每一列包含同一磁盘的全部盘位,且每个盘位能够存储一个数据块;
确定模块,用于:确定所述磁盘阵列中由扩容前存在的磁盘向扩容添加的磁盘的方向为正向方向;其中,扩容添加的磁盘均位于扩容前存在的全部磁盘的一侧;
搬移模块,用于:保持所述磁盘阵列中任意一个条带不变,依次确定所述磁盘阵列中除该任意一个条带之外的其他每个条带分别为当前条带,由当前条带中与上一个条带所包含的第一个空的盘位属于同一磁盘的盘位起,沿正向方向依次排列多个盘位均为有效盘位,并将当前条带中的数据块分别存储至每个所述有效盘位中;其中,当前条带中有效盘位的数量等于当前条带中数据块的数量,当前条带的上一个条带为在当前条带前确定的最后一个当前条带。
优选的,搬移模块包括:
排列单元,用于:沿正向方向依次排列多个盘位的过程中,如果排列的盘位数量少于当前条带中数据块的数量、但已排列到最后一个盘位,则由当前条带中该最后一个盘位对应的第一个盘位开始继续排列,直至排列得到全部有效盘位为止。
优选的,搬移模块包括:
搬移单元,用于:确定当前条带中除有效盘位之外的盘位为非有效盘位,将存储有数据块的非有效盘位中存储的数据块分别搬移至未存储有数据块的有效盘位中。
优选的,搬移单元包括:
搬移子单元,用于:确定存储有数据块的非有效盘位中存储的数据块均为待搬移数据块,按照每个所述待搬移数据块搬移前后所在盘位之间距离均相同的原则,将每个所述待搬移数据块分别搬移至未存储有数据块的有效盘位中。
一种磁盘阵列扩容设备,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如上任一项所述磁盘阵列扩容方法的步骤。
一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上任一项所述磁盘阵列扩容方法的步骤。
本发明提供了一种磁盘阵列扩容方法、装置、设备及存储介质,该方法包括:将扩容添加的每个磁盘中各盘位分别划分至每个条带,得到扩容后的磁盘阵列;确定所述磁盘阵列中由扩容前存在的磁盘向扩容添加的磁盘的方向为正向方向;保持所述磁盘阵列中任意一个条带不变,依次确定所述磁盘阵列中除该任意一个条带之外的其他每个条带分别为当前条带,由当前条带中与上一个条带所包含的第一个空的盘位属于同一磁盘的盘位起,沿正向方向依次排列多个盘位均为有效盘位,并将当前条带中的数据块分别存储至每个所述有效盘位中;其中,所述磁盘阵列中每一行包含同一条带的全部盘位,每一列包含同一磁盘的全部盘位,每个盘位能够存储一个数据块,扩容添加的磁盘均位于扩容前存在的全部磁盘的一侧,当前条带中有效盘位的数量等于当前条带中数据块的数量,当前条带的上一个条带为在当前条带前确定的最后一个当前条带。本申请在磁盘阵列的一侧添加空的磁盘后,将各空的磁盘划分至磁盘阵列的各条带,从而得到新的磁盘阵列,且新的磁盘阵列中存满数据的磁盘及空的磁盘分别作为相应的列存在,而每个条带则作为相应的行存在;然后保持磁盘阵列中任意一个条带的数据块位置保持不变,而其他条带中数据块均分配至所属条带的有效盘位中,且每个条带的有效盘位均与上一条带的有效盘位的位置存在规律的区别,从而实现数据的均匀分布,同时无需跨条带之间实现数据迁移,大大降低了算法控制的复杂性。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参阅图2,其示出了本发明实施例提供的一种磁盘阵列扩容方法的流程图,可以包括:
S11:将扩容添加的每个磁盘中各盘位分别划分至每个条带,得到扩容后的磁盘阵列;其中,磁盘阵列中每一行包含同一条带的全部盘位,每一列包含同一磁盘的全部盘位,且每个盘位能够存储一个数据块。
本发明实施例提供的一种磁盘阵列扩容方法的执行主体可以为对应的磁盘阵列扩容装置。其中,磁盘阵列(如RAID)中存储有数据,数据为用于存储真实用户信息的一块字符串,本实施例中数据可以以数据块为单位进行存储,磁盘阵列中任意磁盘包含的单个盘位能够存储单个数据块。当磁盘阵列中全部磁盘均写满数据时则需要对磁盘阵列进行扩容,也即在磁盘阵列中添加新的未存储有任何数据的磁盘(或者说空的磁盘),本申请实施例中在添加空的磁盘时可以是将空的磁盘均添加至磁盘阵列中的一侧,例如图1中的Disk5及Disk6则为扩容添加的磁盘,从而使得扩容前磁盘阵列包含的磁盘在一侧,扩容添加的磁盘在另一侧,由扩容前磁盘阵列包含的磁盘及扩容添加的磁盘组成新的磁盘阵列,也即扩容后的磁盘阵列。
通常磁盘阵列可以表示为相应的矩阵,矩阵中行数为条带数,单个行即为单个条带,列数为磁盘数,单个列为单个磁盘。在扩容时将至少一个空的磁盘添加至磁盘阵列的一侧后,使得磁盘阵列的一侧多出与空的磁盘相对应的至少一列;将每个空的磁盘均划分为多个盘位,单个磁盘包含的盘位数量与磁盘阵列包含的条带数量相同,因此可以将单个空的磁盘中每个盘位分别分给每个条带,从而使得每个空的磁盘均具有与每个条带相对应的盘位。其中,条带(Stripe)与现有技术中对应概念的含义相同,其可以只含有数据块或校验块,也可以同时含有数据块和校验块。在实现空的磁盘的添加及至相应条带的划分后,得到的新的磁盘阵列包含的行不变,也即条带的数量不变,但是列的数量增加,增加的列即为添加的磁盘的数量,且仍然是单个行包含单个条带中全部盘位,单个列包含单个磁盘中全部盘位。例如图1中的Disk5及Disk6为扩容添加的磁盘,则在将其划分至相应的条带后,则呈现如图1中右侧所示的盘位排列方式,进而基于此实现相应的数据块搬移。
S12:确定磁盘阵列中由扩容前存在的磁盘向扩容添加的磁盘的方向为正向方向;其中,扩容添加的磁盘均位于扩容前存在的全部磁盘的一侧。
为了便于实现有效盘位的确定,本申请中定义正向方式为磁盘阵列中扩容前存在磁盘向扩容添加磁盘的方向,进而基于该方向排列相应的数据块;例如图1中正向方向则为Disk1向Disk6的方向。当然只要能够达到本申请所需的目的,根据实际需要进行的其他设置也均在本发明的保护范围之内。
S13:保持磁盘阵列中任意一个条带不变,依次确定磁盘阵列中除该任意一个条带之外的其他每个条带分别为当前条带,由当前条带中与上一个条带所包含的第一个空的盘位属于同一磁盘的盘位起,沿正向方向依次排列多个盘位均为有效盘位,并将当前条带中的数据块分别存储至每个有效盘位中;其中,当前条带中有效盘位的数量等于当前条带中数据块的数量,当前条带的上一个条带为在当前条带前确定的最后一个当前条带,当前条带的上一个条带为在当前条带前确定的最后一个当前条带。
在实现数据块的搬移时,可以先确定磁盘阵列中任意一个条带为基准条带,该基准条带的数据块的位置保持不变,然后依次对除该基准条带之外的每个条带进行数据块的搬移处理。具体来说,确定除基准条带之外任意的条带为当前条带,确定当前条带中与上一个当前条带第一个空的盘位属于同一磁盘的盘位为起始盘位,然后从起始盘位起沿着正向方向数出当前条带中的多个盘位作为有效盘位,进而将当前条带中存储的数据块均搬移至有效盘位中进行存储,从而能够使得每个条带的数据块的位置与上一条带的数据块的位置均按照一定的规律发生变化,最终使得数据在磁盘实现均匀分布,且数据仅需在所属条带内实现搬移,无需跨条带搬移。其中,有效盘位的数量等于当前条带中数据块的数量,以使得具有足够的有效盘位实现所属条带中各数据块的存储。另外,对于基准条带及条带的处理顺序可以根据实际需要进行设定,如基准条带可以为位于磁盘阵列第一行的条带,然后将位于磁盘阵列第二行的条带作为当前条带实现数据搬移,再然后将位于磁盘阵列第三行的条带作为当前条带实现数据搬移,以此类推,直至完成位于磁盘阵列最后一行的条带作为当前条带实现数据搬移,从而按照这个顺序实现磁盘阵列中全部所需实现的数据搬移。
本申请在磁盘阵列的一侧添加空的磁盘后,将各空的磁盘划分至磁盘阵列的各条带,从而得到新的磁盘阵列,且新的磁盘阵列中存满数据的磁盘及空的磁盘分别作为相应的列存在,而每个条带则作为相应的行存在;然后保持磁盘阵列中任意一个条带的数据块位置保持不变,而其他条带中数据块均分配至所属条带的有效盘位中,且每个条带的有效盘位均与上一条带的有效盘位的位置存在规律的区别,从而实现数据的均匀分布,同时无需跨条带之间实现数据迁移,大大降低了算法控制的复杂性。
本发明实施例提供的一种磁盘阵列扩容方法,沿正向方向依次排列多个盘位均为有效盘位,可以包括:
沿正向方向依次排列多个盘位的过程中,如果排列的盘位数量少于当前条带中数据块的数量、但已排列到最后一个盘位,则由当前条带中该最后一个盘位对应的第一个盘位开始继续排列,直至排列得到全部有效盘位为止。
需要说明的是,在沿正向方向依次数出多个盘位作为有效盘位的过程中,如果在数到位于磁盘阵列沿正向方向数最后一列的盘位时,仍然无法达到所需数出的有效盘位的数量,则由位于磁盘阵列沿正向方向数数第一列的盘位起继续数盘位,直至数出的盘位的数量达到所需数出的有效盘位的数量为止,从而通过这种方式能够实现有效盘位的有效确定。
本发明实施例提供的一种磁盘阵列扩容方法,将当前条带中的数据块分别存储至每个有效盘位中,可以包括:
确定当前条带中除有效盘位之外的盘位为非有效盘位,将存储有数据块的非有效盘位中存储的数据块分别搬移至未存储有数据块的有效盘位中。
为了减少数据搬移量,本申请在实现同一条带内的数据搬移时,如果有效盘位中存储有数据块或者非有效盘位中未存储有数据块,则将存储有数据块的有效盘位及未存储有数据块的非有效盘位保持不变,并且将存储有数据块的非有效盘位中存储的数据块分别迁移至未存储有数据块的非有效盘位,从而仅需实现必要的部分数据块的迁移即可。
本发明实施例提供的一种磁盘阵列扩容方法,将存储有数据块的非有效盘位中存储的数据块分别搬移至未存储有数据块的有效盘位中,可以包括:
确定存储有数据块的非有效盘位中存储的数据块均为待搬移数据块,按照每个待搬移数据块搬移前后所在盘位之间距离均相同的原则,将每个待搬移数据块分别搬移至未存储有数据块的有效盘位中。
为了在实现数据搬移时每个需搬移的数据块所经过的搬移距离相同,从而便于实现这些数据块的统一搬移,本申请实施例中可以按照每个需要搬移的数据块搬移前后所经过的距离相同的原则,实现每个待搬移数据块的搬移;而待搬移数据块搬移前后所在盘位之间的距离即为两个盘位之间相隔的盘位数量。例如图1中如果需要将D3,2及D0,2搬移至所属条带的Disk5及Disk6中,则将D3,2搬移至所属条带的Disk5中,将D0,2搬移至所属条带的Disk6中,由此使得D3,2及D0,2搬移的距离相同。
在一种具体实现方式中,本发明实施例提供的一种磁盘阵列扩容方法具体可以包括以下步骤:
1.针对第一行的stripe情况,将空磁盘紧贴现存磁盘排列,亦即是第一行原本存储stripe情况不变,后面为扩容数量的磁盘的空stripe。
2.第二行有效stripe位置(有效stripe位置即有效盘位)为从第一行空stripe对应的盘位开始依次排列,排至边界(边界即最后一列)则从第一块Disk折叠继续排列(从第一块Disk折叠继续排列即从第一列磁盘的盘位开始继续排列),根据排列位置将非有效stripe位置的数据块进行移位,移位目标位置为扩容磁盘的有效stripe位置。
3.从第二行的空白stripe对应的盘位开始重复第2步的方法,依次类推,直到完成所有条带相应数据块的位移。
举例已经完成落盘的磁盘阵列如图3所示,磁盘阵列内共有4个磁盘,分别是Disk1-4,每个磁盘按照条带需求分为了3个条带,即是图3中的stripe1-3,落盘数据按照4个磁盘对应为D1-4,为了负载均衡,每个数据分为4个stripe大小的数据块,依次落盘,例如数据1的stripe3就是D0,3。图3中磁盘阵列为了负载均衡在数据排布是对同数据的不同stripe尽量分别落在不同磁盘上,基于这样的落盘方式当需要取数据D0时,即是对磁盘1,3,4分别取一块数据,所有数据对磁盘的读写压力都相同,IO访问均衡,压力相同。
本申请提出的磁盘阵列扩容方需要针对不同扩容情况进行调度控制,按照扩容的场景而言一般可以分为三类,下面分别进行说明:
1.扩容添加的磁盘数小于扩容前磁盘阵列中的磁盘数。
在这种情况下,以上述图3为例,即是扩容数为1,2,3个磁盘任一种时;本实施例以扩容磁盘量为2举例。基于本发明的扩容最终落盘方案即为图4所示,当4块磁盘3stripe的磁盘阵列情况下,2块磁盘的扩容基于本发明所得到的落盘结果。可知通过本算法的扩容,每块磁盘的有效数据都为2块,实现数据均匀分布。
Firmware调度方面,需要调度的stripe在图里通过圆圈标出,虚线表示的是未经过调度的数据所在位置,实线圆圈表示的调度后的数据位置,在图4示例中,通过本发明只需要有4块数据发生调度,相比同情况下使用RR扩容算法的数据调度减少了一半,具有最小数据迁移和调度简单的优势。
对于数据读写方面,通过本申请的扩容方案D0-3的读写都会分布在3块磁盘上,实现IO访问均衡,压力相同。
2.扩容添加的磁盘数等于扩容前磁盘阵列中的磁盘数。
在这种情况下,以上述图3为例,即是扩容数为4个磁盘。基于本发明的扩容最终落盘方案即为图5所示,当4块磁盘3stripe的磁盘阵列情况下4块磁盘的扩容,基于本发明所得到的落盘结果。可知通过本算法的扩容,每块磁盘的有效数据分别为2,2,2,2,1,1,1,1块,实现数据均匀分布。
Firmware调度方面,需要调度的stripe在图里通过圆圈标出,虚线表示的是未经过调度的数据所在位置,实线圆圈表示的调度后的数据位置。在图5示例中,通过本发明只需要有4块数据发生调度,相比同情况下使用RR扩容算法的数据调度减少了一半,具有最小数据迁移和调度简单的优势。
对于数据读写方面,通过本算法的扩容方案,D0-3的读写都会分布在3块磁盘上,实现IO访问均衡,压力相同。
3.扩容添加的磁盘数大于扩容前磁盘阵列中的磁盘数。
在这种情况下,以上述图3为例,即是扩容数为大于4个磁盘,以扩容5块磁盘为例举例说明,基于本发明的扩容最终落盘方案即为图6所示,当4块磁盘3stripe的磁盘阵列情况下4块磁盘的扩容,基于本发明所得到的落盘结果。可知通过本算法的扩容,每块磁盘的有效数据分别为1,2,2,2,1,1,1,1,1块,实现数据均匀分布。
Firmware调度方面,需要调度的stripe在图里通过圆圈标出,虚线表示的是未经过调度的数据所在位置,实线圆圈表示的调度后的数据位置。在图6示例中,通过本发明只需要有5块数据发生调度,相比同情况下使用RR扩容算法的数据调度减少了将近一半,具有最小数据迁移和调度简单的优势。
对于数据读写方面,通过本算法的扩容方案,D0-3的读写都会分布在3块磁盘上,实现IO访问均衡,压力相同。
通过以上分析可知,对于任何情况本发明的扩容方案均可实现,以n个Disk组成磁盘阵列,当扩容容量为m(扩容添加的磁盘数量为m)时,相比RR扩容算法其数据搬移改进情况为:
1.当m<n时,则本发明所提出的扩容方案需要搬移的数据量相比于RR扩容算法所需要搬移的数据量能够减少超过
2.当m=n时,则本发明所提出的扩容方案需要搬移的数据量相比于RR扩容算法所需要搬移的数据量能够减少超过
3.当m>n时,则本发明所提出的扩容方案需要搬移的数据量相比于RR扩容算法所需要搬移的数据量能够减少超过
因此本申请可达到均匀数据分布、最小数据迁移和Firmware调度简单有效的优势。
另外,本申请以数据均匀分布为首要目标,在不同的磁盘添加情况下设计同一套数据迁移模式,且数据迁移可以由Firmware进行调度,通过XOR硬件加速器运算实现数据迁移,以得到不同环境下不同磁盘添加,都可通过相同的单向方式,实现均匀数据分布的RAID扩容操作。也即本申请能够在不同环境下保证数据均匀分布的前提下,数据调度量小,Firmware调度简单,保证不同情况的磁盘阵列下不同扩容的实现,相比传统的RR扩容算法,在具有数据均匀表现的前提下,可以实现相比RR扩容算法更少的数据迁移即可达成均匀调度。
本发明实施例还提供了一种磁盘阵列扩容装置,如图7所示,可以包括:
划分模块11,用于:将扩容添加的每个磁盘中各盘位分别划分至每个条带,得到扩容后的磁盘阵列;其中,磁盘阵列中每一行包含同一条带的全部盘位,每一列包含同一磁盘的全部盘位,且每个盘位能够存储一个数据块;
确定模块12,用于:确定磁盘阵列中由扩容前存在的磁盘向扩容添加的磁盘的方向为正向方向;其中,扩容添加的磁盘均位于扩容前存在的全部磁盘的一侧;
搬移模块13,用于:保持磁盘阵列中任意一个条带不变,依次确定磁盘阵列中除该任意一个条带之外的其他每个条带分别为当前条带,由当前条带中与上一个条带所包含的第一个空的盘位属于同一磁盘的盘位起,沿正向方向依次排列多个盘位均为有效盘位,并将当前条带中的数据块分别存储至每个有效盘位中;其中,当前条带中有效盘位的数量等于当前条带中数据块的数量,当前条带的上一个条带为在当前条带前确定的最后一个当前条带。
本发明实施例提供的一种磁盘阵列扩容装置,搬移模块可以包括:
排列单元,用于:沿正向方向依次排列多个盘位的过程中,如果排列的盘位数量少于当前条带中数据块的数量、但已排列到最后一个盘位,则由当前条带中该最后一个盘位对应的第一个盘位开始继续排列,直至排列得到全部有效盘位为止。
本发明实施例提供的一种磁盘阵列扩容装置,搬移模块可以包括:
搬移单元,用于:确定当前条带中除有效盘位之外的盘位为非有效盘位,将存储有数据块的非有效盘位中存储的数据块分别搬移至未存储有数据块的有效盘位中。
本发明实施例提供的一种磁盘阵列扩容装置,搬移单元可以包括:
搬移子单元,用于:确定存储有数据块的非有效盘位中存储的数据块均为待搬移数据块,按照每个待搬移数据块搬移前后所在盘位之间距离均相同的原则,将每个待搬移数据块分别搬移至未存储有数据块的有效盘位中。
本发明实施例还提供了一种磁盘阵列扩容设备,可以包括:
存储器,用于存储计算机程序;
处理器,用于执行计算机程序时实现如上任一项磁盘阵列扩容方法的步骤。
本发明实施例还提供了一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时可以实现如上任一项磁盘阵列扩容方法的步骤。
需要说明的是,本发明实施例提供的一种磁盘阵列扩容装置、设备及存储介质中相关部分的说明请参见本发明实施例提供的一种磁盘阵列扩容方法中对应部分的详细说明,在此不再赘述。另外,本发明实施例提供的上述技术方案中与现有技术中对应技术方案实现原理一致的部分并未详细说明,以免过多赘述。
对所公开的实施例的上述说明,使本领域技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。