一、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 技术作为高性能、高可靠的存储技术,已经得到了非常广泛的应用。 RAID 主要利用数据条带、镜像和数据校验技术来获取高性能、可靠性、容错能力和扩展性,根据运用或组合运用这三种技术的策略和架构,可以把 RAID 分为不同的等级,以满足不同数据应用的需求。 D. A. Patterson 等的论文中定义了 RAID1 ~ RAID5 原始 RAID 等级, 1988 年以来又扩展了 RAID0 和 RAID6 ,后续又发展了RAID10、RAID50、RAID60、RAID100等,而在实际应用领域中使用最多的 RAID 等级是 RAID0 、 RAID1 、 RAID3 、 RAID5 、 RAID6 、RAID10、RAID50。

       从实现角度看, 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 是由多个独立的高性能磁盘驱动器组成的磁盘子系统,从而提供比单个磁盘更高的存储性能和数据冗余的技术,从上层来看,可以简单的将其视为将多块物理磁盘组成的大磁盘,通过多个磁盘的组合提供更大的存储空间,并发地在多个磁盘上读写数据提高存储系统的 I/O 性能,同时通过镜像、条带、校验等提高存储系统的容错性,大大增强系统的可靠性和数据的安全性。

       RAID 的两个关键目标是提高数据可靠性和 I/O 性能。磁盘阵列中,数据分散在多个磁盘中,通过把相同数据同时写入到多块磁盘(典型地如镜像),或者将计算的校验数据写入阵列中来获得冗余能力,当单块磁盘出现故障时可以保证不会导致数据丢失。有些 RAID 等级允许更多地 磁盘同时发生故障,比如 RAID6 ,可以是两块磁盘同时损坏。在这样的冗余机制下,可以用新磁盘替换故障磁盘, RAID 会自动根据剩余磁盘中的数据和校验数据重建丢失的数据,保证数据一致性和完整性。数据分散保存在 RAID 中的多个不同磁盘上,并发数据读写要大大优于单个磁盘,因此可以获得更高的聚合 I/O 带宽。当然,磁盘阵列会减少全体磁盘的总可用存储空间,牺牲空间换取更高的可靠性和性能。

      RAID允许在不停机的情况下对故障磁盘进行更换,前提是硬盘需要支持热插拔。

      RAID 三个关键概念和技术:镜像(Mirroring)、数据条带(Data Stripping)和数据校验。镜像:将数据复制到多个磁盘,一方面可以提高可靠性,另一方面可并发从两个或多个副本数据来提高读性能。因为要确保数据正确地写到多个磁盘镜像,所以需要更多的时间消耗,磁盘的写新能会有所降低。数据条带:对数据进行分片,将数据分片分别存储到多个磁盘,所有的分片组合形成完整的数据副本,从而提高存储系统的读写性能。数据校验:利用冗余数据进行数据错误检测和修复,冗余数据通常采用海明码、异或操作等算法来计算获得,利用校验功能,可以很大程度上提高磁盘阵列的可靠性和容错能力。RAID 通过以上技术或组合来保障数据可靠性、可用性和 I/O 性能。

三、RAID优势

大容量:RAID 的一个显著优势是它扩大了磁盘的容量,由多个磁盘组成的 RAID 系统具有海量的存储空间。

高性能:RAID 采用数据条带化技术,数据分片存储到多个磁盘,突破单个磁盘的 I/O 性能、带宽等限制将数据 I/O 分散到各个成员磁盘上,从而获得比单个磁盘成倍增长的聚合 I/O 性能。

可靠性: RAID 采用镜像和数据校验等数据冗余技术,大幅度提升数据可用性和可靠性,保证了磁盘出错时,不会导致数据的丢失,不影响系统的连续运行。

可管理性:RAID 是一种虚拟化技术,它对多个物理磁盘驱动器虚拟成一个大容量的逻辑驱动器。用户就可以在这个虚拟驱动器上来组织和存储应用系统数据,管理员只需要管理单个虚拟驱动器,可以节省大量的管理工作。

四、常用的RAID 等级

      常用的RAID等级有:RAID0、RAID1、RAID5、RAID10、RAID50,因为RAID2、RAID3、RAID4在生产环境中很少用大,再次就不多做叙述。

RAID0

        RAID0 是一种简单的、无数据校验的数据条带化技术。实际上不是一种真正的 RAID,因为它并不提供任何形式的冗余数据策略。RAID0 将所在磁盘条带化后组成大容量的存储空间将数据分散存储在所有磁盘中,以独立访问方式实现多块磁盘的并读访问。由于可以并发执行 I/O 操作,总线带宽得到充分利用。加上不需要进行数据校验,RAID0 的性能在所有 RAID 等级中是最高的。理论上讲,一个由 n 块磁盘组成的 RAID0,它的读写性能是单个磁盘性能的 n 倍,但由于总线带宽等多种因素的限制,实际的性能提升低于理论值。

       RAID0 具有低成本、高读写性能、100%的高存储空间利用率等优点。但是它的缺点也非常明显,它不提供数据冗余保护,一旦数据损坏,将无法恢复。因此,RAID0 一般适用于对性能要求高但对数据安全性和可靠性不高的应用,如视频、音频存储、临时数据缓存空间等。

RAID1

       RAID1 称为镜像,它将数据完全易一致地分别写到工作磁盘和镜像磁盘,它的磁盘空间利用率为 50%。RAID1 在数据写入方面性能会有所下降,因为需要同时向多个磁盘写入数据,但是读数据的时候没有影响。RAID1 提供了最佳的数据保护,一旦工作磁盘发生故障,系统自动从镜像磁盘读取数据,不影响数据的安全性和完整性。

      RAID1 与 RAID0 刚好相反,为了增强数据安全性使两块磁盘数据呈现完全镜像,从而达到安全性好、技术简单、管理方便,RAID1 拥有完全容错的能力,但实现成本高。RAID1 应用于对顺序读写性能以及数据保护要求高的应用。

RAID5

        RAID5 应该是应该是目前最常见的 RAID 等级,RAID5校验数据分布在阵列中的所有磁盘上,而没有采用专门的校验磁盘,对于数据和校验数据,它们的写操作可以同时发生在完全不同的磁盘上。因此,RAID5 不存在 RAID4 中的并发写操作时的校验盘性能瓶颈问题。

       RAID5的磁盘上同时存储数据和校验数据,数据块和对应的校验信息保存在不同的磁盘上,当一个数据盘损坏的时,系统可以根据同一条带的其他数据块和对应的校验数据来重建损坏的数据。但是重建数据时,RAID5 的性能会受到较大的影响。

       RAID5 兼顾存储性能、数据安全和存储成本等各个方面因素,它可以理解为 RAID0 和 RAID1 的折中方案,是目前综合性能最佳的数据保护解决方案。RAID5 基本上可以满足大部分的存储应用需求,数据中心大多采用它作为应用数据的保护方案。

RAID10

       RAID10 (RAID 1+0)‌:先将磁盘两两分组进行‌镜像 (RAID 1)‌,再将多个镜像组进行‌条带化 (RAID 0)‌。例如 4 块盘,先组成 2 个镜像对,再条带化 。‌RAID10允许每个镜像组中各损坏一块磁盘而不丢失数据。只有当同一镜像组内的双盘同时故障时,阵列才会失效 。‌ 整体磁盘利用率均仅为 50%。

RAID50

       利用多层 RAID 配置,先用多块磁盘组成RAID5,然后多组RAID5组成RAID0,充分利用 RAID5 与 RAID0 的优点,从而获得在存储容量、数据安全性和I/O负载均衡等方面的大幅性能提升。

       下面对RAID0 RAID1 RAID5 RAID10 RAID50就最低的磁盘数量、容量利用率、数据安全性、读写性能等方面做对比:

特性 RAID 0 RAID 1 RAID 5 RAID 10 RAID 50
最低磁盘数 2块 2块 3块 4块 6块
容量利用率 100% 50% (N-1)/N
(约67%~94%)
50% (N-2)/N
(约67%~94%)
数据安全性
(0保护,坏一块全丢)

(镜像,允许坏一块)
中等
(奇偶校验,允许坏一块)

(镜像组内可坏多块)
中高
(每组RAID 5允许坏一块)
读性能 较高 较高 非常高 非常高
写性能 中等 较低
(校验计算开销大)
较高 较高

五、Linux软RAID实现

       在Linux系统中目前以MD(Multiple Devices)虚拟块设备的方式实现软件RAID,利用多个底层的块设备虚拟出一个新的虚拟设备,并且利用条带化(stripping)技术将数据块均匀分布到多个磁盘上来提高虚拟设备的读写性能,利用不同的数据冗余算法来保护用户数据不会因为某个块设备的故障而完全丢失,而且还能在设备被替换后将丢失的数据恢复到新的设备上。

创建磁盘阵列

       本节通过在Centos7系统上使用mdadm工具创建RAID1演示raid的创建过程和使用过程。

       mdadm是multiple devices admin的简称,它是Linux下的一款标准的软件 RAID 管理工具,默认情况下,centos7没有安装mdadm,需要通过yum安装:

yum install -y mdadm

主要用法模式如下:

mdadm -C /dev/md0 -l 1 -n 2 /dev/sdb /dev/sdc

  • -C  --create  创建阵列;
  • -a  --auto   同意创建设备,推荐使用-a yes参数一次性创建;
  • -l  --level    阵列模式,支持的阵列模式有 linear, raid0, raid1, raid4, raid5, raid6, raid10, multipath, faulty, container;
  • -n --raid-devices  阵列中活动磁盘的数目,该数目加上备用磁盘的数目应该等于阵列中总的磁盘数目;
  • /dev/md0     阵列的设备名称,如果还有其他阵列组可以以此类推;

mdadm -D /dev/md0 查看/dev/md0磁盘阵列的详细信息

可以看见创建后RAID1的两块盘正在同步状态。

通过以上步骤磁盘已经创建了一个RAID1磁盘阵列,接下来可按类似普通磁盘一样对这个虚拟磁盘进行格式化、挂载并测试文件写入读取。

mkfs.ext4 /dev/md0

mkdir /data_raid1

mount -t ext4 /dev/md0 /data_raid1

cd /data_raid1/

echo "this is a testfile" >> testfile.txt

执行如下命令配置开机自动挂载

echo "/dev/md0 /data_raid1 ext4 defaults 0 0" >> /etc/fstab

        通过以上步骤创建了一个RAID1磁盘阵列、对虚拟磁盘执行格式化、挂载磁盘等,测试了文件的写入和读取操作,对于其他类型的磁盘阵列创建方式也是类似的。

RAID故障磁盘更换

       通过前述知道,RAID提供了数据的冗余,一般单块磁盘故障不会影响业务,不会造成数据丢失,如RAID1。但磁盘故障需要就是更换,如果不及时更换,可能造成数据永久丢失。下面演示磁盘阵列中磁盘故障的硬盘更换过程。假设/dev/sde故障,如何进行更换修复故障呢?

mdadm /dev/md0 -f /dev/sde

加入一块新盘/dev/sdd替换故障盘/dev/sde

mdadm /dev/md0 -a /dev/sdd    # -a  表示add添加磁盘

然后mdadm -D /dev/md0 查看/dev/md0磁盘阵列的状态信息

可以看到磁盘阵列正在重建rebuild,可以看到重建的完成进度

完成重建后移除故障盘mdadm /dev/md0 -r /dev/sde

        本节讲述了RAID简介、RAID的实现原理、常用的RAID等级,然后在centos7上使用mdadm创建raid1的创建和故障磁盘的更换过程。下一节将讲述Linux操作系统的用户及用户组管理。

        

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐