磁盘阵列RAID

RAID的全称是Redundant Array of Independent Disks,中文译作独立硬盘冗余阵列, 简称磁盘阵列。 RAID利用虚拟化存储技术把多个硬盘组合起来,成为一个或多个硬盘阵列组,目的为提升读取性能数据备份,或是两者同时提升。

介绍

RAID分为多种存储模式,亦或称多种层级,RAID层级的命名会以RAID开头并带数字,例如:RAID 0、RAID 1、RAID 10等等。每种层级在理论上均有其优缺点,要么在上述两个目的之间寻求平衡,要么为单一的目的。

简单来说,RAID可以看成一块逻辑硬盘,而不去管实际的物理实现。

RAID 0(条带化)/RAID 1(镜像)

RAID 0亦称为带区卷,它将两个以上的磁盘并联起来,成为一个大容量的磁盘。RAID 0模式下,数据被分成固定大小的块,分散存储在多个磁盘驱动器上,而不进行冗余备份。例如,如果有两个驱动器(驱动器0和驱动器1),数据A分为8块,其第一个部分A1存储在驱动器0上,第二个部分A2存储在驱动器1上,以此类推。这种条带化(striping) 的方式可以同时从多个驱动器读取或写入数据,从而提高系统的性能。RAID 0的优势是高速读写,但一旦其中一个磁盘故障,整个数据集将无法恢复。

image-20241105100554-kxizp6z image-20241105100554-kxizp6z

RAID 1使用镜像(mirroring)技术,将数据同时写入两个磁盘。这样可以提供冗余备份,如果一个磁盘发生故障,数据仍然可从另一个磁盘恢复。RAID 1的优势是高可靠性,但成本较高,因为需要两倍的磁盘容量。​​

RAID 10(镜像+条带化)/RAID 01(条带化+镜像)

RAID 10是将RAID 1和RAID 0两种技术结合起来的一种RAID层级。RAID 10也需要至少4块硬盘,将它们分为两组,每组至少有两块硬盘。RAID 10实现方式为:先实现两块磁盘的镜像复制(RAID 1),并且这样的设定有多组,然后将两个RAID 1组中的数据进行条带化(RAID 0)。RAID10的优点是数据可靠性高读写速度快,适合高性能应用和数据库等。它能容忍多个磁盘故障,只要故障的磁盘不在同一组内。

image-20241105135050-i9iq6q2 image-20241105135106-z062oh2

RAID 01则与RAID 10相反,RAID 01的数据写入方式是将数据分成两份,分别写入两个RAID 0组中,然后再将两个RAID 0组中的数据进行镜像复制(RAID 1)。RAID 01的优点是可以提高读写速度和数据冗余,适合大型文件传输和视频编辑等。RAID 01提供了高性能和高可靠性,但与RAID 10相比,它更容易受到磁盘故障带来的影响, 因为当RAID 10有一个硬盘受损,其余硬盘会继续运作。RAID 01只要有一个硬盘受损,同组RAID 0的所有硬盘都会停止运作,只剩下其他组的硬盘运作。

RAID 5/RAID 6

RAID 5使用数据条带化的方式将数据分散存储在多个磁盘驱动器上,并通过分布式奇偶校验实现数据的冗余备份。数据和奇偶校验信息被组织成数据块,其中奇偶校验信息被分布式存储在不同的驱动器上。当写入数据时,奇偶校验信息也会被更新。如果其中一个驱动器发生故障,系统可以通过重新计算奇偶校验信息来恢复丢失的数据。这种方式可以同时提供性能增强和数据冗余。

image-20241105143626-37gs2nd image-20241105143635-9wlyiuo

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

RAID 50

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高,容量利用率比RAID 5要低。比如同样使用9颗硬盘,由各3颗RAID 5再组成RAID 0的RAID 50,每组RAID 5浪费一颗硬盘,利用率为(1-3/9),RAID 5则为(1-1/9)。

RAID 60

RAID 60是RAID 6与RAID 0的组合:先作RAID 6,再作RAID 0。换句话说,就是对两组以上的RAID 6作Stripe访问。RAID 6至少需具备4颗硬盘,所以RAID 60的最小需求是8颗硬盘。

由于底层是以RAID 6组成,所以RAID 60可以容许任一组RAID 6中损毁最多2颗硬盘,而系统仍能维持运作;不过只要底层任一组RAID 6中损毁3颗硬盘,整组RAID 60就会失效,当然这种情况的概率相当低。

比起单纯的RAID 6,RAID 60的上层透过结合多组RAID 6构成Stripe访问,因此性能较高。不过使用门槛高,而且容量利用率低是较大的问题。

接下来对以上给出的RAID层级进行比较。

磁盘阵列比较

这里给出wiki的磁盘阵列比较表,假设我们手里有n块磁盘:

RAID等级 最少硬盘 最大容错 可用容量 读取性能 写入性能 安全性 目的 应用产业
单一硬盘 (参考) 0 1 1 1
JBOD 1 0 n 1 1 无(同RAID 0) 增加容量 个人(暂时)存储备份
0 2 0 n n n 一个硬盘异常,全部资料都会异常 追求最大容量、速度 影片剪接缓存用途
1 2 n-1 1 n 1 高,一个正常即可 追求最大安全性 个人、企业备份
5 3 1 n-1 n-1 n-1 中下至中 追求最大容量、最小预算 个人、小型企业备份
6 4 2 n-2 n-2 n-2 中至中高,仅安全性较RAID 5高 同RAID 5,但较安全 个人、企业备份
10 4 综合RAID 0/1优点,理论速度较快 大型数据库、服务器
50 6 提升资料安全
60 8 提升资料安全
  • JBOD(Just a Bunch Of Disks)指将数个物理硬盘,在操作系统中合并成一个逻辑硬盘,以直接增加容量;
  • 依不同 RAID 厂商实现算法对于性能表现会有不同,以上性能只是理论论述。

实现模式

RAID根据其实现方式可分为软件RAID硬件RAID。其区别在于硬件RAID可以逻辑上看成是完整的一块磁盘,因此硬件RAID的装置文件名为/dev/sd[a-p],而软件RAID则是系统仿真的,使用系统的装置文件,文件名为/dev/md[0-…]。

软件RAID

主要由CPU处理存储作业,缺点为耗损较多CPU资源运算RAID,优点则是价格低。

  • 硬件辅助RAID(Hardware-Assisted RAID):需要一张伪RAID卡,以及厂商所提供的驱动程序,但此类RAID卡仍然借助CPU进行运算。此类RAID卡的阵列较易迁移到其他电脑,其RAID功能靠执行于操作系统的厂商驱动程序和CPU运算提供。
  • 操作系统的RAID功能:如LinuxFreeBSDWindows Server等操作系统内置RAID功能。
  • Windows10内置的磁盘管理有五种模式:

简单卷:独立运作的基本分区。若PC上只有一个物理磁盘,那么只能创建简单卷。

跨距卷(跨区卷) :将不同物理磁盘的多个未配置空间合并为一个逻辑扇区。资料的存放机制是由第一颗硬盘开始依序往后存放,操作系统会视为一个硬盘。如果任一个物理硬盘损毁,则该逻辑扇区上的所有资料将无法救回。(可看成RAID 0)

等量卷(带区卷) :由两个或多个物理磁盘的相同容量空间组成。资料分布在多个物理磁盘中,可以提高性能。(可看成RAID 0)

镜像卷:将两个或多个物理磁盘中创建完全相同的资料副本,即使其中一个物理硬盘损坏,资料仍然可以从其他冗余副本中获取,具有容错空间。若物理磁盘容量大小不同,实际可用空间将等于最小的物理磁盘。(可看成RAID 1)

RAID-5卷:最大可支持9.4ZB的硬盘容量,最多可创建128个分区。

硬件RAID

  • 基于主板的磁盘阵列:只需要主板支持即可(通常是芯片组内置的RAID功能,如Intel Matrix RAID,后来变为Intel Rapid Storage Technology),不需要任何磁盘阵列卡。若主板损坏,可能难以购买同款主板重建RAID。
  • RAID卡:与Fake RAID卡相比,RAID卡基于片上RAID (ROC, RAID-on-chip),具有独立的CPU资源及独立BIOS。优点是读写性能快不占用服务器资源可用于任何操作系统。然而,其缺点在于售价较高,且性能与价格呈正相关。此外,使用RAID卡还可能因内置的自检程序而导致电脑启动时间增加

参考

RAID - 维基百科,自由的百科全书

完全图解RAID存储技术:RAID 0、1、5、6、10、50、60-腾讯云开发者社区-腾讯云