OS

OS:RAID & RAID2.0 & RAID2.0+

磁盘阵列

Posted by Shoukai Huang on December 1, 2020

RAID

独立硬盘冗余阵列(RAID, Redundant Array of Independent Disks),旧称廉价磁盘冗余阵列(Redundant Array of Inexpensive Disks),简称磁盘阵列。利用虚拟化存储技术把多个硬盘组合起来,成为一个或多个硬盘阵列组,目的为提升性能或资料冗余,或是两者同时提升。

RAID把多个硬盘组合成为一个逻辑硬盘,因此,操作系统只会把它当作一个实体硬盘。RAID常被用在服务器电脑上,并且常使用完全相同的硬盘作为组合。由于硬盘价格的不断下降与RAID功能更加有效地与主板集成,它也成为普通用户的一个选择,特别是需要大容量存储空间的工作。

磁盘阵列比较表

应用程度

RAID2、3、4较少实际应用,因为RAID0、RAID1、RAID5、RAID6和混合RAID已经涵盖所需的功能,因此RAID2、3、4大多只在研究领域有实现,而实际应用上则以RAID0、RAID1、RAID5、RAID6和混合RAID为主。

非标准 RAID

JBOD

不是标准的 RAID 等级,它通常用来表示一个没有控制软件提供协调控制的磁盘集合。只是简单提供一种扩展存储空间的机制, JBOD 可用存储容量等于所有成员磁盘的存储空间之和。

标准 RAID

RAID 0

RAID 0亦称为带区集。它将两个以上的磁盘并联起来,成为一个大容量的磁盘。在存放数据时,分段后分散存储在这些磁盘中,因为读写时都可以并行处理,所以在所有的级别中,RAID 0的速度是最快的。但是RAID 0既没有冗余功能,也不具备容错能力,如果一个磁盘(物理)损坏,所有数据都会丢失,危险程度与JBOD相当。

RAID 1

两组以上的N个磁盘相互作镜像,在一些多线程操作系统中能有很好的读取速度,理论上读取速度等于硬盘数量的倍数,与RAID 0相同。另外写入速度有微小的降低。只要一个磁盘正常即可维持运作,可靠性最高。其原理为在主硬盘上存放数据的同时也在镜像硬盘上写一样的数据。当主硬盘(物理)损坏时,镜像硬盘则代替主硬盘的工作。因为有镜像硬盘做数据备份,所以RAID 1的数据安全性在所有的RAID级别上来说是最好的。但无论用多少磁盘做RAID 1,仅算一个磁盘的容量,是所有RAID中磁盘利用率最低的一个级别。 如果用两个不同大小的磁盘建RAID 1,可用空间为较小的那个磁盘,较大的磁盘多出来的空间也可以分割成一个区来使用,不会造成浪费。

RAID 5

RAID Level 5是一种储存性能、数据安全和存储成本兼顾的存储解决方案。它使用的是Disk Striping(硬盘分割)技术。

RAID 5至少需要三个硬盘,RAID 5不是对存储的数据进行备份,而是把数据和相对应的奇偶校验信息存储到组成RAID5的各个磁盘上,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上。当RAID5的一个磁盘数据发生损坏后,可以利用剩下的数据和相应的奇偶校验信息去恢复被损坏的数据。RAID 5可以理解为是RAID 0和RAID 1的折衷方案。RAID 5可以为系统提供数据安全保障,但保障程度要比镜像低而磁盘空间利用率要比镜像高。RAID 5具有和RAID 0相近似的数据读取速度,只是因为多了一个奇偶校验信息,写入数据的速度相对单独写入一块硬盘的速度略慢,若使用“回写缓存”可以让性能改善不少。同时由于多个数据对应一个奇偶校验信息,RAID 5的磁盘空间利用率要比RAID 1高,存储成本相对较便宜。

RAID 6

与RAID 5相比,RAID 6增加第二个独立的奇偶校验信息块。两个独立的奇偶系统使用不同的算法,数据的可靠性非常高,任意两块磁盘同时失效时不会影响数据完整性。RAID 6需要分配给奇偶校验信息更大的磁盘空间和额外的校验计算,相对于RAID 5有更大的IO操作量和计算量,其“写性能”强烈取决于具体的实现方案,因此RAID 6通常不会通过软件方式来实现,而更可能通过硬件方式实现。

同一数组中最多容许两个磁盘损坏。更换新磁盘后,资料将会重新算出并写入新的磁盘中。

RAID6P+Q需要计算出两个校验数据P和Q,当有两个数据丢失时,根据P和Q恢复出丢失的数据。相当于两次RAID5的过程。校验数据P和Q是由以下公式计算得来的:

​ P=D0⊕D1⊕D2……

​ Q=(α⊗D0)⊕(β⊗D1)⊕(γ⊗D2)……

混合 RAID

RAID 10/01

RAID 10是先分割资料再镜像,再将所有硬盘分为两组,视为以RAID 1作为最低组合,然后将每组RAID 1视为一个“硬盘”组合为RAID 0运作。

RAID 01则是跟RAID 10的程序相反,是先镜像再将资料到分割两组硬盘。它将所有的硬盘分为两组,每组各自构成为RAID 0作为最低组合,而将两组硬盘组合为RAID 1运作。

当RAID 10有一个硬盘受损,其余硬盘会继续运作。RAID 01只要有一个硬盘受损,同组RAID 0的所有硬盘都会停止运作,只剩下其他组的硬盘运作,可靠性较低。如果以六个硬盘建RAID 01,镜像再用三个建RAID 0,那么坏一个硬盘便会有三个硬盘离线。因此,RAID 10远较RAID 01常用,零售主板绝大部分支持RAID 0/1/5/10,但不支持RAID 01。

RAID 50

RAID 5与RAID 0的组合,先作RAID 5,再作RAID 0,也就是对多组RAID 5彼此构成Stripe访问。由于RAID 50是以RAID 5为基础,而RAID 5至少需要3颗硬盘,因此要以多组RAID 5构成RAID 50,至少需要6颗硬盘。以RAID 50最小的6颗硬盘配置为例,先把6颗硬盘分为2组,每组3颗构成RAID 5,如此就得到两组RAID 5,然后再把两组RAID 5构成RAID 0。

RAID 50在底层的任一组或多组RAID 5中出现1颗硬盘损坏时,仍能维持运作,不过如果任一组RAID 5中出现2颗或2颗以上硬盘损毁,整组RAID 50就会失效。

RAID 50由于在上层把多组RAID 5构成Stripe,性能比起单纯的RAID 5高,容量利用率比RAID5要低。比如同样使用9颗硬盘,由各3颗RAID 5再组成RAID 0的RAID 50,每组RAID 5浪费一颗硬盘,利用率为(1-3/9),RAID 5则为(1-1/9)。

RAID 比较

功能比较

从可靠性、性能和成本简单比较各RAID级别的优劣(相对而言),供在实际项目中选择时参考。

空间利用率:RAID5明显优于RAID10

可靠性:RAID5低于RAID10

性能:业务是一些大文件的读写操作时,RAID5的性能会明显好于RAID10。业务以随机的小数据块读写为主的时候,RAID10是最优的选择

RAID 2.0

由来:解决RAID重构时间

对于传统RAID系统而言,重构过程中数据没有可靠性保障,如果在重构完成前出现坏盘就将造成数据丢失,且不可恢复。所以对于一个存储系统而言,其可靠性的最重要标志就是其RAID重构时间越小越好,从而降低重构完成前再次坏盘的概率。早期存储系统大多使用FC盘且容量仅为几十个G,因此重构时间较短,重构中再次坏盘的概率低。但随着硬盘容量的快速增长,硬盘读写速度受磁盘转速等多方面影响增长缓慢,已无法满足系统对重构时间的要求。以一块2TB 7.2K rpm盘为例,重构时平均写入速度为30M/s左右,完成重构时间长达18个小时,因此重构过程中出现新的坏盘概率到大大增加,数据丢失的风险也大大增加。因此传统RAID技术已无法满足在系统中使用现代大容量硬盘的要求。在过去的几年里,许多存储领域的创新型初创公司如HUAWEI、3PAR等公司已经将磁盘阵列从基于磁盘的RAID发展成更为灵活的RAID 2.0及RAID 2.0+技术,不但整合了数据保护和跨磁盘规划数据分布的功能,而且充分满足虚拟机环境下对存储的应用需求。

RAID 2.0(独立磁盘冗余数组2.0, Redundant Array of Independent Disks Version 2.0),为增强型RAID技术,有效解决了机械硬盘容量越来越大,重构一块机械硬盘所需时间越来越长,传统RAID组重构窗口越来越大而导致重构期间又故障一块硬盘而彻底丢失数据风险的问题。

基本思想就是把大容量机械硬盘先按照固定的容量切割成多个更小的分块(Chunk,通常为64MB),RAID组建立在这些小分块上,而不是某些硬盘上,我们称为分块组(Chunk Group)。此时硬盘间不再组成传统的RAID关系,而是组成更大硬盘数量的硬盘组(通常包含96块盘),每个硬盘上不同的分块可与此硬盘组上不同硬盘上的分块组成不同RAID类型的分块组,这样一个硬盘上的分块可以属于多个RAID类型的多个分块组。以这样的组织形式,基于RAID2.0技术的存储系统能够做到在一块硬盘故障后,在硬盘组上的所有硬盘上并发进行重构,而不再是传统RAID的单个热备盘上进行重构,从而大大降低重构时间,减少重构窗口扩大导致的数据丢失风险,在硬盘容量大幅增加的同时确保存储系统的性能和可靠性。RAID2.0并没有改变传统的各种RAID类型的算法,而是把RAID范围缩小到分块组上。

RAID2.0技术具备以下技术特征:

  • 几个、几十个甚至上百个机械硬盘组成硬盘组;
  • 硬盘组中的硬盘被分割成几十兆、上百兆的分块,不同硬盘上的分块组成的分块组(Chunk Group);
  • RAID计算在分块组(Chunk Group)内进行,系统不再有热备盘,而是被同一分块组内保留的热备块所代替。

RAID 2.0+

RAID2.0+(独立磁盘冗余数组2.0, Redundant Array of Independent Disks Version 2.0+)在RAID 2.0的基础上提供了更细粒度(可以达几十KB粒度)的资源颗粒,形成存储资源的标准分配及回收单位,类似计算虚拟化中的虚拟机,我们称之为虚拟块。这些容量单位一致的虚拟块构成了一个统一的存储资源池,所有应用、中间件、虚拟机、操作系统所需的资源可以在这个资源池中按需分配及回收。相对传统RAID系统,RAID2.0+技术实现了存储资源的虚拟化及预配置,存储资源的申请及释放完全自动化的通过存储池实现,而不再需要传统RAID阵列的RAID组创建,LUN创建,LUN格式化等耗时而容易出错的手工配置过程。因此,RAID 2.0+技术解决了虚拟机环境下,存储资源必须动态按需分配及释放的问题。在RAID 2.0基础上,RAID2.0+技术具备以下技术特征:

  • 在RAID 2.0基础上,分块组(Chunk Group)被切分为容量从256KB到64MB的虚拟化存储颗粒(Extent);
  • 存储资源以以上颗粒为单位自动分配及释放;
  • 可以以以上颗粒度为单位在存储池内或不同存储池间进行细粒度分级存储;
  • 在系统通过扩展控制器扩展性能或容量后,可以通过自动化的迁移这些标准颗粒来达到负载均衡的目的。

主要概念

  • 硬盘域:由存储阵列中多个硬盘组成,硬盘可选择SSD(高性能层)、SAS(性能层)或者NL-SAS(容量层)中的一种或者多种。
  • Chunk(CK):硬盘空间会被划分成若干小块的物理空间;CK的大小为64M。
  • 存储池:由来自一种或者多种存储介质上的多个CKG组成。
  • Chunk Group(CKG):在存储池中,CK按照RAID策略组合成CKG。
  • Extent:存储池空间会被切分一定大小的逻辑空间–Extent;Extent是存储池中申请空间、释放空间和迁移数据的最小单位。Extent大小为512K~64M,默认值4M。
  • LUN:由存储池中的多个Extent组成,LUN可以由不同存储介质中的Extent组成,因而可以调动多个硬盘同时读写数据,响应速度快、效率高,也就是实现性能提升。

原理

RAID 2.0+的实现原理

在传统RAID技术环境中,硬盘发生故障后,系统会启动热备盘,根据RAID策略进行数据重构。当更换故障硬盘后,需要将热备盘中的数据拷贝到新的硬盘中。在此过程中,重构的速度完全取决于热备盘和更换的硬盘单盘的性能,因此,耗时非常长。

但RAID 2.0+采用了底层虚拟化技术,存储池中的chunk按照RAID级别组成chunk group,因此当硬盘故障时,该硬盘上chunk所在的chunk group会进行重构,即参与重构的硬盘数量非常多。同时热备空间不是来自于一块硬盘,而是随机分配在硬盘域中。如下图所示:

重构的速度不受限于单盘的性能,重构速度非常快,是传统RAID的20倍

参考