第 18 章 独立磁盘冗余阵列(RAID)
RAID 的基本理念是将多个小、成本低廉的磁盘驱动器合并到一个阵列中,以取得一个大而昂贵的驱动无法实现的性能或冗余目标。这个驱动器阵列在计算机上显示为一个逻辑存储单元或驱动器。
RAID 允许信息分布在多个磁盘上。RAID 使用 磁盘条带(RAID 0)、磁盘镜像(RAID 1)和 带奇偶校验的磁盘条带(RAID 5)来实现冗余、低延迟、增大带宽以及最大程度从硬盘崩溃恢复的能力。
RAID 通过将数据拆分为统一大小的块(通常为 256K 或 512k,但也接受其他值),从而将数据分布在阵列中的每个驱动器上。然后,每个块根据所使用的 RAID 级写到 RAID 阵列中的硬盘驱动器上。当读取数据时,过程会反过来,给人产生一种阵列中的多个驱动器实际上是一个大驱动器的错觉。
系统管理员以及管理大量数据的其他人将受益于使用 RAID 技术。部署 RAID 的主要原因包括:
- 加强速度
- 使用单一虚拟磁盘增加存储容量
- 尽可能减少磁盘失败的数据丢失
18.1. RAID 类型
有三种可能的 RAID 方法:固件 RAID、硬件 RAID 和软件 RAID。
固件 RAID
固件 RAID (也称为 ATARAID)是一种软件 RAID,可以使用基于固件的菜单配置 RAID 集。此类 RAID 使用的固件也会挂接到 BIOS 中,允许您从 RAID 集启动。不同的供应商使用不同的磁盘元数据格式来标记 RAID 集成员。Intel Matrix RAID 是固件 RAID 系统的一个很好的例子。
硬件 RAID
基于硬件的阵列独立于主机管理 RAID 子系统。它按每个 RAID 阵列一个磁盘的形式呈现给主机。
硬件 RAID 设备可能是系统内部或外部的,内部设备通常由专用的控制器卡组成,该卡通常包括对操作系统透明的 RAID 任务,以及外部设备通常通过 SCSI、光纤通道、iSCSI、InfiniBand 或其他高速度网络互连和向系统呈现逻辑卷。
RAID 控制器卡的功能与操作系统的 SCSI 控制器相同,用于处理所有实际驱动器间的通信。用户将驱动器插入 RAID 控制器(就像普通的 SCSI 控制器)中,然后将它们添加到 RAID 控制器配置中。操作系统将无法辨别它们的不同。
软件 RAID
软件 RAID 在内核磁盘(块设备)代码中实现各种 RAID 级。它提供最便宜的解决方案,如昂贵的磁盘控制器卡或热插拔机箱 [2] 不需要。软件 RAID 也适用于更便宜的 IDE 磁盘以及 SCSI 磁盘。随着当今 CPU 速度越来越快,软件 RAID 通常会优于硬件 RAID。
Linux 内核包含一个 多磁盘(MD)驱动程序,其允许 RAID 解决方案完全独立于硬件。基于软件的阵列的性能取决于服务器 CPU 的性能和负载。
Linux 软件 RAID 堆栈的主要特性:
- 多线程设计
- 在不同的 Linux 机器间移动磁盘阵列不需要重新构建数据
- 使用空闲系统资源进行后台阵列重构
- 热插拔驱动器的支持
- 自动 CPU 检测,以利用某些 CPU 功能,如流 SIMD 支持
- 自动更正阵列磁盘上坏扇区
- 定期检查 RAID 数据,以确保阵列健康
- 主动监控阵列,在发生重要事件时将电子邮件报警发送到指定的电子邮件地址
- 写意图位图通过允许内核准确了解磁盘的哪些部分需要重新同步,而不必重新同步整个阵列,从而大大提高了重新同步事件的速度
- 重新同步检查点,以便如果您在重新同步期间重新启动计算机,则在启动时重新同步会从其停止的地方开始,而不是从头开始
- 安装后更改阵列参数的能力。例如:当有新磁盘需要添加时,您可以将 4 磁盘 RAID5 阵列增加成 5 磁盘 RAID5 阵列。这种增加操作是实时的,不需要您在新阵列上重新安装。