一种存储系统的数据存储方法及装置与流程

文档序号:17831282发布日期:2019-06-05 23:04阅读:230来源:国知局
一种存储系统的数据存储方法及装置与流程

本申请涉及存储技术领域,尤其涉及一种存储系统的数据存储方法及装置。



背景技术:

随着互联网用户的激增以及业务的多样性发展,越来越多的数据(例如,用户数据、业务配置数据等)需要使用存储系统进行存储,以便用来分析和指导业务。

为了提高存储系统的存储性能,提出了通过虚拟化技术对硬盘进行分区的方法,具体的做法是:首先按照预设的规则(例如用户需求或者存储系统的存储池对应的数据冗余模式等),建立若干个分区组(partitionteam,pt),例如,创建2053个pt,每个pt中包括6个分区(partition,pt),然后,根据均衡度和/或位置均衡度等原则,将该若干个pt打散到存储系统的所有硬盘上,这样每个pt都固定映射到存储系统的6个硬盘中的分区上,这样,在该存储系统上存储数据时,存储系统便只需从多个pt中选择一个pt,然后根据pt与存储系统的硬盘之间的映射关系,自动将该分条存储在相应的硬盘上,可以简化存储系统在进行数据存储的步骤,并且,该存储系统中只需要存储与该分条对应的pt的索引号,后续便可以根据该pt的索引号,从硬盘中获取该数据,可以节省存储系统的开销。

然而由于存储系统是一个动态的系统,例如,存储系统中的某些存储节点可能会发生故障,从而导致存储系统的存储容量减小(减容),或者可以向该存储系统中增加新的存储节点来扩容等,那么,当存储系统发生变化,例如,存储系统减容时,该预先创建的若干个pt组的某些pt则无法使用,从而与该pt对应的其他硬盘中的分区也无法使用,从而降低存储系统中的空间利用率。



技术实现要素:

本申请提供一种数据存储方法及装置,用以提高存储系统的空间利用率。

第一方面,提供一种存储系统的数据存储方法,在该方法中,在存储系统的拓扑结构为第一拓扑结构时,生成与该第一拓扑结构对应的m个第一存储分区组,该m个第一存储分区组中的每个第一存储分区组对应k个第一存储设备;当存储系统的拓扑结构由第一拓扑结构更新为与所述第一拓扑结构不同的第二拓扑结构时,则生成与该第二拓扑结构对应的n个第二存储分区组,该n个第二存储分区组中的每个第二存储分区组对应p个第二存储设备,然后,使用该n个第二存储分区组更新该存储系统中存储的m个第一存储分区组,从而在接收待存储的新数据后,将该待存储的新数据存储在与该n个第二存储分区组中的至少一个第二存储分区组对应的第二存储设备中,n、p、m和k为正整数。

在上述技术方案中,存储系统支持动态的存储分区组,当存储系统的拓扑结构发生变化时,存储系统的存储分区组也会发生改变,例如,存储系统由3个存储节点且每个存储节点有3个硬盘,为避免发生单节点故障而导致整个存储系统无法使用的问题,该存储系统中每一个存储分区组中可以包括4个数据盘和2个校验盘,在这种情况下,存储系统的空间利用率为4/(4+2)=66.6%;当存储系统发生扩容,扩容到5个存储节点且每个存储节点有3个硬盘,则存储系统可以生成新的存储分区组,每个存储分区组中可以包括8个数据盘和2个检验盘,则空间利用率为8/(8+2)=80%,从而可以提高存储系统的空间利用率。当存储系统发生减容,由于3个存储节点中的某一个硬盘发生故障,则存储系统也可以生成新的存储分区组以适应减容后的存储系统,新的存储分区组中的每一个存储分区组都可以使用,可以提高存储系统的空间利用率。

在一种可能的设计中,p的值与该存储系统在该第二拓扑结构下所配置的数据冗余模式相同,k的值与该存储系统在该第一拓扑结构下所配置的数据冗余模式相同。

在上述技术方案中,存储系统中的存储分区组所包括的存储设备的数量可以根据该存储系统在不同的拓扑结构下所配置的数据冗余模式相同,从而可以使得该存储系统的硬盘的空间得到充分地应用,可以提高存储系统的硬盘的利用率。

在一种可能的设计中,在p大于k时,该每个第一存储分区组对应的l个第一存储设备中的每个第一存储设备中存储的一部分数据,与m个第二存储分区组对应的p个第二存储设备中的一个第二存储设备中存储的数据相同,l为小于p的正整数。

在上述技术方案中,当存储系统扩容后,在第一拓扑结构下生成的每个第一存储分区组中包括的l个第一存储设备,可能分别与对应的第二存储分区组中处于相同位置上的第二存储设备相同,例如,第一个第一存储分区组中包括的用于存储第一个数据分片的第一存储设备和用于存储第三个数据分片的第一存储设备,与第一个第二存储分区组中包括的用于存储第一个数据分片的第二存储设备和用于存储第三个数据分片的第二存储设备相同,也就是说,每个第二存储分区组中包括的p个第二存储设备可以和每个第一存储分区组中包括的k个第一存储设备相关联。由于存储系统发生扩容后,第二存储分区组中每个存储设备中存储的数据量变小,因此,当需要将存储系统中已经存储的数据按照m个第二存储分区组进行存储时,该l个第一存储设备中存储的部分数据与对应的第二存储分区组中处于相同位置上的第二存储设备中存储的数据相同,从而该部分数据则可以不用迁移,可以减少数据迁移所消耗的资源。

在一种可能的设计中,存储系统可以将每个存储在该m个第一存储分区组中的一个存储分区组对应的k个存储设备的原始数据中的部分数据按照该n个第二存储分区组中的一个第二存储分区组进行数据迁移,该每个原始数据中的部分数据与该l个第二存储设备中的每个第二存储设备中存储的数据均不同。

在上述技术方案中,若每个第一存储分区组中包括的l个第一存储设备,分别与对应的第二存储分区组中处于相同位置上的第二存储设备相同,则存储系统可以只需要将每个第一存储分区组中的除l个第一存储设备的一部分数据外的其他数据进行迁移,该l个第一存储设备的一部分数据为与该l个第一存储设备对应的l个第二存储设备中存储的数据,从而可以减少进行迁移的数据量。

在一种可能的设计中,在p小于k时,该每个第一存储分区组对应的s个第一存储设备中的每个第一存储设备中存储的数据,与m个第二存储分区组对应的p个第二存储设备中的一个第二存储设备中存储的一部分数据相同,s为小于p的正整数。

在上述技术方案中,当存储系统减容后,在第一拓扑结构下生成的每个第一存储分区组中包括的s个第一存储设备,可能分别与对应的第二存储分区组中处于相同位置上的第二存储设备相同,例如,第一个第一存储分区组中包括的用于存储第一个数据分片的第一存储设备,与第一个第二存储分区组中包括的用于存储第一个数据分片的第二存储设备相同,也就是说,每个第二存储分区组中包括的p个第二存储设备可以和每个第一存储分区组中包括的k个第一存储设备相关联。由于存储系统发生减容后,第二存储分区组中每个存储设备存储的数据量变大,因此,当需要将存储系统中已经存储的数据按照m个第二存储分区组进行存储时,该s个第一存储设备中存储的数据与对应的第二存储分区组中处于相同位置上的第二存储设备中存储的部分数据相同,从而该s个第一存储设备中存储的数据则可以不用迁移,可以减少数据迁移所消耗的资源。

在一种可能的设计中,存储系统可以将每个存储在该m个第一存储分区组中的一个存储分区组对应的k个存储设备的原始数据中的部分数据按照该n个第二存储分区组中的一个第二存储分区组进行数据迁移,该每个原始数据中的部分数据与该p个第二存储设备中的每个第二存储设备中存储的任意一部分数据均不同。

在上述技术方案中,若每个第一存储分区组中包括的s个第一存储设备,分别与对应的第二存储分区组中处于相同位置上的第二存储设备相同,则存储系统可以只需要将每个第一存储分区组中与s个第一存储设备不同的其他存储设备上的数据进行迁移,从而可以减少进行迁移的数据量。

在一种可能的设计中,该n个第二存储分区组中的任意一个第二存储分区组对应的p个第二存储设备,与该m个第一存储分区组中任意一个第一存储分区组中包括的k个第一存储设备不相同。

在上述技术方案中,无论是存储系统扩容或者减容,存储系统在第二拓扑结构下生成的每个第二存储分区组中包括的多个第二存储设备,可能与在第一拓扑结构下对应的第一存储分区组中包括的多个第一存储设备不同,或者,存储系统在第二拓扑结构下生成的每个第二存储分区组与在第一拓扑结构下对应的第一存储分区组中处于相同位置的存储设备不同,也就是说,每个第二存储分区组中包括的p个第二存储设备可以和每个第一存储分区组中包括的k个第一存储设备不关联,这样,存储系统可以灵活选择用于生成m个第二存储分区组的方式,可以提高存储系统的灵活性。

在一种可能的设计中,存储系统可以将存储在m个第一存储分区组中的至少一个第一存储分区组的原始数据按照该n个第二存储分区组中的一个第二存储分区组进行数据迁移。

在上述技术方案中,当存储系统得存储分区组由m个第一存储分区组更新为n个第二存储分区组后,则可以将之前按照m个第一存储分区组存储的数据进行迁移,从而使得已经存储的数据也能按照该n个第二存储分区组中至少一个第二存储分区组进行存储,可以提高存储系统的空间利用率。

第二方面,提供一种存储系统的数据存储装置,该装置包括处理器,用于实现上述第一方面描述的方法。所述装置还可以包括存储器,用于存储程序指令和数据。所述存储器与所述处理器耦合,所述处理器可以调用并执行所述存储器中存储的程序指令,用于实现上述第一方面描述的方法。所述装置还可以包括通信接口,所述通信接口用于该装置与其它设备进行通信。示例性地,该其它设备为存储节点。

在一种可能的设计中,该装置包括通信接口和处理器,其中:

所述处理器,用于在存储系统的拓扑结构由第一拓扑结构更新为第二拓扑结构时,生成与所述第二拓扑结构对应的n个第二存储分区组,所述n个第二存储分区组中的每个第二存储分区组对应p个第二存储设备,n和p为正整数;其中,所述第一拓扑结构与所述第二拓扑结构不同;

所述处理器,还用于使用所述n个第二存储分区组更新所述存储系统中存储的m个第一存储分区组,所述m个第一存储分区组与所述第一拓扑结构对应,所述m个第一存储分区组中的每个第一存储分区组对应k个第一存储设备,m和k为正整数;

所述处理器,还用于在通过所述通信接口接收待存储的新数据后,将所述待存储的新数据存储在与所述n个第二存储分区组中的至少一个第二存储分区组对应的第二存储设备中。

在一种可能的设计中,p的值与所述存储系统在所述第二拓扑结构下所配置的数据冗余模式相同,k的值与所述存储系统在所述第一拓扑结构下所配置的数据冗余模式相同。

在一种可能的设计中,在p大于k时,所述每个第一存储分区组对应的l个第一存储设备中的每个第一存储设备中存储的一部分数据,与m个第二存储分区组对应的p个第二存储设备中的一个第二存储设备中存储的数据相同,l为小于p的正整数。

在一种可能的设计中,所述处理器还用于:

将每个原始数据中的部分数据按照所述n个第二存储分区组中的一个第二存储分区组进行数据迁移,所述每个原始数据存储在所述m个第一存储分区组中的一个存储分区组对应的k个存储设备,所述每个原始数据中的部分数据与所述l个第二存储设备中的每个第二存储设备中存储的数据均不同。

在一种可能的设计中,在p小于k时,所述每个第一存储分区组对应的s个第一存储设备中的每个第一存储设备中存储的数据,与m个第二存储分区组对应的p个第二存储设备中的一个第二存储设备中存储的一部分数据相同,s为小于p的正整数。

在一种可能的设计中,所述处理器还用于:

将每个原始数据中的部分数据按照所述n个第二存储分区组中的一个第二存储分区组进行数据迁移,所述每个原始数据存储在所述m个第一存储分区组中的一个存储分区组对应的k个存储设备,所述每个原始数据中的部分数据与所述p个第二存储设备中的每个第二存储设备中存储的任意一部分数据均不同。

在一种可能的设计中,所述n个第二存储分区组中的任意一个第二存储分区组对应的p个第二存储设备,与所述m个第一存储分区组中任意一个第一存储分区组中包括的k个第一存储设备不相同。

在一种可能的设计中,所述处理器还用于:

将每个原始数据按照所述n个第二存储分区组中的一个第二存储分区组进行数据迁移,所述每个原始数据为,所述存储系统在所述第一拓扑结构时,按照所述m个第一存储分区组中的至少一个第一存储分区组存储所述存储系统中的数据。

第三方面,提供一种存储系统的数据存储装置,该通信装置可以是存储系统的控制器,也可以是存储系统的控制器中的装置,该通信装置可以包括处理模块和通信模块,这些模块可以执行上述第一方面任一种设计示例中所执行的方法,具体的:

所述处理模块,用于在存储系统的拓扑结构由第一拓扑结构更新为第二拓扑结构时,生成与所述第二拓扑结构对应的n个第二存储分区组,所述n个第二存储分区组中的每个第二存储分区组对应p个第二存储设备,n和p为正整数;其中,所述第一拓扑结构与所述第二拓扑结构不同;

所述处理模块,还用于使用所述n个第二存储分区组更新所述存储系统中存储的m个第一存储分区组,所述m个第一存储分区组与所述第一拓扑结构对应,所述m个第一存储分区组中的每个第一存储分区组对应k个第一存储设备,m和k为正整数;

所述处理模块,还用于在通过所述通信模块接收待存储的新数据后,将所述待存储的新数据存储在与所述n个第二存储分区组中的至少一个第二存储分区组对应的第二存储设备中。

在一种可能的设计中,p的值与所述存储系统在所述第二拓扑结构下所配置的数据冗余模式相同,k的值与所述存储系统在所述第一拓扑结构下所配置的数据冗余模式相同。

在一种可能的设计中,在p大于k时,所述每个第一存储分区组对应的l个第一存储设备中的每个第一存储设备中存储的一部分数据,与m个第二存储分区组对应的p个第二存储设备中的一个第二存储设备中存储的数据相同,l为小于p的正整数。

在一种可能的设计中,所述处理模块还用于:

将每个原始数据中的部分数据按照所述n个第二存储分区组中的一个第二存储分区组进行数据迁移,所述每个原始数据存储在所述m个第一存储分区组中的一个存储分区组对应的k个存储设备,所述每个原始数据中的部分数据与所述l个第二存储设备中的每个第二存储设备中存储的数据均不同。

在一种可能的设计中,在p小于k时,所述每个第一存储分区组对应的s个第一存储设备中的每个第一存储设备中存储的数据,与m个第二存储分区组对应的p个第二存储设备中的一个第二存储设备中存储的一部分数据相同,s为小于p的正整数。

在一种可能的设计中,所述处理模块还用于:

将每个原始数据中的部分数据按照所述n个第二存储分区组中的一个第二存储分区组进行数据迁移,所述每个原始数据存储在所述m个第一存储分区组中的一个存储分区组对应的k个存储设备,所述每个原始数据中的部分数据与所述p个第二存储设备中的每个第二存储设备中存储的任意一部分数据均不同。

在一种可能的设计中,所述n个第二存储分区组中的任意一个第二存储分区组对应的p个第二存储设备,与所述m个第一存储分区组中任意一个第一存储分区组中包括的k个第一存储设备不相同。

在一种可能的设计中,所述处理模块还用于:

将每个原始数据按照所述n个第二存储分区组中的一个第二存储分区组进行数据迁移,所述每个原始数据为,所述存储系统在所述第一拓扑结构时,按照所述m个第一存储分区组中的至少一个第一存储分区组存储所述存储系统中的数据。

第四方面,提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被计算机执行时,使所述计算机执行第一方面中任意一项所述的方法。

第五方面,提供一种计算机程序产品,所述计算机程序产品存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被计算机执行时,使所述计算机执行第一方面中任意一项所述的方法。

第六方面,提供了一种芯片系统,该芯片系统包括处理器,还可以包括存储器,用于实现第一方面所述的方法。该芯片系统可以由芯片构成,也可以包含芯片和其他分立器件。

上述第二方面至第六方面及其实现方式的有益效果可以参考对第一方面的方法及其实现方式的有益效果的描述。

附图说明

图1为本申请实施例中存储系统创建的10个pt在存储设备的分布情况示意图;

图2a为本申请实施例中与一组pt对应的视图的一种示例的示意图;

图2b为本申请实施例中与一组pt对应的视图的另一种示例的示意图;

图3a为本申请实施例中提供的存储系统的一种示例的示意图;

图3b为本申请实施例中提供的存储系统的另一种示例的示意图;

图3c为本申请实施例中提供的存储系统的另一种示例的示意图;

图4为本申请实施例中提供一种数据存储方法的一种示例的流程图;

图5为本申请实施例中存储系统的6个pt的一种示例的示意图;

图6为本申请实施例中存储系统在第一拓扑结构下的第一视图的一种示例的示意图;

图7a为本申请实施例中存储系统在第二拓扑结构下的第二视图的一种示例的示意图;

图7b为本申请实施例中存储系统在第二拓扑结构下的第二视图的另一种示例的示意图;

图7c为本申请实施例中存储系统在第二拓扑结构下的第二视图的另一种示例的示意图;

图8为本申请实施例中的数据存储方法的另一种示例的流程图;

图9为本申请实施例中与一组pt对应的视图的另一种示例的示意图;

图10为本申请实施例中存储系统的第一视图的另一种示例的示意图;

图11为本申请实施例中存储系统的第二视图的另一种示例的示意图;

图12为本申请实施例中提供的一种存储系统的数据存储装置的一种示例的结构示意图;

图13为本申请实施例中提供的一种存储系统的数据存储装置的另一种示例的结构示意图。

具体实施方式

为了使本申请实施例的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施例作进一步地详细描述。

以下,对本申请实施例中涉及的技术术语进行解释说明,以便于本领域技术人员理解。

1)分区(partition,pt),是存储系统的硬盘的基本存储单位,对pt进行的分组,每个pt只属于一个pt,每个pt包含多个pt。

2)数据冗余模式,也可以称为数据冗余级别,是为了防止数据丢失或者产生错误,在存储数据时采用的一种保护机制。通常来讲,实现数据冗余通常可以包括如下两种方式,即副本方式或者纠删码(erasurecoding,ec)方式,其中,副本方式可以理解为,将待存储的数据复制多份,例如,将待存储的数据复制为3份,然后将复制后的数据分别存储在不同的分区中,这样,当一个分区发生故障导致存储的数据丢失,该数据可以从其他分区中获取。在这种情况下,副本的数量即为数据冗余模式。ec方式可以理解为,将该待存储的数据分割成多份,然后对分割后的每一份数据进行编码,从而得到的多份数据分片,并根据多个数据分片生成校验部分,然后将数据分片和检验部分分别存储在不同的分区中,这样,该一个分区发生故障导致存储的数据丢失,可以根据其他存储节点上存储的数据分片以及校验部分,重构出该数据。在这种情况下,数据分片和检验部分的数量之和即为数据冗余模式,或者可以称为ec配比,例如,ec4+2模式,表示4个用于存储数据分片的分区,2个用于存储校验部分的分区;ec8+2模式,表示8个用于存储数据分片的分区,2个用于存储校验部分的分区。当然,当采用其他方式存储数据时,数据冗余模式也可以作类似的解释,在此不作限制。

3)存储设备,例如可以包括串行高级技术附件(serialadvancedtechnologyattachment,sata)硬盘、小型计算机系统接口(smallcomputersysteminterface,scsi)硬盘、串行连接scsi接口(serialattachedscsi,sas)、光纤通道接口(fibrechannel,fc)硬盘、机械硬盘(harddiskdrive,hdd)以及固态硬盘(solidstatedrive,ssd)等。

4)视图,是pt到存储设备(例如,硬盘)的映射表。请参考图1,为存储系统创建的10个pt在存储设备的分布情况示意图。在图1中,以每组pt包括6个pt为例,同颜色的6个pt为同一组pt,a~j分别表示不同的存储设备,例如,第一组pt的6个pt位于存储设备a~存储设备f上,第二组pt的6个pt位于存储设备b~存储设备g上,以此类推。以ec方式存储数据且数据冗余模式为ec4+2为例,针对第一组pt,可以得到如图2a所示的视图,其中,d1~d4表示第一组pt中的4个用于存储数据分片的pt,p和q分别用于存储校验部分的pt,括号中的字符表示该pt所属的存储设备,针对第二组pt,可以得到如图2b所示的视图,针对其他pt也是同样的,在此不再赘述。在图2a和图2b所示的视图中,以硬盘编号从小到大进行排列,但在实际中的视图也可能是乱序的,在此不作限制。

5)本申请实施例中“多个”是指两个或两个以上,鉴于此,本申请实施例中也可以将“多个”理解为“至少两个”。“至少一个”,可理解为一个或多个,例如理解为一个、两个或更多个。例如,包括至少一个,是指包括一个、两个或更多个,而且不限制包括的是哪几个,例如,包括a、b和c中的至少一个,那么包括的可以是a、b、c、a和b、a和c、b和c、或a和b和c。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。另外,字符“/”,如无特殊说明,一般表示前后关联对象是一种“或”的关系。

除非有相反的说明,本申请实施例提及“第一”、“第二”等序数词用于对多个对象进行区分,不用于限定多个对象的顺序、时序、优先级或者重要程度。

以上介绍了本申请所涉及的一些概念,下面,对本申请的技术背景进行说明。

存储系统起初以存储设备(例如,hdd)为单位做冗余,例如,数据冗余模式为ec8+2,则固定使用存储系统中的8块硬盘作为数据盘,存放数据分片,固定使用存储系统中的2块硬盘作为校验盘,存放根据数据分片生成的校验部分。由于数据盘和检验盘是固定的,所有数据的校验部分都写在这2个校验盘中,这样,当需要更新任意一个数据盘中的数据时,都需要同时更新2个校验盘,从而使得2个校验盘由于访问频率过高或者访问次数过多而成为存储系统的瓶颈。

为了避免某些固定的硬盘成为瓶颈,业界推出了将数据分片和校验部分打散后进行存储的技术,也就是说,灵活地分配数据分片和校验部分的存储位置,让每个硬盘都可以存放数据分片和校验部分,然而,由于数据分片和校验部分所在的存储位置不固定,则对于每一个pt,都需要记录其对应的多个硬盘的编号等信息,开销比较大。由于上述问题,提出了前述的通过虚拟化技术对硬盘进行分区的方法,在创建若干个pt后,生成与该若干个pt对应的视图,从而根据该视图进行数据的读写操作。

由于该视图在创建pt时已经生成,这样,当存储系统扩容时增加存储节点或者某些存储节点发生故障,会存在存储系统中的空间利用率较低的问题。

鉴于此,本申请实施例提供一种存储系统的数据存储方法,在该方法中,在存储系统的拓扑结构为第一拓扑结构时,生成与该第一拓扑结构对应的m个第一存储分区组,该m个第一存储分区组中的每个第一存储分区组对应k个第一存储设备,即获得与第一拓扑结构对应的第一视图,在存储系统的拓扑结构由第一拓扑结构更新为与所述第一拓扑结构不同的第二拓扑结构时,则生成与该第二拓扑结构对应的n个第二存储分区组,该n个第二存储分区组中的每个第二存储分区组对应p个第二存储设备,即获得与第二拓扑结构对应的第二视图,然后,使用该n个第二存储分区组更新该存储系统中存储的m个第一存储分区组,这样,在接收待存储的新数据后,将该待存储的新数据存储在与该n个第二存储分区组中的至少一个第二存储分区组对应的第二存储设备中,n、p、m和k为正整数。也就是说,在本申请实施例中的方法,存储系统支持动态的存储分区组(或视图),当存储系统的拓扑结构发生变化时,存储系统的存储分区组(或视图)也会发生改变,例如,存储系统由3个存储节点且每个存储节点有3个硬盘,为避免发生单节点故障而导致整个存储系统无法使用的问题,该存储系统中每一个存储分区组中可以包括4个数据盘和2个校验盘,在这种情况下,存储系统的空间利用率为4/(4+2)=66.6%;当存储系统发生扩容,扩容到5个存储节点且每个存储节点有3个硬盘,则存储系统可以生成新的存储分区组,每个存储分区组中可以包括8个数据盘和2个检验盘,则空间利用率为8/(8+2)=80%,从而可以提高存储系统的空间利用率。当存储系统发生减容,由于3个存储节点中的某一个硬盘发生故障,则存储系统也可以生成新的存储分区组以适应减容后的存储系统,新的存储分区组中的每一个存储分区组都可以使用,可以提高存储系统的空间利用率。

本申请实施例中的技术方案应用于存储系统中,该存储系统可以为文件存储系统、块存储系统或者对象存储系统,或者上述存储系统的组合,在本申请实施例中不作限制。

图3a示出了本申请实施例中所涉及的存储系统的一种示例,如图3a所示,该存储系统包括一个控制器301以及用于存储数据的多个存储节点302,该多个存储节点构成的一种耦合的节点集合,协同起来对外提供服务,存储节点也可以称为存储机架。如图3a所示,该存储系统中包括存储机架1~存储机架3。每个存储机架中包括多个硬盘,该硬盘可以为hdd盘,多个硬盘构成存储服务器,在图3a中,3个硬盘构成一个存储服务器。至少一个存储服务器构成一个存储机架,在图3a中,1个存储服务器构成一个存储机架。控制器301用于根据存储系统的拓扑结构生成存储分区组,并对操作请求进行管理,例如处理写操作的请求,根据该存储分区组将数据写入对应的存储介质中,或者处理读操作的请求,根据存储分区组从对应的存储介质中获取数据等,控制器301可以为中央处理器(centralprocessingunit,cpu)、特定应用集成电路(application-specificintegratedcircuit,asic)或者现场可编程门阵列(field-programmablegatearray,fpga)等。

与图3a所示的架构不同的是,在图3b所示的架构中包括多个控制器,例如控制器a和控制器b,控制器a和控制器b之间可以进行通信,这样,当该存储系统中的某一个控制器发生故障时,该集群存储系统仍然可以通过其他的控制器为与该存储系统交互的其他设备(例如客户端)提供服务。

需要说明的是,存储系统不限于如图3a和图3b所示的架构,例如,存储系统中还可以包括更多的存储节点,例如,如图3c所示,存储系统中可以包括5个存储节点。存储系统中还可以包括其他的设备,例如仲裁服务器等,本申请实施例描述的存储系统是为了更加清楚的说明本申请实施例的技术方案,并不构成对于本申请实施例提供的技术方案的限定,本领域普通技术人员可知,随着存储技术和存储系统架构的演变,本申请实施例提供的技术方案对于类似的技术问题,同样适用。

下面结合附图介绍本申请实施例提供的技术方案。

本申请实施例提供一种数据存储方法,请参见图4,为该方法的流程图。在下面的介绍中,以该方法应用在图3a所示的存储系统中为例,也就是说,该方法由图3a所示的存储系统中的控制器执行。

s41、存储系统的控制器生成并存储与第一拓扑结构对应的m个第一存储分区组,该m个第一存储分区组中的每个第一存储分区组对应k个第一存储设备。

在本申请实施例中,k的值与该存储系统在该第一拓扑结构下所配置的数据冗余模式相同,m、k为正整数。

作为一种示例,在图3a所示的存储系统中,包括3个存储节点,每个存储节点包括4个硬盘,共12个硬盘,各个硬盘依次标记为硬盘1~硬盘12。该存储系统配置的数据冗余模式为ec4+2模式,假设该存储系统创建6个pt,则每个pt中包括6个分区,其中数据分片占用4个分区,检验部分占用2个分区,从而得到如图5所示的pt。然后,采用数据排布算法,将该6个pt映射到6个硬盘的分区中。其中,数据排布算法可以是轮询算法,也就是说,从存储系统中的第一个硬盘开始,例如,第一个pt中的d1映射到硬盘1中的分区,然后,依次增加硬盘的编号,选择对应的硬盘映射第一pt中的d2,也就是说将第一个pt的d2映射到硬盘2的分区中,以此类推,直至将每个pt中pt映射至各个硬盘的分区。或者,该数据排布算法也可以是哈希算法,例如,根据pt中pt的编号和硬盘的编号,采用哈希算法,例如消息摘要算法5(message-digestalgorithmfive,md5)或者mmh3算法等,计算出每个pt中的pt所映射的硬盘的编号。当然,还可以使用其他数据排布算法,在此不作限制。

需要说明的是,数据排布算法需要满足如下条件:

1)数据安全性。

在将pt映射至硬盘时,同一pt中的各个pt应尽量分布到不同的安全级别的存储设备中。其中,各种存储设备的安全级别可以由技术人员配置,例如,安全级别从高到底的排序依次为:存储机架>存储服务器>硬盘。也就是说,如果存储设备中有存储服务器和存储机架,则可以让每个pt中的pt分布在不同的存储服务器或者不同的存储机架上,从而可以使得数据安全性更高。例如,在图3a所示的存储系统中,包括3个存储机架,则可以让一个pt中的6个pt均匀地分布在3个存储机架中,也就是说,每个存储机架中可以映射2个pt。且由于一个存储机架中包括2个存储服务器,则可以将一个存储机架中的2个pt分别映射至不同的存储服务器中。

2)数据均衡性。

在将pt映射至硬盘时,尽量让每个硬盘上的pt的数量尽量与该硬盘的容量成正比,例如,硬盘1的容易为2m,硬盘2的容量为1m,则可以将一个pt中的2个pt映射在硬盘1上,而将一个pt中的1个pt映射在硬盘2上,从而可以防止由于某一个硬盘上的访问次数过多而造成该硬盘成为热点。若存储系统中各个硬盘的容量相同,则每个硬盘中可以分布相同数量的pt。

3)数据类型均衡性。

在将pt映射至硬盘时,每个硬盘上的位于多个pt中相同位置的pt数量尽量与该硬盘容量成正比,例如,在图1所示的10个pt中,以每个pt中的第一个pt(位置为1的pt)为例,10个pt中的第一个pt均匀分布在了硬盘a~硬盘j这10硬盘中,也就是说,每个硬盘中分布了一个位置为1的pt,而针对其他位置的pt与第一个pt一样,都是均匀分布在硬盘a~硬盘j中,这样可以避免由于小文件不满条带时,也就是说存储该小文件可能只使用了4个用于存储数据分片的分区中的2个分区,如果对该小文件进行读写时,只会访问与前2个分区对应的硬盘,而对于与后2个分区对应的硬盘则不会访问,从而使得与前2个分区对应的硬盘成为热点的问题。

4)数据恢复均衡性。

也就是说,假设某个pt内的一个pt所在的硬盘发生故障,则需要从该pt内的其他pt所在的硬盘读取数据,用于恢复故障硬盘上的数据,对于数据冗余模式为ec4+2模式的存储系统来说,每个映射到该故障硬盘的pt都要从其他5个硬盘中读取数据,在这种情况下,从每个pt从其他的每个非故障的硬盘中读取的数据的总量应该尽量相等。

在本申请实施例中,以控制器采用轮询算法,将6个pt映射至12个硬盘为例,得到如图6所示的第一视图。在图6中,pt1、pt3以及pt5对应的6个pt映射在硬盘1~硬盘6中,其中,4个数据盘为硬盘1~硬盘4,硬盘5和硬盘6为检验盘,pt2、pt4以及pt6对应的6个pt映射在硬盘7~硬盘12中,其中,4个数据盘为硬盘7~硬盘10,硬盘11和硬盘12为检验盘。

s42、存储系统的控制器在接收到待存储的数据后,确定将该待存储的数据存储在m个第一存储分区组中的至少一个分区组中。

作为一种示例,假设每一个pt能够存储128兆字节(megabyte,mb)的数据,那么,当存储系统的控制器接收到大小为256mb的数据时,控制器可以根据预设的规则,从多个pt中选择2个pt用于存储该数据。该预设的规则可以是从未使用的多个pt中依次选取所需要的若干个pt,例如,该数据为存储系统的控制器接收到的第一个数据,也就是说在此之前,该存储系统中未存储任何数据,则控制器可以选择pt1和pt2用于存储该数据。或者,也可以是随机从未使用的多个pt中进行选择,例如,控制器随机选择pt1以及pt3用于存储该数据。然后,控制器则该256mb的数据分为2份,每份数据分为4个数据分片,每个数据分片的大小为32mb,然后,根据每份数据中的4个数据分片的内容生成2个校验部分,最后,根据每份数据的4个数据分片以及2个校验部分,生成与该数据对应的数据存储指令,该数据存储指令中包括该硬盘需要存储的数据分片或者检验部分。

作为另一种示例,存储系统的控制器可以采用打散机制存储数据。例如,控制器接收到大小为32k的数据,则控制器会以8k为粒度,将该数据打散,从而分成4个大小为8k的数据,然后再将这4个大小为8k的数据分别存储到不同的pt中。

当然,存储系统的控制器也可以使用其他方式选择对应的pt,在此不作限制。为方便说明书,在下文中,以存储系统的控制器选择pt1和pt3用于存储该数据为例。

s43、存储系统的控制器向至少一个存储节点发送数据存储指令,该至少一个存储节点接收该数据存储指令,至少一个存储节点接收该数据存储指令,并执行该数据存储指令。

由图6可知,与pt1对应的硬盘为硬盘1~硬盘6,与pt3对应的硬盘也为硬盘1~硬盘6,因此,存储系统的控制器则将向为与硬盘1~硬盘6分别对应的存储节点(也就是存储节点1~存储节点3)分别发送数据存储指令。存储节点1~存储节点3中的每个存储节点在接收该数据存储指令后,则将该数据存储指令中携带的数据分片或者检验部分,存储在对应的分区中,从而完成该数据存储过程。

s44、至少一个存储节点中的每个存储节点向存储系统的控制器发送心跳,存储系统的控制器接收该心跳。

在本申请实施例中,每个存储节点向存储系统的控制器发送的心跳,可以理解为一个自定义的信息,例如心跳包或心跳帧,让接收方知道自己“在线”,以确保连接的有效性。心跳的具体内容可以是dns与客户端约定的内容,或者,是可以包括该节点中每个服务器以及每个硬盘的状态的信息,当然,也可以是只包括包头的一个空包,在此不作限制。每个存储节点可以按照一定的时间间隔自动向存储系统的控制器发送心跳,也可以是先由存储系统的控制器向每个存储节点发送查询信息,处于“在线”状态的存储节点在接收到查询信息后,则向控制器反馈心跳。在本申请实施例中,以每个存储节点以一定的时间间隔自动向控制器发送心跳为例。

步骤s44为可选步骤,即不是必须要执行的。在图4中以虚线表示。

s45、存储系统的控制器确定存储系统扩容。

在本申请实施例中,存储系统扩容可以理解为,存储系统的拓扑结构由该第一拓扑结构更新为第二拓扑结构,且第二拓扑结构中的存储节点的数量变大。

当存储系统的控制器接收到每个存储节点的心跳后,可以根据在预设时间段内接收到的心跳的数量,确定该存储系统中的存储节点的数量。例如,在图3a所示的存储系统中,存储系统的控制器可以接收3个存储节点发送的心跳,从而确定该存储系统中有3个存储节点。若接收到的每个心跳中还包括该节点中的服务器以及硬盘的状态,则控制器可以获知在每个存储节点中存储设备的数量以及状态,这样,当存储节点中的存储设备(例如某个硬盘)发生故障后,存储系统的控制器可以根据该存储节点的心跳,确定该存储设备不可用,从而在进行数据存储时,不使用与该存储设备对应的pt。

由于存储系统是一个动态的系统,存储系统有可能发生扩容,例如,由于需要存储的数据量增大,从而增加存储机架、存储服务器和硬盘,也有可能发生减容,例如存储系统的规模减小或存储设备损坏而减少等。以存储系统发生扩容为例,存储系统由图3a所示的拓扑结构变更为图3c所示的拓扑结构,即增加了2个存储节点,每个存储节点中包括4个硬盘,则存储系统的控制器在存储系统扩容后,在预设时间段内接收到5个存储节点的心跳,从而确定出该存储系统的拓扑结构由具有3个存储节点的第一拓扑结构扩容为具有5个存储节点的第二拓扑结构。

当然,存储系统的控制器也可以采用其他方式确定存储系统的拓扑结构是否发生变化,在此不作限制,在本申请实施例中,以存储系统的控制器通过心跳确定存储系统的拓扑结构发生变化为例。

s46、存储系统的控制器生成与该第二拓扑结构对应的n个第二存储分区组,该n个第二存储分区组中的每个第二存储分区组对应p个第二存储设备。

在本申请实施例中,p的值与该存储系统在该第二拓扑结构下所配置的数据冗余模式相同,n和p为正整数。

作为一种示例,存储系统中存储各种拓扑结构与数据冗余模式的对应关系,请参考表1。在表1,当存储系统的拓扑结构为3个存储节点时,该存储系统可以包括ec4+2或者ec3+3这两种数据冗余模式,当存储系统的拓扑结构为5个存储节点时,该存储系统可以包括ec8+2、ec6+3或者ec6+2等多种数据冗余模式,当存储系统为其他拓扑结构时,则对应其他的数据冗余模式,在此不一一列举。

表1

这样,当存储系统的控制器确定存储系统的拓扑结构发生变化,例如,由图3a所示的3个存储节点的第一拓扑结构变为图3c所示的5个存储节点的第二拓扑结构,则可以根据预存的各种拓扑结构对应的数据冗余模式的对应关系,确定存储系统在第二拓扑结构下所配置的数据冗余模式,然后则根据确定的数据冗余模式,生成与第二拓扑结构对应的n个第二存储分区组。

需要说明的是,在上述描述中,以存储节点的数量为例来描述拓扑结构,在实际应用中,拓扑结构的变化可能不止包括存储节点的数量的变化,例如,每个存储节点中包括的存储服务器以及硬盘的数量发生变化等,在这种情况下,也可以根据存储服务器以及硬盘的数量来定义拓扑结构是否发生变化,以及在每种拓扑结构下所配置的数据冗余模式,具体过程与前述以存储节点的数量为例来描述拓扑结构时的相应内容相似,在此不再赘述。

在本申请实施例中,以存储系统由图3a所示的3个存储节点的第一拓扑结构变为图3c所示的5个存储节点的第二拓扑结构,且存储系统的控制器确定在第二拓扑结构下配置的数据冗余模式为ec8+2,也就是说,在第二拓扑结构下,一个pt中包括10个pt,其中8个pt用于存储数据分片,2个pt用于存储校验部分,即p大于k,存储系统的控制器生成与第二拓扑结构对应的n个第二存储分区组可以包括但不限于如下两种方式。

第一种方式,不考虑在第一拓扑结构下的m个第一存储分区组,生成n个第二存储分区组。

作为一种示例,存储系统的控制器首先创建6个pt,每个pt中包括10个分区,其中数据分片占用8个分区,检验部分占用2个分区,控制器可以采用与s41中相同的数据排布算法,例如,轮询算法或者哈希算法等,将该6个pt映射到存储系统的5个存储节点(一共有20个硬盘)上。

在这种方式下,与第二拓扑结构对应的n个第二存储分区组可以包括如下两种情况:

情况a,每个第一存储分区组中的l个位置处的第一存储设备与对应的第二存储分区组中对应的l个位置上的第二存储设备是同一个存储设备,l为正整数。

请参考图7a,为第二视图的一种示例,在图7a中,n的取值为6。如图7a所示,每一个第二存储分区组中的前4个硬盘中,均有1个位置的硬盘编号与第一视图中相同位置的硬盘编号相同,例如,在图7a所示的视图中,pt1的d3所在的硬盘为硬盘3,在图6所示的视图中,pt1的d3所在的硬盘也为硬盘3;在图7a所示的视图中,pt2的d3所在的硬盘为硬盘9,在图6所示的视图中,pt2的d3所在的硬盘也为硬盘9;在图7a所示的视图中的pt3的d1所在的硬盘与图6所示的视图中的pt3的d1所在的硬盘相同,对于其他的pt中也有类似的情况,在此不一一列举,在这种情况下,l的取值为1。在图7a中以阴影部分表示第一视图和第二视图中相同的硬盘。

情况b,n个第二存储分区组中的任意一个第二存储分区组对应的p个第二存储设备,与m个第一存储分区组中任意一个第一存储分区组中包括的k个第一存储设备不相同。

请参考图7b,为第二视图的一种示例,在图7b中,n的取值为6。如图7b所示,每一个第二存储分区组中前4个pt所映射的4个硬盘对应的硬盘编号与第一视图中对应的第一存储分区组的前4个pt所映射的4个硬盘对应的硬盘编号完全不同,例如,在图7b所示的视图中,pt1的d1所在的硬盘为硬盘14,d2所在的硬盘为硬盘15,d3所在的硬盘为硬盘4,d4所在的硬盘为硬盘3,在图6所示的视图中,pt1的d1所在的硬盘为硬盘1,d2所在的硬盘为硬盘2,d3所在的硬盘为硬盘3,d4所在的硬盘为硬盘4;在图7b所示的视图中,pt2的d1所在的硬盘为硬盘17,d2所在的硬盘为硬盘19,d3所在的硬盘为硬盘10,d4所在的硬盘为硬盘9,在图6所示的视图中,pt2的d1所在的硬盘为硬盘7,d2所在的硬盘为硬盘8,d3所在的硬盘为硬盘9,d4所在的硬盘为硬盘10,对于其他的pt中也有类似的情况,在此不一一列举。

在这种情况下,当存储系统的拓扑结构发生变化,存储系统可以支持动态的视图,即当存储系统的拓扑结构发生变化,则对应的视图也可以发生变化,例如,增加每个pt中的pt数量,可以提高存储系统的存储空间的利用率。

第二种方式,考虑在第一拓扑结构下的m个第一存储分区组,生成n个第二存储分区组,也就是说,与第一拓扑结构下的m个第一存储分区组对应的第一视图与在第二拓扑结构下的n个第二存储分区组对应的第二视图联动,第二视图会考虑第一视图中同位置的pt的布局,在保证可靠性、均衡性、恢复均衡等约束的前提下,尽量保证每个pt中相同位置的pt落入相同的硬盘中。

作为一种示例,存储系统的控制器可以多次采用与s41中相同的数据排布算法,例如,轮询算法或者哈希算法等,获取与该6个pt对应的多个第二视图,然后根据该多个第二视图与该第一视图的联动情况,从该多个第二视图中选择每个pt中相同位置的pt落入相同的硬盘的最多的一个第二视图,作为在第二拓扑结构下的m个第二存储分区组的第二视图。

请参考图7c,为第二视图的一种示例,在图7c中,n的取值为6。如图7c所示,每一个第二存储分区组中的前4个硬盘中,均有2个位置的硬盘编号与第一视图中相同位置的硬盘编号相同,例如,在图7c所示的视图中,pt1的d3所在的硬盘为硬盘3,d4所在的硬盘为硬盘4,在图6所示的视图中,pt1的d3所在的硬盘也为硬盘3,d4所在的硬盘也为硬盘4;在图7c所示的视图中,pt2的d3所在的硬盘为硬盘9,d4所在的硬盘为硬盘10,在图6所示的视图中,pt2的d3所在的硬盘也为硬盘9,d4所在的硬盘也为硬盘10;对于其他的pt中也有类似的情况,在此不一一列举。在图7c中以阴影部分表示第一视图和第二视图中相同的硬盘。

在这种情况下,由于新生成的第二视图是基于原有的第一视图进行扩展的,这样,每个pt中相同位置的pt中的数据则可以不用迁移,从而可以减少数据迁移的数量,避免占用较多的带宽资源或者输入/输出(input/output,i/o)资源,从而可以将更多的带宽资源或者i/o资源用于业务服务,可以提高存储系统的业务服务能力。

s47、存储系统的控制器使用该n个第二存储分区组更新该存储系统中存储的m个第一存储分区组。

当存储系统的控制器获取在第二拓扑结构下的n个第二存储分区组之后,则可以使用该n个第二存储分区组替换存储系统中存储的m个第一存储分区组,也就是说,存储系统中只存储一种存储分区组,且该存储系统中存储的存储分区组是与存储系统当前的拓扑结构所对应的。

或者,存储系统的控制器也可以存储多种不同的存储分区组,例如,存储系统中存储两种类型的存储分区组,分别为存储系统在第一拓扑结构下的m个第一存储分区组以及存储系统在第二拓扑结构下的n个第二存储分区组。这样,针对已经按照m个第一存储分区组中的若干第一存储分区组进行存储的数据,则可以不用进行数据迁移,从而可以减少数据迁移所消耗的资源。

s48、存储系统的控制器针对已经按照m个第一视图中至少一个第一存储分区组存储的数据进行数据迁移。

在本申请实施例中,根据s46中生成n个第二存储分区组的方式的不同,存储系统的控制器迁移数据的方式也不一样。

针对s46中的第一种方式的情况a,由于每个第一存储分区组中的l个位置处的第一存储设备与对应的第二存储分区组中对应的l个位置上的第二存储设备是同一个存储设备,也就是说,每个第一存储分区组对应的l个第一存储设备中的每个第一存储设备中存储的一部分数据,需要与m个第二存储分区组对应的p个第二存储设备中的一个第二存储设备中存储的数据相同,从而,存储系统的控制器将每个存储在该m个第一存储分区组中的一个存储分区组对应的k个存储设备的原始数据中的部分数据按照该n个第二存储分区组中的一个第二存储分区组进行数据迁移,该每个原始数据中的部分数据与该l个第二存储设备中的每个第二存储设备中存储的数据均不同。

作为一种示例,由图7a可知,6个pt中的每一个pt中有一个pt所在的硬盘与第一存储分区组中相应的pt中的pt所在的硬盘相同,例如,图7a所示pt1的d3所在的硬盘为硬盘3,在图6所示的视图中,pt1的d3所在的硬盘也为硬盘3,从而,针对存储在图6所示的pt1中的数据,可以只迁移d1、d2、d4即可,而可以不用迁移d3。每个校验部分需要根据迁移后的多个数据分片重新生成。这样,存储系统的拓扑结构由3存储节点扩容到5个存储节点时,可以减少1/4=25%的数据迁移,可以节省存储系统的资源。

针对s46中的第一种方式的情况b,由于n个第二存储分区组中的任意一个第二存储分区组对应的p个第二存储设备,与m个第一存储分区组中任意一个第一存储分区组中包括的k个第一存储设备不相同,从而,存储系统的控制器将按照该m个第一存储分区组中的至少一个第一存储分区组存储的每个原始数据,按照该n个第二存储分区组中的一个第二存储分区组进行数据迁移。

作为一种示例,由图7b可知,6个pt中的每一个pt中的多个pt所在的硬盘与第一存储分区组中相应的pt中的多个pt所在的硬盘不同,例如,图7a所示pt1的d1~d4所在的硬盘与在图6所示的视图中的pt1的d1~d4所在的硬盘不同,从而,针对存储在图6所示的pt1中的数据,需要全部迁移到与图7a所示的pt1对应的硬盘中,每个校验部分需要根据迁移后的多个数据分片重新生成。

针对s46中的第二种方式,可以参照针对s46中的第一种方式的情况a的说明,在此不再赘述。需要说明的是,由于在生成n个第二存储分区组时考虑到m个第一存储分区组,也就是说,每个pt中有更多个相同位置的pt落入相同的硬盘中,因此,相较于针对s46中的第一种方式的情况a中的需要迁移的数据的数据量来说,在这种情况下,需要迁移的数据的数据量更少,从而可以进一步减少进行数据迁移时所消耗的存储系统的资源。

需要说明的是,步骤s48为可选步骤,即不是必须要执行的。例如,一些日志型的存储系统,也可以扩容后不迁移数据,新加入的存储节点和硬盘在后续会多写数据,逐渐追平容量,举例来说,第二视图基于原有的第一视图产生,在视图变更前,增加d5、d6、d7、d8四个partition,按照第一视图存储在该存储系统中的数据随着垃圾回收逐渐适配到第二视图。在图4中,以虚线表示步骤s48为可选步骤。

s49、存储系统的控制器在接收待存储的新数据后,将该待存储的新数据存储在与该n个第二存储分区组中的至少一个第二存储分区组对应的第二存储设备中。

当存储系统的控制器生成n个第二存储分区组之后,在接收到待存储的数据时,则按照该n个第二存储分区组进行数据存储,具体的数据存储过程与步骤s42中相同,在此不再赘述。

在上述技术方案中,存储系统支持动态的存储分区组(或视图),当存储系统的拓扑结构发生变化时,存储系统的存储分区组(或视图)也会发生改变,例如,当存储系统扩容后,存储系统中的数据可以同步到采用更高的数据冗余模式进行数据存储,从而可以提高存储系统的空间利用率。

在图4所示的实施例中,对存储系统扩容时的处理过程进行了说明。下面,对存储系统减容时的处理过程进行说明。请参考图8,为本申请实施例中的数据存储方法的另一种示例的流程图。在下面的介绍中,以该方法应用在图3c所示的存储系统中为例,也就是说,该方法由图3c所示的存储系统中的控制器执行。

s81、存储系统的控制器生成并存储与第一拓扑结构对应的m个第一存储分区组,该m个第一存储分区组中的每个第一存储分区组对应k个第一存储设备。

作为一种示例,在图3c所示的存储系统中,包括5个存储节点,每个存储节点包括4个硬盘,共20个硬盘,各个硬盘依次标记为硬盘1~硬盘20。该存储系统配置的数据冗余模式为ec8+2模式,假设该存储系统创建6个pt,则每个pt中包括10个pt,其中数据分片占用8个分区,检验部分占用2个分区,从而得到如图9所示的pt。

在本申请实施例中,以控制器采用轮询算法,将6个pt映射至20个硬盘为例,得到如图10所示的第一视图。在图10中,pt1、pt3以及pt5对应的10个pt映射在硬盘1~硬盘10中,其中,8个数据盘为硬盘1~硬盘8,硬盘9和硬盘10为检验盘,pt2、pt4以及pt6对应的10个pt映射在硬盘11~硬盘20中,其中,8个数据盘为硬盘11~硬盘18,硬盘19和硬盘20为检验盘。

s82、存储系统的控制器在接收到待存储的数据后,确定将该待存储的数据存储在m个第一存储分区组中的至少一个分区组中。

s83、存储系统的控制器向至少一个存储节点发送数据存储指令,该至少一个存储节点接收该数据存储指令,至少一个存储节点接收该数据存储指令,并执行该数据存储指令。

s84、至少一个存储节点中的每个存储节点向存储系统的控制器发送心跳,存储系统的控制器接收该心跳。

s85、存储系统的控制器确定存储系统减容。

在本申请实施例中,存储系统减容可以理解为,存储系统的拓扑结构由该第一拓扑结构更新为第二拓扑结构,且第二拓扑结构中的存储节点的数量变小。

步骤s81~步骤s85与步骤s41~步骤s45相似,在此不再赘述。

s86、存储系统的控制器生成与该第二拓扑结构对应的n个第二存储分区组,该n个第二存储分区组中的每个第二存储分区组对应p个第二存储设备。

当存储系统的控制器确定存储系统的拓扑结构发生变化,则存储系统的控制器可以采用表1所示的拓扑结构与数据冗余模式的对应关系,确定与第二拓扑结构对应的数据冗余模式。该过程与s46中相应的内容相似,在此不再赘述。

在本申请实施例中,以存储系统由图3c所示的5个存储节点的第一拓扑结构变为图3a所示的3个存储节点的第二拓扑结构,且存储系统的控制器确定在第二拓扑结构下配置的数据冗余模式为ec4+2,也就是说,在第二拓扑结构下,一个pt中包括6个pt,其中4个pt用于存储数据分片,2个pt用于存储校验部分,即p小于k,存储系统的控制器生成与第二拓扑结构对应的n个第二存储分区组可以包括但不限于两种方式,第一种方式,不考虑在第一拓扑结构下的m个第一存储分区组,生成n个第二存储分区组;第二种方式,考虑在第一拓扑结构下的m个第一存储分区组,生成n个第二存储分区组,这两种方式与步骤s46中相应的内容相似,在此不再赘述。

以第二种方式为例进行说明,作为一种示例,存储系统的控制器可以多次采用与s41中相同的数据排布算法,例如,轮询算法或者哈希算法等,获取与该6个pt对应的多个第二视图,然后根据该多个第二视图与该第一视图的联动情况,从该多个第二视图中选择每个pt中相同位置的pt落入相同的硬盘的最多的一个第二视图,作为在第二拓扑结构下的m个第二存储分区组的第二视图。

请参考图11,为第二视图的一种示例,在图11中,n的取值为6。如图11所示,每一个第二存储分区组中的4个硬盘中,均有2个位置的硬盘编号与第一视图中相同位置的硬盘编号相同,例如,在图11所示的视图中,pt1的d3所在的硬盘为硬盘3,d4所在的硬盘为硬盘4,在图10所示的视图中,pt1的d3所在的硬盘也为硬盘3,d4所在的硬盘也为硬盘4;在图11所示的视图中,pt2的d3所在的硬盘为硬盘9,d4所在的硬盘为硬盘10,在图10所示的视图中,pt2的d3所在的硬盘也为硬盘9,d4所在的硬盘也为硬盘10;对于其他的pt中也有类似的情况,在此不一一列举。

s87、存储系统的控制器使用该n个第二存储分区组更新该存储系统中存储的m个第一存储分区组。

s88、存储系统的控制器针对已经按照m个第一视图中至少一个第一存储分区组存储的数据进行数据迁移。

在本申请实施例中,根据s86中生成n个第二存储分区组的方式的不同,存储系统的控制器迁移数据的方式也不一样。以图11所示的方式为例,由于每个第一存储分区组中的s个位置处的第一存储设备与对应的第二存储分区组中对应的s个位置上的第二存储设备是同一个存储设备,也就是说,每个第一存储分区组对应的s个第一存储设备中的每个第一存储设备中存储的数据,与m个第二存储分区组对应的p个第二存储设备中的一个第二存储设备中存储的一部分数据相同,s为小于p的正整数,从而存储系统的控制器将每个存储在该m个第一存储分区组中的一个存储分区组对应的k个存储设备的原始数据中的部分数据按照该n个第二存储分区组中的一个第二存储分区组进行数据迁移,该每个原始数据中的部分数据与所述p个第二存储设备中的每个第二存储设备中存储的任意一部分数据均不同。

作为一种示例,由图11可知,6个pt中的每一个pt中有2个pt所在的硬盘与第一存储分区组中相应的pt中的pt所在的硬盘相同,例如,在图11所示的视图中,pt1的d3所在的硬盘为硬盘3,d4所在的硬盘为硬盘4,在图10所示的视图中,pt1的d3所在的硬盘也为硬盘3,d4所在的硬盘也为硬盘4,从而,针对存储在图10所示的pt1中的数据,可以只迁移d1、d2、d5~d8即可,而可以不用迁移d3和d4。每个校验部分需要根据迁移后的多个数据分片重新生成。

针对与生成n个第二存储分区组的其他方式对应的数据迁移过程,请参考步骤s48中的内容,在此不再赘述。

s89、存储系统的控制器在接收待存储的新数据后,将该待存储的新数据存储在与该n个第二存储分区组中的至少一个第二存储分区组对应的第二存储设备中。

在上述技术方案中,存储系统支持动态的存储分区组(或视图),当存储系统的拓扑结构发生变化时,存储系统的存储分区组(或视图)也会发生改变,例如,当存储系统发生减容,由于5个存储节点中的2个存储节点发生故障,则存储系统也可以生成新的存储分区组以适应减容后的存储系统,新的存储分区组中的每一个存储分区组都可以使用,可以提高存储系统的空间利用率。

上述本申请提供的实施例中,分别从存储系统的控制器以及存储节点之间交互的角度对本申请实施例提供的方法进行了介绍。为了实现上述本申请实施例提供的方法中的各功能,存储系统的控制器可以包括硬件结构和/或软件模块,以硬件结构、软件模块、或硬件结构加软件模块的形式来实现上述各功能。上述各功能中的某个功能以硬件结构、软件模块、还是硬件结构加软件模块的方式来执行,取决于技术方案的特定应用和设计约束条件。

图12示出了一种存储系统的数据存储装置1200的结构示意图。其中,数据存储装置1200可以是存储系统的控制器,能够实现本申请实施例提供的方法中存储系统的控制器的功能;数据存储装置1200也可以是能够支持存储系统的控制器实现本申请实施例提供的方法中存储系统的控制器的功能的装置。数据存储装置1200可以是硬件结构、软件模块、或硬件结构加软件模块。数据存储装置1200可以由芯片系统实现。本申请实施例中,芯片系统可以由芯片构成,也可以包含芯片和其他分立器件。

数据存储装置1200可以包括通信模块1201以及处理模块1202。

通信模块1201可以用于执行图4所示的实施例中的步骤s43以及步骤s44,或用于执行图8所示的实施例中的步骤s83以及步骤s84,和/或用于支持本文所描述的技术的其它过程。通信模块1201用于数据存储装置1200和其它模块进行通信,其可以是电路、器件、接口、总线、软件模块、收发器或者其它任意可以实现通信的装置。

处理模块1202可以用于执行图4所示的实施例中的步骤s41~步骤s42以及步骤s45~步骤s49,或用于执行图8所示的实施例中的步骤s81~步骤s82以及步骤s85~步骤s89,和/或用于支持本文所描述的技术的其它过程。

其中,上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。

本申请实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,另外,在本申请各个实施例中的各功能模块可以集成在一个处理器中,也可以是单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。

如图13所示为本申请实施例提供的一种存储系统的数据存储装置1300,其中,数据存储装置1300可以是图4或图8所示的实施例中的存储系统的控制器,能够实现本申请图4实施例提供的方法中存储系统的控制器的功能;数据存储装置1300也可以是能够支持存储系统的控制器实现本申请图4或图8所示的实施例提供的方法中存储系统的控制器的功能的装置。其中,该数据存储装置1300可以为芯片系统。本申请实施例中,芯片系统可以由芯片构成,也可以包含芯片和其他分立器件。

数据存储装置1300包括至少一个处理器1320,用于实现或用于支持数据存储装置1300实现本申请图4或图8所示的实施例提供的方法中存储系统的控制器的功能。示例性地,处理器1320可以生成与第二拓扑结构对应的n个第二存储分区组,具体参见方法示例中的详细描述,此处不做赘述。

数据存储装置1300还可以包括至少一个存储器1330,用于存储程序指令和/或数据。存储器1330和处理器1320耦合。本申请实施例中的耦合是装置、单元或模块之间的间接耦合或通信连接,可以是电性,机械或其它的形式,用于装置、单元或模块之间的信息交互。处理器1320可能和存储器1330协同操作。处理器1320可能执行存储器1330中存储的程序指令。所述至少一个存储器中的至少一个可以包括于处理器中。当处理器1320执行存储器1330中的程序指令时,可以实现图4或图8所示的方法。

数据存储装置1300还可以包括通信接口1310,用于通过传输介质和其它设备进行通信,从而用于数据存储装置1300中的装置可以和其它设备进行通信。示例性地,该其它设备可以是客户端。处理器1320可以利用通信接口1310收发数据。

本申请实施例中不限定上述通信接口1310、处理器1320以及存储器1330之间的具体连接介质。本申请实施例在图13中以存储器1330、处理器1320以及通信接口1310之间通过总线1340连接,总线在图13中以粗线表示,其它部件之间的连接方式,仅是进行示意性说明,并不引以为限。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图13中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。

在本申请实施例中,处理器1320可以是通用处理器、数字信号处理器、专用集成电路、现场可编程门阵列或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件,可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。

在本申请实施例中,存储器1330可以是非易失性存储器,比如硬盘(harddiskdrive,hdd)或固态硬盘(solid-statedrive,ssd)等,还可以是易失性存储器(volatilememory),例如随机存取存储器(random-accessmemory,ram)。存储器是能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。本申请实施例中的存储器还可以是电路或者其它任意能够实现存储功能的装置,用于存储程序指令和/或数据。

本申请实施例中还提供一种计算机可读存储介质,包括指令,当其在计算机上运行时,使得计算机执行图4或图8中所示的实施例中存储系统的控制器执行的方法。

本申请实施例中还提供一种计算机程序产品,包括指令,当其在计算机上运行时,使得计算机执行图4或图8中所示的实施例中存储系统的控制器执行的方法。

本申请实施例提供了一种芯片系统,该芯片系统包括处理器,还可以包括存储器,用于实现前述方法中存储系统的控制器的功能。该芯片系统可以由芯片构成,也可以包含芯片和其他分立器件。

本申请实施例提供的方法中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、网络设备、用户设备或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(digitalsubscriberline,简称dsl)或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机可以存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如,数字视频光盘(digitalvideodisc,简称dvd))、或者半导体介质(例如,ssd)等。

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

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