《Operating System:Three Easy Pieces》阅读笔记<二十四>—冗余磁盘阵列

155 阅读6分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情

冗余磁盘阵列

我们介绍了硬盘的基本模型,理论上,我们总是对磁盘有可靠性(reliable) 的要求。这要求硬盘有备份的功能,不光是备份,磁盘通过备份要有检测故障的能力。另外,很多时候我们对性能有一定的要求,并且我们大多时候希望在实现以上要求的前提下能够保持可用存储空间尽量大。

基于以上要求,我们提出了Redundant Array of Inexpensive Disks(RAID)。通过RAID,系统能够将多个磁盘视作一个大的存储空间。通过这种抽象,RAID为系统提供了关键的透明性,使得不同的系统能够在不同配置的磁盘下正常工作。

向系统添加新功能的时候应当考虑是否可以透明的添加,而不需要对系统的其余部分进行更改,大大降低了部署的难度,可以说RAID这一性质已经隐喻了它的成功。

通过RAID串联起多个磁盘有三大好处,性能:多个同步磁盘可以加速IO时间,容量:存放更多大数据集,可靠性:允许单个硬盘丢失数据,这种分析方法在之后也会用到。一般的,RAID可以分为软件实现和硬件实现,我们主要讨论硬件实现,处于主板上的RAID很像一个小型电脑,拥有它自己的处理器,持久化RAM和所连接的磁盘,但是上面运行的并不是应用,而是专门的固件。

RAID内部处理IO的流程是,接收操作系统传输的逻辑IO请求后,由RAID转化为多个物理IO,同时在多个磁盘副本上进行读写。但RAID设计并不是用来处理IO请求,而是用于检测并且恢复磁盘故障。RAID本身比较复杂,这里我们假设故障都是很简单能够检测到,不会出现隐藏故障和不可访问的块。

评价RAID有三个方面:

  • 容量,一块大小为N的硬盘实际可用空间是多少?
  • 可靠性,设计可以容忍多少磁盘故障?
  • 性能,RAID对于不同的负载下性能如何,差别大吗?

针对这些评估我们来分析几种常见的RAID设计思路。也有一些可量化的评估方法

  • 单请求延迟:能够一定程度解释磁盘在单个IO操作中的并发性能
  • 静态吞吐量:理论能够承载的最大并发带宽
  • 顺序读写性能和随机读写性能:两种常见的工作负载代表在实际情况下能够表现的性能

RAID方法的命名很有意思,以级别为分隔,常见的有RAID-0、RAID-1、RAID-4、RAID-5等。

第一种是RAID-0,我们也称之为分条的方法,数据块在磁盘上的分布如下图所示,可以看到数据是没有冗余,即没有备份的。

可以看到这里有一种块大小的概念,直接影响的就是磁头在各个磁盘间定位的开销大小,块越大,磁盘定位时间越短,大部分系统的块比较大,用64KB左右大小的块。

对于RAID-0的结构分析可以知道,这种方法架构的磁盘阵列容量和性能都是十分不错的,单请求延迟也比较小,但是可靠性是最差的,因为没有任何的数据备份。

第二种是RAID-1,我们称之为镜像的方法,简单来讲就是选n个盘在相同位置放数据副本,具体结构如下图所示,一般镜像和分条是一起的,称之为RAID-10或者RAID-01,下图是RAID-10的方法。

镜像的保留了RAID-0的定位特点,多备份让镜像的方法有并发读、并发写的特点,即读可以随便读一个块,但是写要并行写进去,无论是顺序读写还是随机读写都是这样。对于RAID-1的结构分析可以知道,这种方法容量少一半,读写操作比RAID-0都要慢不少,但是可靠性很强,可以保证单个磁盘故障的检测和修复。

磁盘数据有备份时RAID会有持续数据更新的问题,如果磁盘在同时写入块时,一个块已经写好,此时发生断电,另一个块还没写好,这样就不同步了。解决方法就是在RAID里面放一些持久化的RAM,专门用来记录日志,就算断电,读取日志也可以知道下一步要干嘛。

第三种是RAID-4,也叫带有奇偶校验位的空间。最根本的改变是用一个磁盘来存放奇偶校验位,表示该条的冗余信息的正确性。如果学习过奇偶校验位的应用,这里应该很好理解。具体的,校验方法可以使用简单的XOR方法,如果这一片有偶数个1,奇偶校验位返回0,有奇数个1,奇偶校验位返回1,当有多个位时,数据在每一位上都放置奇偶校验位。具体结构如下图所示

这种方式使用很少的冗余数据实现了磁盘故障的检测,不过这种方法只允许一个磁盘故障,无法定位多个故障磁盘。注意,数据备份的目的就是实现磁盘故障的检测和恢复,这里本质上将每一个位的冗余数据压缩到一个位上,是一种极好的压缩方法,只不过丢失的信息有些多。

第四种是RAID-5,这基本上是RAID-4的原理,但是将奇偶校验位分布到不同磁盘上。因为如果将奇偶校验位都放在一个磁盘里,那么对同一的磁盘的随机写是无法同步进行的,因此如果有大量的随机写操作,RAID-4方法会出现无法容忍的延迟。

因此将奇偶校验位这样分开就可以做到对同一磁盘的并发随机写,有了这种提升以后,几乎现在所有的RAID-4都被RAID-5代替,还有一些基于软件的RAID可能会用RAID-4,因为系统本身知道不会进行大量随机写的操作。

我们可以对这些RAID实现方法的性能进行量化分析,如下表所示。

可以发现不同方法的特点都很明显,它们直接的利弊都很明显,所以可以根据设计目标简单的选出来合适的RAID方法,同时RAID还有其它等级,都有针对不同方面的内容,如针对延迟的RAID-2,和RAID-3、RAID-6等。