文章

11. 冗余磁盘阵列(RAID)

1. RAID

冗余磁盘阵列 / 独立磁盘冗余阵列:Redundant Arrays of Independent Disks (RAID)

基本思想:

  1. 将多个独立操作的磁盘按某种方式组织成磁盘阵列,以增加容量
  2. 将数据存储在多个盘体上,通过这些盘并行工作来提高数据传输率
  3. 采用数据冗余来进行错误恢复以提高系统可靠性

特性:

  1. 一组物理磁盘驱动器组成,被视为单个逻辑驱动器
  2. 数据是分布在多个物理磁盘上
  3. 冗余磁盘容量用于存储校验信息,保证磁盘万一损坏时能恢复数据

2. RAID的分类

image-20231202162037511

1. RAID 0

image-20231202162224559

  1. 数据以条带的形式在可用的磁盘上分布

    是按照01234(数值序)的顺序进行同行条带之间的访问

  2. 不采用冗余来改善性能(不是RAID家族中的真正成员)

  3. 优点:

    1. 高数据传输率:因为可以同时在很多块盘(多通道)上写入和读取,所以速度会变快
    2. 高速响应I/O请求:两个I/O请求所需要的数据块可能在 不同的磁盘上
    3. 不需要奇偶校验位。
    4. 设计简单,易于实现。
  4. 缺点:

    1. 如果一个文件横跨四个盘,那么一个盘损坏,就会导致所有文件都不可用。

    image-20231202162508768

2. RAID 1

image-20231202162618068

  1. 采用了数据条带

  2. 采用简单地备份所有数据的方法来实现冗余

  3. 优点:

    1. 高速响应I/O请求:即便是同一个磁盘上的数据块,也可以由两组硬盘分别响应(比如条带0和条带4)
      1. 读请求可以由包含请求数据的两个对应磁盘中的某一个提供服务,可以选择寻道 时间较小的那个
      2. 写请求需要更新两个对应的条带:可以并行完成,但受限于写入较慢的磁盘
    2. 单个磁盘损坏时不会影响数据访问,恢复受损磁盘简单
  4. 缺点:

    1. 贵(买不起是你的缺点,不是RAID 1的缺点😎)
  5. 用途

    1. 限于用在存储系统软件、数据和其他关键文件的驱动器中
  6. 与 RAID 0 相比

    1. 如果有大批的读请求,则RAID 1能实现高速的I/O速率,性能可以达到RAID 0 的两倍
    2. 如果I/O请求有相当大的部分是写请求,则它不比RAID 0的性能好多少(理论上应该更差)
  7. RAID 10 和 RAID 01

    image-20231202163316029

RAID 10中,我们假设当DISK 0损坏时,在剩下的3块盘中,只有当DISK 1一个盘发生故障时,才会导致整个RAID失效,我们可简单计算故障率为1/3。

RAID 01中,仍然假设DISK0损坏,这时左边的条带将无法读取。在剩下的3块盘中,只要DISK2,DISK3两个盘中任何一个损坏,都会导致整个RAID失效,我们可简单计算故障率为2/3。

所以RAID 10 优于 RAID 01

3. RAID 2

RAID 2 本质上是 RAID 0,只是加入了汉明码来做数据的纠错。

image-20231202164506575

  1. 所有磁盘都参与每个I/O请求的执行(所以io速度慢)
  2. 各个驱动器的轴是同步旋转的,因此每个磁盘上的每个磁头在任何时刻都位于同一位置
  3. 采用数据条带:条带非常小,经常只有一个字节或一个字
  4. 纠错
    1. 对位于同一条带的各个数据盘上的数据位计算校验码(通常采用海明码),校验码存储在该条带中多个校验盘的对应位置
  5. 访问
    1. 读取:获取请求的数据和对应的校验码
    2. 写入:所有数据盘和校验盘都被访问
  6. 缺点
    1. 冗余盘依然比较多,价格较贵
    2. 适用于多磁盘易出错环境,对于单个磁盘和磁盘驱动器已经具备高可靠性的情 况没有意义(实际基本弃用

4. RAID 3

RAID 2和RAID 3最主要的区别在于它们的校验方法

image-20231202165332079

  1. 各个驱动器的轴同步旋转

  2. 采用非常小的数据条带(但是比RAID 2大一点)

  3. 校验:对所有数据盘上同一位置的数据计算奇偶校验码

    1. 当某一磁盘损坏时,可以用于重构数据:𝑃(𝑏)= 𝑏0 ⨁ 𝑏1 ⨁ 𝑏2 ⨁ 𝑏3

      如何重构:

      1
      2
      3
      4
      5
      6
      
      b2坏了
      p = b0 ⨁ 𝑏1 ⨁ 𝑏2 ⨁ 𝑏3
      𝑏2 ⨁ p = 𝑏2 ⨁ b0 ⨁ 𝑏1 ⨁ 𝑏2 ⨁ 𝑏3
      𝑏2 ⨁ p = b0 ⨁ 𝑏1 ⨁ 𝑏3
      𝑏2 ⨁ p ⨁ p= b0 ⨁ 𝑏1 ⨁ 𝑏3 ⨁ p
      𝑏2 = p ⨁ 𝑏0 ⨁ 𝑏1 ⨁ 𝑏3
      
  4. 优点:

    1. 能够获得非常高的数据传输率,对于大量读请求,性能改善特别明显(因为条带小)
  5. 缺点:

    1. 一次只能执行一个I/O请求,在面向多个IO请求时,性能将受损(也是因为条带小,每个IO请求所有磁盘都必须参与)

5. RAID 4

RAID 3和RAID 4最主要的区别在于它们的数据条带大小

image-20231202165736398

  1. 每个磁盘成员的操作是独立的,各个I/O请求能够并行处理(因为数据条带大)

  2. 采用相对较大的数据条带

  3. 根据各个数据盘上的数据来逐位计算奇偶校验条带,奇偶校验位存储在奇偶校验盘的对应条带上

  4. 优点:

    1. 当涉及所有磁盘的数据条带的较大I/O写操作时,只要用新的数据位来进行简单的计算即可得到奇偶校验位
    2. 可以并行地满足单独的I/O请求
  5. 缺点:

    1. 当执行较小规模的I/O写请求时,RAID 4会遭遇写损失

      1. 对于每一次写操作,阵列管理软件不仅要修改用户数据,而且要修改相应的校验位

        𝑃 ′ (𝐵) = 𝑃(𝐵) ⊕ 𝐵0 ⊕ 𝐵0 ′

    2. 因为冗余盘不能同时写入,所以所有的盘都不能同时写入(因为每次修改的话会影响到校验盘。无法同时进行两个操作。),因而校验盘会成为瓶颈(实际基本弃用

6. RAID 5

RAID 4和RAID 5最主要的区别在于RAID 5在所有磁盘上都分布了奇偶校验条带。

image-20231202170527995

  1. 与RAID 4 组织方式相似(常用

  2. 在所有磁盘上都分布了奇偶校验条带(避免潜在的I/O瓶颈问题)

  3. 访问时的“两读两写”:读在写前,读/写不需要并行。读和读之间可以并行,写和写之间可以并行。

    image-20231202170643348

  4. RAID 50:RAID 5与RAID 0的组合,先作RAID 5,再作RAID 0,也就是对多组RAID 5彼此构成条带访问

    image-20231202171002685

    1. RAID 50在底层的任一组或多组RAID 5中出现1颗硬盘损坏时,仍能维持运作(因为可以用校验条带反推);如果任一组RAID 5中出现2颗或2颗以上硬盘损毁,整组RAID 50就会失效
    2. RAID 50由于在上层把多组RAID 5进行条带化,性能比起单纯的RAID 5高,但容量利用率比RAID5要低(我认为安全性也比RAID 5高)

7. RAID6

image-20231202171201412

  1. 采用两种不同的校验码,并将校验码以分开的块存于不同的磁盘中

  2. 优点:
    1. 提升数据可用性:只有在平均修复时间间隔内3个磁盘都出了故障,才会造成数据丢失
  3. 缺点:
    1. 写损失:每次写都要影响两个校验块(读3个写3个磁盘)

8. 所有RAID的比较

image-20231202171350273

image-20231202171422879

image-20231202171440401

image-20231202162037511

本文由作者按照 CC BY 4.0 进行授权