RAID
概述
1988 年美国加州大学伯克利分校的 D.A. Patterson 教授等首次在论文 “A Case of Redundant Array of Inexpensive Disks” 中提出了 RAID 概念,即廉价冗余阵列(Redundant Array of Inexpensive Disks)。由于当时大容量磁盘比较昂贵,RAID 的基本思想是将多个容量较小、相对廉价的磁盘进行有机组合,从而以较低的成本获得与昂贵大容量磁盘相当的容量、性能、可靠性。随着磁盘成本和价格的不断降低,RAID 可以使用大部份的磁盘,“兼价”已经毫无意义。因此,RAID 咨询委员会(RAID Advisory Board,RAB)决定用“独立”替代“廉价”,于是 RAID 变成独立磁盘冗余阵列(Redundant Array of Independent Disks)。
RAID 主要利用数据条带、镜像和数据校验技术来获取高性能、可靠性、容错能力和扩展性,根据运用或组合运用这三种技术的策略和架构,可以把 RAID 分为不同等级,以满足不同数据应用的需求。D.A. Patterson 等的论文中定义了 RAID1 ~ RAID5 原始 RAID 等级,1988 年以来又扩展了 RAID0 和 RAID6。近年来,存储厂商不断推出诸如 RAID7、RAID10/01、RAID50、RAID53、RAID100 等 RAID 等级,但这些并无统一标准。目前业界公认的标准是 RAID0 ~ RAID5,除了 RAID2 外的四个等级被定为工业标准,而在实际应用领域中使用最多的 RAID 等级是 RAID0、RAID1、RAID3、RAID5、RAID6 和 RAID10。
- RAID0:一种简单的、无数据校验的数据条带化技术。实际上 RAID0 不是一种真正的 RAID,因为它不提供任何形式的冗余策略。RAID0 将所在的磁盘条带化后组成大空量的存储空间,将数据分散存储在所有磁盘中,以独立访问方式实现多块磁盘的并读访问。由于可以并发执行 I/O 操作,总线带宽得到充分利用,再加上不需要进行数据校验,RAID0 的性能在所有 RAID 等级中是最高的。理论上讲,一个由 n 块磁盘组成的 RAID0,它的读写性能是单个磁盘的 n 倍,但是由于总线带宽等多种因素的限制,实际的性能提升低于理论值。RAID0 具有低成本、高读写性能、100%的高存储空间利用率等优点,但是它不提供数据冗余保护,一但数据损坏,将无法恢复。因此 RAID0 一般适用于对性能要求严格但对数据安全性和可靠性不高的应用,如视频、音频存储、临时数据缓存空间等。
- RAID1:镜像存储,它将数据完全一致地分别写到工作磁盘和镜像磁盘,它的磁盘空间利用率为 50%。RAID1 在数据写入时,响应时间会有所影响,但是读取数据的时候没有影响。RAID1 提供了最佳的数据保护,一但工作磁盘发生故障,系统自动从镜像磁盘读取数据,不会影响用户工作。RAID1 拥有完全容错的能力,但实现成本高。RAID1 应用于对顺序读写性能要求高以及对数据保护极为重视的应用。
- RAID3:使用专用校验盘的并行访问阵列,它采用一个专用的磁盘作为校验盘,其余磁盘作主国数据盘,数据按位可字节的方式交叉存储到各个数据盘中。RAID3 至少需要三块磁盘,不同磁盘上同一带区的数据作为 XOR 校验,校验值写入校验盘中。RAID3 完好时读性能与 RAID0 完全一致,并行从多个磁盘条带读取数据,性能非常高,同时还提供了数据容错能力。向 RAID3 写入数据时,必须计算与所有同条带的校验值,并将新校验值写入校验盘中。一次写操作包含了写数据块、读取同条带的数据块、计算校验值、写入校验值等多个操作,系统开销非常大,性能校低。如果 RAID3 中某一磁盘出现故障,不会影响数据读取,可以借助校验数据和其他完全数据来重建数据。假如所要读取的数据块正好位于失效磁盘,则系统需要读取所有同一条带的数据块,并根据校验值重建丢失的数据,系统性能将受到影响。当故障磁盘被更换后,系统按相同的方式重建故障盘中的数据至新磁盘。RAID3 只需要一个校验盘,阵列的存储空间利用率高,再加上并行访问的特征,能够为高带宽的大量读写提供高性能,适用大容量数据的顺序访问应用,如影像处理、流媒体服务等。
- RAID4:与 RAID3 的原理大致相同,区别在于条带化的方式不同。RAID4 按照块的方式来组织数据,写操作只涉及当前数据盘和样验盘两个盘,多个 I/O 请求可以同时得到处理,提高了系统性能。RAID4 按块存储可以保证单块的完整性,可以避免受到其他磁盘上同条带产生的不利影响。RAID4 在不同磁盘上同级数据块同样使用 XOR 校验,结果存储在校验盘中。写入数据时,RAID4 按这种方式把各磁盘上同级数据的校验值写入磁盘,读取时进行即时校验。因此,当某块磁盘的数据块损坏,RAID4 可以通过校验值以及其他磁盘上的同级数据块进行数据重建。RAID4 提供了非常好的读性能,但单一的校验盘往往成为系统性能瓶颈。对于写操作,RAID4 只能一个磁盘一个磁盘地写,并且还要写入校验数据,因此写性能比较差。而且随着成员磁盘数量的增加,校验盘的系统瓶颈将更加突出。正是如上这些限制和不足,RAID4 在实际应用中很少见,
主流存储产品也很少使用 RAID4 保护
。 - RAID5:与 RAID4 的原理相似,区别在于校验数据分布在阵列中的所有磁盘上,而没有采用专门的校验磁盘。对于数据和校验数据,它们的写操作可以同时发生在完全不同的磁盘上。因此,RAID5 不存在 RAID4 中的并发写操作时的校验盘性能瓶颈问题。另外,RAID5 还具备很好的扩展性,当阵列磁盘数量增加时,并行操作量的能力也随之增长,可比 RAID4 支持更多的磁盘,从而拥有更高的容量以及更好的性能。RAID5 在磁盘上同时存储数据和校验数据,数据块和对应的校验信息保存在不同的磁盘上,当一个数据盘损坏时,系统可以根据同一条带的其他数据块和对应的校验数据来重建损坏的数据。与其他 RAID 等级一样,重建数据时,RAID5 的性能会受到较大的影响。RAID5 兼顾存储性能、数据安全和存储成本等各方面因素,它可以理解为 RAID0 和 RAID1 的折中方案,
是目前综合性能最佳
的数据保护解决方案。RAID5 基本上可以满足大部份的存储应用需求,数据中心大多采用它作主国应用数据的保护方案。 - RAID6:前面所述的各个 RAID 等级都只能保护因单个磁盘失效而造成的数据丢失。如果两个磁盘同时发生故障,数据将无法恢复。RAID6 引入双重校验的概念,它可以保护阵列中同时出现两个磁盘失效时,阵列仍能够继续工作,不会发生数据丢失。RAID6 等级是在 RAID5 的基础上为了进一步增强数据保护而设计的一种 RAID 方式,它可以看作是一种扩展的 RAID5 等级。RAID6 不仅要支持数据的恢复,还要支持校验数据的恢复,因此实现代价很高,控制器的设计也比其他等级更复杂、更昂贵。RAID6 思想最常见的实现方式是采用两个独立的校验算法,假设称为 P 和 Q,校验数据可以分别存储在两个不同的校验盘上,或者分散存储在所有成员磁盘中。当两个磁盘同时失效时,即可通过求解两元一次方程来重建两个磁盘上的数据。RAID6 具有快速读取性能、更高的容错能力,但是成本要高于 RAID5 许多,写性能也较差,并且设计和实施非常复杂。因此 RAID6 很少得到实际应用。
- RAID01 和 RAID10:可以看作是 RAID1 和 RAID0 的组合。RAID01 是先做条带化再作镜像,本质是对物理磁盘实现镜像;而 RAID10 是先做镜像再作条带化,是对虚拟磁盘实现镜像。相同配置下,通常 RAID01 比 RAID10 具有更好的容错能力。RAID01 兼备了 RAID0 和 RAID1 的优点,它先用两块磁盘建立镜像,然后再在镜像内部做条带化。RAID01 的数据将同时写入到两个磁盘阵列中,如果其中一个阵列损坏,仍可继续工作,保证数据安全性的同时又提高了性能。
主流 RAID 等级技术对比:
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 拥有自己的 RAID 控制处理与 I/O 处理芯片,甚至还有阵列缓冲,对 CPU 的占用率和整性性能是三类实现中最优的,但是实现成本也最高。硬 RAID 通常通常都支持热交换技术,在系统运行下更换故障硬盘,服务器平台多采用 RAID 卡。
软 RAID
软 RAID 没有专用的控制芯片和 I/O 芯片,完全由操作系统和 CPU 来实现所有 RAID 的功能。现代操作系统基本上都提供软 RAID 支持,通过在磁盘设备驱动程序上添加一个软件层,提供一个物理驱动器与逻辑驱动器之间的抽象层。目前,操作系统支持的最常见的 RAID 等级有 RAID0、RAID1、RAID10、RAID10 和 RAID5 等。
软 RAID 的配置管理和数据恢复都比较简单,但是 RAID 所有任务的处理完全由 CPU 来完成,如计算校验值,所以执行效率比较低下,这种方式需要消耗大量的运算资源,支持 RAID 模式较少,很难广泛应用。软 RAID 由操作系统来实现,因此系统所在分区不能作为 RAID 的逻辑成员磁盘,软 RAID 不能保护系统盘。
在 Linux 下,通常使用 mdadm
工具来创建、管理磁盘阵列。
# 创建 RAID1 磁盘阵列
$ mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1
# 查看磁盘阵列的创建进度
$ cat /proc/mdstat
# 也可以通过以下命令查看工作状态
$ mdadm --detail /dev/md0
# 创建文件系统
$ mkfs -t xfs /dev/md0
# 挂载磁盘阵列
$ mount /dev/md0 /data
# 保存阵列布局
$ mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf