针对独立磁盘冗余阵列的重建方法和设备与流程

文档序号:11199092阅读:342来源:国知局
针对独立磁盘冗余阵列的重建方法和设备与流程

本公开的实施例总体上涉及磁盘故障处理技术,更具体地涉及针对独立磁盘冗余阵列(raid)的重建方法和设备。



背景技术:

独立磁盘冗余阵列(raid)是由多块独立的磁盘组合形成的磁盘组,从而提供比单个磁盘更大的存储性能和更高的可靠性能。为了在磁盘发生故障时对数据进行恢复,raid中通常设置一块(例如,raid3或raid5中)或多块(例如,raid6中)校验磁盘。然而,当raid中的一块或多块磁盘发生故障时,raid的可靠性将会大幅度下降。

通常,在raid中的一块磁盘发生故障时,raid进入降级模式,并且利用一块空闲磁盘对raid进行重建。然而,由于每个磁盘的带宽和每秒的读写次数(iops)有限,并且磁盘的容量通常较大(例如,2t或者4t),因此,针对raid的重建时间通常需要几天甚至几周,这使得raid无法满足高可靠性的需求。

因此,在raid中的磁盘发生故障时,如何快速地对raid进行重建并且保证高可靠性,成为一个亟待解决的问题。



技术实现要素:

有鉴于此,本公开的各实施例提出了一种针对独立磁盘冗余阵列(raid)的重建方法和设备。本公开的实施例通过将发生故障的磁盘所在的raid组划分成多个条带(stripe),并且在其他raid组中并行重建发生故障的raid组中的条带,能够有效地提高raid的重建速度并且保证raid组的可靠性。

根据本公开的一个方面,提供了一种针对独立磁盘冗余阵列(raid)的重建方法,该方法包括:响应于磁盘发生故障,将包括磁盘的raid组划分为多个条带,其中每个条带包括raid组中的所有磁盘中的磁盘片;将多个条带分别映射到其他raid组;以及在其他raid组中重建raid组中的多个条带上的数据。

根据本公开的另一方面,提供了一种针对独立磁盘冗余阵列(raid)的重建设备,该设备包括:划分装置,用于响应于磁盘发生故障,将包括磁盘的raid组划分为多个条带,其中每个条带包括raid组中的所有磁盘中的磁盘片;映射装置,用于将多个条带分别映射到其他raid组;以及重建装置,用于在其他raid组中重建raid组中的多个条带上的数据。

根据本公开的又一方面,提供了一种针对独立磁盘冗余阵列(raid)的重建设备,该设备包括:存储器,以及处理器,其中该处理器被配置为:响应于磁盘发生故障,将包括磁盘的raid组划分为多个条带,其中每个条带包括raid组中的所有磁盘中的磁盘片;将多个条带分别映射到其他raid组;以及在其他raid组中重建raid组中的多个条带上的数据。

附图说明

结合附图并参考以下详细说明,本公开的各实施例的特征、优点及其他方面将变得更加明显,在此以示例性而非限制性的方式示出了本公开的若干实施例,在附图中:

图1图示了现有的raid存储系统100中的重建过程的示例图;

图2图示了现有的raid存储系统200中的重建过程的另一示例图;

图3图示了根据本公开的实施例的针对raid的重建方法300的流程图;

图4图示了根据本公开的实施例的raid存储系统400中的重建过程的示例图;

图5图示了根据本公开的实施例的raid存储系统400中的负载平衡过程的示例图;

图6图示了根据本公开的实施例的针对raid的重建设备600的框图;以及

图7图示了可以用来实施本公开的实施例的设备700的示意性框图。

具体实施方式

以下参考附图详细描述本公开的各个示例性实施例。附图中的流程图和框图示出了根据本公开的各种实施例的方法和系统的可能实现的体系架构、功能和操作。应当注意,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,所述模块、程序段、或代码的一部分可以包括一个或多个用于实现各个实施例中所规定的逻辑功能的可执行指令。也应当注意,在有些作为备选的实现中,方框中所标注的功能也可以按照不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,或者它们有时也可以按照相反的顺序执行,这取决于所涉及的功能。同样应当注意的是,流程图和/或框图中的每个方框、以及流程图和/或框图中的方框的组合,可以使用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以使用专用硬件与计算机指令的组合来实现。

本文所使用的术语“包括”、“包含”及类似术语应该被理解为是开放性的术语,即“包括/包含但不限于”。术语“基于”是“至少部分地基于”。术语“一个实施例”表示“至少一个实施例”;术语“另一实施例”表示“至少一个另外的实施例”。其他术语的相关定义将在下文描述中给出

应当理解,给出这些示例性实施例仅是为了使本领域技术人员能够更好地理解进而实现本公开的实施例,而并非以任何方式限制发明的范围。

图1图示了现有的raid存储系统100中的重建过程的示例图。 图1的raid存储系统包括10个raid组(例如,raid组1、raid组2…riad组9)和2个空闲磁盘(例如,磁盘s1、s2),其中每个raid组包括4+1个磁盘(例如,4个数据盘和1个校验盘)。在某一时刻,当raid组0中的磁盘d3发生故障时,通常会选择空闲磁盘s1加入到raid组0中,以替换发生故障的磁盘d3,并且开始针对raid组0的数据重建。然而,在raid组0重建的过程中,如果raid组0中的任何一个另外的磁盘(例如,磁盘d2)发生故障,则整个存储系统将会发生故障。此外,在图1中的raid组100重建的过程中,仅仅只有一个空闲磁盘s1参与重建,因此,重建速度非常缓慢,例如,通常需要几天甚至几周的时间。

图2图示了现有的raid存储系统200中的重建过程的另一示例图。图2中的raid存储系统200包括多个磁盘例如,磁盘d0、d1、d2等。使用映射方式,将磁盘分成多个磁盘片,同时将raid划分成多个raid片,随机地选择多个磁盘片和多个raid片并将它们组成特定raid片。在图2的raid存储系统200中,当磁盘d3发生故障时,将磁盘d3划分成多个磁盘片,并且将raid组划分成多个raid片,然后将这些磁盘片或raid片中映射到其他磁盘或raid组中以进行重建。图2示出了完全网式的映射重建方法,既包括了磁盘片映射也包括raid片映射。然而,图2中的完全随机选择的重建方法使得整个存储系统变得过于混乱和脆弱,在某个磁盘发生故障的重建过程中,raid存储系统200中的任何一个新的磁盘的故障(即,第二个磁盘的故障)都会导致整个存储系统发生故障。

由此可见,在图1的重建方法中,仅当发生故障的磁盘所在的raid组中的其他磁盘发生故障时,才会导致整个存储系统发生故障。然而,在图2的完全网式映射的重建方法中,存储系统中的任何第二个磁盘的故障都会导致整个存储系统发生故障。因此,图2的重建方法虽然提高了重建速度,但使得整个存储系统的可靠性大幅降低。

例如,当图2中的raid存储系统200包括n个磁盘的存储系统时,假设单个磁盘的故障率是t,存储系统从最优状态(没有磁盘发 生故障)到降级状态(1个磁盘发生故障)的概率是n×t,从降级状态到存储系统发生故障状态(2个磁盘发生故障)的概率是(n-1)×t。由此可见,随着存储系统中磁盘数量n的不断增加,第二个磁盘的故障导致整个存储系统故障的概率也呈线性增加。

随着存储系统中磁盘数量的不断增加,整个存储系统的故障概率也不断增加。因此,为了达到相同的可靠性,则必要不断地提高重建速率和磁盘的带宽。以下表1示出了在相同的可靠性的情况下,所需要的重建速率和每个磁盘的读操作的带宽。

表1:相同的可靠性所需的重建速度和带宽

由此可见,随着磁盘数量的增加,为了达到相同的可靠性,图2中的方法需要更大的重建速率和磁盘带宽。然而,重建速率的增加需要花费大量成本,并且每个磁盘的带宽上限也是有限的。因此,图2的重建方法无法在提高重建速度的同时保证存储系统的可靠性。

图3图示了根据本公开的实施例的针对raid的重建方法300的流程图。在步骤302处,响应于磁盘发生故障,将包括磁盘的raid组划分为多个条带,其中每个条带包括raid组中的所有磁盘中的磁盘片,即raid片。例如,当raid中的某个磁盘发生故障时,将整个raid按条带进行划分,其中每个条带包括raid中的每个磁盘相同位置处的磁盘片。

在一个实施例中,在磁盘发生故障时,可以根据预定义的每个条带大小,将raid组划分为多个条带。例如,针对不同的数据类型(例如,文档文件和流媒体),分别设置不同的条带大小。根据每个条带的大小和raid组的总存储空间,将raid划分成相应个数的条带。

方法300继续进行到步骤304,将raid组中的多个条带分别映射到其他raid组。在一个实施例中,可以将多个条带平均地划分到 其他raid组中。在另一个实施例中,可以根据其他raid组中每个raid组的工作负载和剩余存储空间,将多个条带分别映射到其他raid组。例如,对于工作负载较小的其他raid组,说明这些raid组的io操作不太频繁,剩余的io带宽相对较大,可以将多个条带映射到这些raid组中。再例如,对于剩余存储空间较大的其他raid组,说明这些raid组还可以存储很多数据,可以将多个条带映射到这些raid组中。

方法300继续进行到步骤306,在其他raid组中重建raid组中的多个条带上的数据。在一个实施例中,响应于多个条带中的特定条带正在被重建,发生故障降级的raid组中的特定条带仅提供读操作,而不提供写操作。也就是说,该raid组中正在被重建的条带只对外提供读操作,而写操作被重定向到正在重建该条带其他raid组中。在了一个实施例中,在特定条带被重建之后,针对特定条带的读操作和写操作二者被重定向到重建特定条带的特定raid组。也就是说,在特定条带已经完成被重建之后,该raid组中的该特定条带不再提供读写操作,所有的读写操作都被重定向到已重建特定条带的特定raid组。因此,随着越来越多的条带被重建,发生故障的raid的重建速度也会越来越快。

在一些实施例中,可以在其他raid组中的多个raid组中并行重建raid组中的多个条带。例如,在多个条带被映射到多个其他raid组时,在多个raid组中并行重建发生故障的raid组中的条带。通过利用多个raid组同时重建,能够有效地提高发生故障的raid组的重建速度。

在一个实施例中,可以使用一些元数据来辅助标识条带(或磁盘片)与其他raid组之间的映射关系。在另一实施例中,分段重建raid组中的条带,并且设置检查点来记录分段重建的进度。元数据、映射表以及检查点信息可以被存储在一些持久性存储器中,以用于安全和快速访问。

方法300还包括响应于多个条带中的所有条带都被重建,使用新 的空闲磁盘来替换发生故障的磁盘,以形成新的空闲raid组。当发生故障的降级的raid组被重建之后,该降级的raid组中的数据被清空,此时,可以利用其他的一个空闲磁盘和该raid组中未发生故障的磁盘进行组合,形成新的空的可用的raid组。

在一些实施例中,方法300可选地包括步骤308,在形成新的空闲raid组之后,对其他raid组进行负载平衡,例如,将其他raid组中高负载的raid组中的一部分数据迁移到新的空闲raid组。在一些实施例中,通过记录其他raid组中每个raid组的读操作和/或写操作的次数,来确定其他raid组中高负载的raid组。在一些实施例中,当一些新的磁盘被放置到存储系统中时,也可以执行以上所描述的负载平衡操作。

在本公开的针对raid的重建方法300中,通过按照raid组中的条带为单位进行重建,并且在其他raid组中的多个raid组中并行重建发生故障的raid中的条带上的数据,从而提高了raid的重建速度。同时,由于采用了整个条带重建的方式,其他raid组中一个磁盘故障将不会导致整个存储系统的故障,而仅仅只有发生故障的raid中另一磁盘发生故障时,整个存储系统才会发生故障。因此,本公开的针对raid的重建方法300不仅提高了重建速度也保证了存储系统的可靠性。

根据本公开的针对raid的重建方法300,在重建速率为50mb/s的raid5的存储系统中,其中每个磁盘大小为3tb,完成一次重建过程仅需16个小时。该重建时间能够满足可靠性目标的要求,并且也可以保证存储系统的负载平衡。

图4和图5示出了根据本公开的针对raid的重建方法300的一个示例,而不是对本公开的raid的重建方法300的限制。

图4图示了根据本公开的实施例的raid存储系统400中的重建过程的示例图。例如,存储系统400可以包括10个raid组(例如,raid组1、raid组2…riad组9)和2个空闲磁盘(例如,磁盘s1、s2),其中每个raid组包括4+1个磁盘(例如,4个数据盘和1 个校验盘)。当raid组0中的磁盘d3发生故障时,根据本公开的针对raid的重建方法300,将raid组0划分成9个条带,例如raid片0_0、raid片0_1…raid片0_8,其中每个条带表示一个raid片。然后,将raid组0中的9个条带分别映射到raid组1、raid组2…raid组9,并且在raid组1、raid组2…raid组9中并行重建raid组0中的9个条带。虽然图4中示出了一种映射关系,然而可以根据其他raid组中每个raid组的工作负载和剩余存储空间,设置不同的映射关系。

图5图示了根据本公开的实施例的raid存储系统400中的负载平衡过程的示例图。在图4中的9个条带都被重建之后,raid组0中的磁盘d0、d1、d2、d4中的数据被清空,然后,可以使用新的空闲磁盘s1来替换发生故障的磁盘d3,以形成新的空闲raid组0’,则空闲raid组0’包括磁盘d0、d1、d2、s1以及d4。

在图5的存储系统400中的负载平衡过程中,当发生故障的降级的raid组0被重建之后,该降级的raid组中的数据被清空,因此,为了保持整个存储系统的负载平衡,可以将raid组1中的raid片1_11、raid组2中的raid片2_12…raid组9中的raid片9_17迁移到新的空的raid组0’中,从而实现整个系统的负载平衡。

图6图示了根据本公开的实施例的针对raid的重建设备600的框图,该设备600包括:划分装置602,用于响应于磁盘发生故障,将包括磁盘的raid组划分为多个条带,其中每个条带包括raid组中的所有磁盘中的磁盘片;映射装置604,用于将多个条带分别映射到其他raid组;以及重建装置606,用于在其他raid组中重建raid组中的多个条带上的数据。

在一个实施例中,划分装置602还用于:根据预定义的每个条带大小,将raid组划分为多个条带。在另一个实施例中,映射装置604还用于:根据其他raid组中每个raid组的工作负载和剩余存储空间,将多个条带分别映射到其他raid组。

在一个实施例中,重建装置606还用于:响应于多个条带中的 特定条带正在被重建,raid组中的特定条带仅提供读操作,而不提供写操作。在另一个实施例中,重建装置602还用于:在特定条带被重建之后,针对特定条带的读操作和写操作二者被重定向到重建特定条带的特定raid组。

在一个实施例中,重建装置602还用于:在其他raid组中的多个raid组中并行重建raid组中的多个条带。在另一个实施例中,重建装置602还用于:分段重建raid组中的条带,并且设置检查点来记录分段重建的进度。

在一个实施例中,设备600还可以包括:替换装置(未示出),用于响应于多个条带中的所有条带都被重建,使用新的空闲磁盘来替换发生故障的磁盘,以形成新的空闲raid组。

在一个实施例中,设备600还可以包括:负载平衡装置608,用于在形成新的空闲raid组之后,对其他raid组进行负载平衡。在另一个实施例中,负载平衡装置608还用于:将其他raid组中高负载的raid组中的一部分数据迁移到新的空闲raid组。在又一个实施例中,负载平衡装置608还用于:通过记录其他raid组中每个raid组的读操作和/或写操作的次数,来确定其他raid组中高负载的raid组。

应当理解,设备600可以利用各种方式来实现。例如,在某些实施例中,设备600可以通过硬件、软件或者软件和硬件的结合来实现。其中,硬件部分可以利用专用逻辑来实现;软件部分则可以存储在存储器中,由适当的指令执行系统,例如微处理器或者专用设计硬件来执行。本领域的普通技术人员可以理解上述的方法和系统可以使用计算机可执行指令和/或包含在处理器控制代码中来实现,例如在诸如磁盘、cd或dvd-rom的载体介质、诸如只读存储器的可编程的存储器或者诸如光学或电子信号载体的数据载体上提供了这样的代码。本公开的实施例的设备和装置不仅可以由诸如超大规模集成电路或门阵列、诸如逻辑芯片、晶体管等的半导体、或者诸如现场可编程门阵列、可编程逻辑设备等的可编程硬件设备的硬件电路实现,也可以用 例如由各种类型的处理器所执行的软件实现,还可以由上述硬件电路和软件的结合来实现。

图7图示了可以用来实施本公开的实施例的设备700的示意性框图。如图所示,设备700包括中央处理单元(cpu)701,其可以根据存储在只读存储器(rom)702中的计算机程序指令或者从存储单元708加载到随机访问存储器(ram)703中的计算机程序指令,来执行各种适当的动作和处理。在ram703中,还可存储设备700操作所需的各种程序和数据。cpu701、rom702以及ram703通过总线704彼此相连。输入/输出(i/o)接口705也连接至总线704。

设备700中的多个部件连接至i/o接口705,包括:输入单元706,例如键盘、鼠标等;输出单元707,例如各种类型的显示器、扬声器等;存储单元708,例如磁盘、光盘等;以及通信单元709,例如网卡、调制解调器、无线通信收发机等。通信单元709允许设备700通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。

上文所描述的各个过程和处理,例如方法300,可由处理单元701执行。例如,在一些实施例中,方法300可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元708。在一些实施例中,计算机程序的部分或者全部可以经由rom702和/或通信单元709而被载入和/或安装到设备700上。当计算机程序被加载到ram703并由cpu701执行时,可以执行上文描述的方法300的一个或多个步骤。

应当注意,尽管在上文的详细描述中提及了设备的若干装置或子装置,但是这种划分仅仅是示例性而非强制性的。实际上,根据本公开的实施例,上文描述的两个或更多装置的特征和功能可以在一个装置中具体化。反之,上文描述的一个装置的特征和功能可以进一步划分为由多个装置来具体化。

以上所述仅为本公开的实施例可选实施例,并不用于限制本公开的实施例,对于本领域的技术人员来说,本公开的实施例可以有各种 更改和变化。凡在本公开的实施例的精神和原则之内,所作的任何修改、等效替换、改进等,均应包含在本公开的实施例的保护范围之内。

虽然已经参考若干具体实施例描述了本公开的实施例,但是应该理解,本公开的实施例并不限于所公开的具体实施例。本公开的实施例旨在涵盖在所附权利要求的精神和范围内所包括的各种修改和等同布置。所附权利要求的范围符合最宽泛的解释,从而包含所有这样的修改及等同结构和功能。

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