磁盘阵列(Redundant Arrays of Independent Drives,RAID),简单地说,就是讲若干块独立磁盘构成具有冗余能力的阵列。 他将很多块磁盘组合到一起构成一个磁盘组,来提升整个磁盘系统的读写性能及安全性。 利用同位检查(Parity Check)的观念,通过数据冗余实现磁盘系统中任何一个磁盘故障时整个磁盘系统仍然可以继续工作。 对于服务器开发和运维人员,RAID 是必须了解和使用的磁盘系统管理方式,随着时代的进步,越来越多的人在家庭、日常工作中使用简单的磁盘阵列来增加磁盘读写性能或提高数据安全性,甚至一些主板都已经提供了支持 RAID 的功能。 然而,RAID 概念很多,有时候会引起混淆,本文我们来详细介绍一下 RAID 技术的概念特征、基本原理、关键技术、各种等级和发展现状等方面的内容。
RAID 是 1988 年美国加州大学伯克利分校的 D. A. Patterson 教授等首次在论文中提出的,起初,RAID 指的是廉价磁盘阵列,主要目的是为了节省购置大容量磁盘的成本,此后,RAID 咨询委员会将 Inexpensive 替换为 Independent 就是我们今日的 RAID,但其实质内容并没有改变。 RAID 主要利用数据条带、镜像和数据校验技术来获取高性能、可靠性、容错能力和扩展性,根据运用或组合运用这三种技术的策略和架构,拥有 RAID0 ~ RAID6 等的等级,近年来,存储厂商不断推出诸如 RAID7 、 RAID10/01 、 RAID50 、 RAID53 、 RAID100 等 RAID 等级,但这些并无统一的标准。 目前业界公认的标准是 RAID0 ~ RAID5 ,除 RAID2 外的四个等级被定为工业标准,而在实际应用领域中使用最多的 RAID 等级是 RAID0 、 RAID1 、 RAID3 、 RAID5 、 RAID6 和 RAID10。 从实现角度看, RAID 主要分为软 RAID、硬 RAID 以及软硬混合 RAID 三种。软 RAID 所有功能均有操作系统和 CPU 来完成,没有独立的 RAID 控制 / 处理芯片和 I/O 处理芯片,效率自然最低。硬 RAID 配备了专门的 RAID 控制 / 处理芯片和 I/O 处理芯片以及阵列缓冲,不占用 CPU 资源,但成本很高。软硬混合 RAID 具备 RAID 控制 / 处理芯片,但缺乏 I/O 处理芯片,需要 CPU 和驱动程序来完成,性能和成本 在软 RAID 和硬 RAID 之间。 目前来看,广泛采用的是以硬 RAID 为主的方式来实现 RAID,但各操作系统也都在不同程度上支持某些级别的软 RAID。
RAID 主要有三个关键技术: 1. 镜像(Mirroring) 2. 数据条带(Data Stripping) 3. 校验(Data Parity) 不同的 RAID 级别会采用上述一到多个技术来获得不同的数据可靠性、可用性或IO性能。
镜像技术指的是将数据复制到多个磁盘,这样,在实际的使用中,只要有一个磁盘没有发生故障,都不影响整个磁盘系统的工作。 同时,并发地在多个磁盘上读取也可以提高读取性能,但是,相对的,镜像技术的写性能相对较低,每次写入都必须确保多个磁盘写成功。
将数据分片保存在多个不同的磁盘,多个数据分片共同组成一个完整数据副本。 这与镜像的多个副本是不同的,它通常用于性能考虑。 数据条带具有更高的并发粒度,当访问数据时,可以同时对位于不同磁盘上数据进行读写操作, 从而获得非常可观的 I/O 性能提升。
利用冗余数据进行数据错误检测和修复的技术。 冗余数据通常采用海明码、异或操作等算法来计算获得。 利用校验功能,可以很大程度上提高磁盘阵列的可靠性、鲁棒性和容错能力。 比起镜像 50% 的冗余开销 ,数据校验要小很多,它利用校验冗余信息对数据进行校验和纠错。 不过,数据校验需要从多处读取数据并进行计算和对比,会影响系统性能。
通过上面的介绍,RAID 技术的优势已经呼之欲出,总的来说主要有以下优势。
显然,由多个磁盘组成的 RAID 磁盘系统具有海量磁盘存储空间。 目前还找不到 PB 级的单块硬盘,但我们却可以通过 RAID 组成 PB 级的磁盘系统。 但是一般来说,由于 RAID 需要一定的冗余开销,RAID 可用容量要小于所有成员磁盘的总容量。 通常, RAID 容量利用率在 50% ~ 90% 之间。
RAID 的一个重要特征是对多块磁盘的并发读写,从而可以很大程度的提高 IO 性能,甚至可以达到几倍于单块磁盘的性能。
可靠性和可用性是 RAID 的一个重要特征。 由于数据冗余,可以让一块甚至多块磁盘在发生故障时都不影响整个磁盘系统的工作。 虽然磁盘的增加提高了出现故障的可能,但却让整个磁盘系统的可靠性大幅提升。
RAID 通过虚拟化技术,将多个物理磁盘驱动器虚拟成一个大容量逻辑驱动器,对于外部主机系统来说,单一的大容量磁盘驱动器的管理成本是远远低于多个磁盘驱动器的。 从用户应用的角度看,存储系统也变得简单易用。
JBOD 即 Just a Bunch Of Disks,他并不是标准的 RAID 等级。 它通常用来表示一个没有控制软件提供协调控制的磁盘集合,将多个物理磁盘串联起来,提供一个巨大的逻辑磁盘。 JBOD 的存放机制是由第一块磁盘开始按顺序往后存储,当前磁盘存储空间用完后,再依次往后面的磁盘存储数据。 它的存储性能完全等同于单块磁盘,而且也不提供数据安全保护,只是简单提供一种扩展存储空间的机制, JBOD 可用存储容量等于所有成员磁盘的存储空间之和。 目前很多人在家用 PC 机上组装出 JBOD 阵列用来将若干块小磁盘合并为一个单一逻辑磁盘从而降低磁盘的管理成本。
RAID 是一种简单、无数据冗余的数据带化技术,实际上它并不算是一种真正的 RAID,因为他不提供任何形式的冗余策略。 RAID0 将所在磁盘条带化后组成大容量存储空间,将数据分散存储在所有磁盘中,以独立访问方式实现多块磁盘的并发访问。 由于可以并发执行 I/O 操作,总线带宽得到充分利用。再加上不需要进行数据校验,RAID0 的性能在所有 RAID 等级中是最高的。 理论上讲,一个由 n 块磁盘组成的 RAID0 ,它的读写性能是单个磁盘性能的 n 倍,但由于总线带宽等多种因素的限制,实际的性能提升低于理论值。 RAID0 具有低成本、高读写性能、 100% 的高存储空间利用率等优点,但是它不提供数据冗余保护,一旦数据损坏,将无法恢复。 因此, RAID0 一般适用于对性能要求严格但对数据安全性和可靠性不高的应用,如视频、音频存储、临时数据缓存空间等。 很多个人或家庭用户通过将 HDD 磁盘组成 RAID0 磁盘阵列追求与 SSD 接近的读写性能。
RAID1 称为镜像,它将数据完全一致地分别写到工作磁盘和镜像 磁盘,它的磁盘空间利用率为 50% RAID1 在数据写入时,响应时间会有所影响,但是读数据的时候没有影响。 RAID1 提供了最佳的数据保护,一旦工作磁盘发生故障,系统自动从镜像磁盘读取数据,不会影响用户工作。 RAID1 与 RAID0 刚好相反,是为了增强数据安全性使两块 磁盘数据呈现完全镜像,从而达到安全性好、技术简单、管理方便。 RAID1 拥有完全容错的能力,但实现成本高。 RAID1 应用于对顺序读写性能要求高以及对数据保护极为重视的应用,如对邮件系统的数据保护。
RAID2 称为纠错海明码磁盘阵列,其设计思想是利用海明码实现数据校验冗余。 海明码是一种在原始数据中加入若干校验码来进行错误检测和纠正的编码技术,其中第 2n 位( 1, 2, 4, 8, … )是校验码,其他位置是数据码。 因此在 RAID2 中,数据按位存储,每块磁盘存储一位数据编码,磁盘数量取决于所设定的数据存储宽度,可由用户设定。 下图为数据宽度为 4 的 RAID2 ,它需要 4 块数据磁盘和 3 块校验磁盘。如果是 64 位数据宽度,则需要 64 块 数据磁盘和 7 块校验磁盘,可见, RAID2 的数据宽度越大,存储空间利用率越高,但同时需要的磁盘数量也越多。 海明码自身具备纠错能力,因此 RAID2 可以在数据发生错误的情况下对纠正错误,保证数据的安全性。它的数据传输性能相当高,设计复杂性虽然高于 RAID0 和 RAID1,但要低于后面介绍的 RAID3 、 RAID4 和 RAID5。 但是,海明码的数据冗余开销太大,而且 RAID2 的数据输出性能受阵列中最慢磁盘驱动器的限制。再者,海明码是按位运算, RAID2 数据重建非常耗时。由于这些显著的缺陷,再加上大部分磁盘驱动器本身都具备了纠错功能,因此 RAID2 在实际中很少应用,没有形成商业产品,目前主流存储磁盘阵列均不提供 RAID2 支持。
RAID3 是把数据按位分散,存放在N个硬盘上,而第N+1个硬盘上存储的数据是校验容错信息。 当这 N+1 个硬盘中的其中一个硬盘出现故障时,从其它 N 个硬盘中的数据也可以恢复原始数据,当更换一个新硬盘后,系统可以重新恢复完整的校验容错信息。 虽然 RAID3 的数据存取方式与 RAID2 一样是将数据按位为单位分散在各个磁盘上,但它的校验算法由海明码改为了 XOR 算法,因此他只需要一个额外的校验盘,空间利用率更高。 在数据完好的情况下,其读性能与 RAID0 完全一致,并行从多个磁盘条带读取数据,性能非常高,但是写操作需要进行写数据块、读取同条带的数据块、计算校验值、写入校验值等多个操作,系统开销非常大,性能较低。 RAID3 拥有很高的读性能和较差的写性能,因此适用大容量数据的顺序访问应用,如影像处理、流媒体服务等。 但是,因为 RAID3 在出现坏盘时性能会大幅下降,因此常使用 RAID5 替代 RAID3 来运行具有持续性、高带宽、大量读写特征的应用。
RAID4 与 RAID3 的原理大致相同,数据都是依次存储在多个硬盘之上,奇偶校验码存放在独立的奇偶校验盘上,唯一不同的是,在数据分割上RAID3对数据的访问是按位进行的,RAID4是以数据块为单位。 一个数据块是一个完整的数据集合,比如一个文件就是一个典型的数据块。当然,对于硬盘的读取,一个数据块并不是一个文件,而是由操作系统所决定的,这就是我们熟悉的簇(Cluster) 不过,在不同硬盘上的同级数据块也都通过 XOR 进行校验,结果保存在单独的校验盘,所谓同级的概念就是指在每个硬盘中同一柱面同一扇区位置的数据算是同级。在写入时,RAID 就是按这个方法把各硬盘上同级数据的校验统一写入校验盘,等读取时再即时进行校验。因此即使是当前硬盘上的数据块损坏,也可以通过 XOR 校验值和其他硬盘上的同级数据进行恢复。 RAID4 写一个数据块操作只需要写数据盘和校验盘两个磁盘,因此性能要高于 RAID3,但是由于其每次写操作仍然必须读取所有同条带的数据块、计算校验值、写入校验值等多个操作,写性能仍然较低,同时并发写入情况下,单块校验磁盘压力过大,而且随着成员磁盘数量的增加,校验盘的系统瓶颈将更加突出,因此 RAID4 在实际应用中很少见。
RAID5 是目前最为广泛使用的 RAID 等级,它的原理与 RAID4 相似,区别在于校验数据分布在阵列中的所有磁盘上,而没有采用专门的校验磁盘。对于数据和校验数据,它们的写操作可以同时发生在完全不同的磁盘上。因此, RAID5 不存在 RAID3、RAID4 中的并发写操作时的校验盘性能瓶颈问题。 另外, RAID5 还具备很好的扩展性。当阵列磁盘 数量增加时,并行操作量的能力也随之增长,可比 RAID4 支持更多的磁盘,从而拥有更高的容量以及更高的性能。 RAID5 的磁盘上同时存储数据和校验数据,数据块和对应的校验信息存保存在不同的磁盘上,当一个数据盘损坏时,系统可以根据同一条带的其他数据块和对应的校验数据来重建损坏的数据。与其他 RAID 等级一样,重建数据时, RAID5 的性能会受到较大的影响。 RAID5 兼顾存储性能、数据安全和存储成本等各方面因素,它可以理解为 RAID0 和 RAID1 的折中方案,是目前综合性能最佳的数据保护解决方案。 RAID5 基本上可以满足大部分的存储应用需求,数据中心大多采用它作为应用数据的保护方案。
前面所述的各个 RAID 等级都只能保护因单个磁盘失效而造成的数据丢失。如果两个磁盘同时发生故障,数据将无法恢复。 RAID6 引入双重校验的概念,它可以保护阵列中同时出现两个磁盘失效时,阵列仍能够继续工作,不会发生数据丢失。 RAID6 等级是在 RAID5 的基础上为了进一步增强数据保护而设计的一种 RAID 方式,它可以看作是一种扩展的 RAID5 等级。 RAID6 不仅要支持数据的恢复,还要支持校验数据的恢复,因此实现代价很高,控制器的设计也比其他等级更复杂、更昂贵。 RAID6 思想最常见的实现方式是采用两个独立的校验算法,假设称为 P 和 Q ,校验数据可以分别存储在两个不同的校验盘上,或者分散存储在所有成员磁盘中。当两个磁盘同时失效时,即可通过求解两元方程来重建两个磁盘上的数据。 RAID6 具有快速的读取性能、更高的容错能力。但是,它的成本要高于 RAID5 许多,写性能也较差,并有设计和实施非常复杂。因此, RAID6 很少得到实际应用,主要用于对数据安全等级要求非常高的场合。它一般是替代 RAID10 方案的经济性选择。
标准 RAID 等级各有优势和不足,但如果将多个 RAID 等级组合起来,实现优势互补,弥补相互的不足,就可以达到在性能、数据安全性等指标上更高的 RAID 系统。 目前在业界和学术研究中提到的 RAID 组合等级主要有 RAID00 、 RAID01 、 RAID10 、 RAID100 、 RAID30 、 RAID50 、 RAID53 、 RAID60 ,但实际得到较为广泛应用的只有 RAID01 和 RAID10 两个等级。当然,组合等级的实现成本一般都非常昂贵,只是在 少数特定场合应用。
下面两张图是 RAID01 和 RAID10 的示意图,他们将数据条带化与镜像结合,兼顾了性能和安全性,是比较常见和被广泛应用的组合方案。
进一步的,还可以组合成为 RAID 100,进一步提高读写性能,也可以将 RAID3、RAID5、RAID6 与 RAID0 相组合形成性能较强的磁盘系统。
RAID 等级 | RAID0 | RAID1 | RAID3 | RAID5 | RAID6 | RAID10 |
---|---|---|---|---|---|---|
别名 | 条带 | 镜像 | 专用奇偶校验条带 | 分布奇偶校验条带 | 双重奇偶校验条带 | 镜像加条带 |
容错性 | 无 | 有 | 有 | 有 | 有 | 有 |
冗余类型 | 无 | 有 | 有 | 有 | 有 | 有 |
热备份选择 | 无 | 有 | 有 | 有 | 有 | 有 |
读性能 | 高 | 低 | 高 | 高 | 高 | 高 |
随机写性能 | 高 | 低 | 低 | 一般 | 低 | 一般 |
连续写性能 | 高 | 低 | 低 | 低 | 低 | 一般 |
需要磁盘数 | n≥1 | 2n (n≥1) | n≥3 | n≥3 | n≥4 | 2n(n≥2)≥4 |
可用容量 | 全部 | 50% | (n-1)/n | (n-1)/n | (n-2)/n | 50% |
然而,当前的 RAID 技术仍然存在诸多不足,各种 RAID 模式都存在自身的缺陷,主要集中在读写性能、实现成本、恢复时间窗口、多磁盘损坏等方面。因此, RAID 技术显然还存在很大的提升空间,具有很大的发展潜力。