从服务器构建说起(二).磁盘阵列RAID

草木瓜整理 20070403

一、序
   
    存储是现代企业服务器的管理核心,磁盘阵列,磁带机等存储设备便是重中之重。
服务器构建的重要任务就是对存储介质的管理。

二、RAID概念

    RAID(Redundant Arrays of Independent Disks),中文为廉价冗余磁盘阵列。
   
    在计算机发展的初期,“大容量”硬盘的价格还相当高,解决数据存储安全性问
题的主要方法是使用磁带机等设备进行备份,这种方法虽然可以保证数据的安全,但
查阅和备份工作都相当繁琐。 1987年, Patterson、Gibson和Katz这三位工程师在
加州大学伯克利分校发表了题为《A Case of Redundant Array of Inexpensive
Disks(廉价磁盘冗余阵列方案)》的论文,其基本思想就是将多只容量较小的、相对
廉价的硬盘驱动器进行有机组合,使其性能超过一只昂贵的大硬盘。这一设计思想很
快被接受,从此RAID技术得到了广泛应用,数据存储进入了更快速、更安全、更廉价
的新时代。
  简单地讲,RAID技术就是利用多个硬盘的组合提供高效率及冗余的功能。
   
三、RAID的优势

  传输速率高。在RAID中,可以让很多磁盘驱动器同时传输数据,而这些磁盘驱动
器在逻辑上又是一个磁盘驱动器,所以使用RAID可以达到单个磁盘驱动器几倍、几十
倍甚至上百倍的速率。这也是RAID最初想要解决的问题。因为当时CPU的速度增长很快,
而磁盘驱动器的数据传输速率无法大幅提高,所以需要有一种方案解决二者之间的矛盾。
RAID最后成功了。

  可以提供容错功能。这是使用RAID的第二个优势,因为普通磁盘驱动器无法提供
容错功能,如果不包括写在磁盘上的CRC(循环冗余校验)码的话。RAID容错是建立在每
个磁盘驱动器的硬件容错功能之上的,所以它提供更高的安全性。

  此外RAID比起传统的大直径磁盘驱动器来,在同样的容量下,价格要低很多。

四、RAID的分类

  (1):RAID 0 (条带化 Striping)
  
  RAID 0需要至少两个硬盘,是没有任何数据保护的,它只是将两个或多个相同型
号及容量的硬盘组合起来,而当系统提取数据时,它可以同时由所有硬盘(同一个阵列
里)读出数据,速度会比一个硬盘快得多。磁盘阵列的总容量为各个硬盘容量之和。它
使用一种称为"条带"(stripe)的技术把数据分布到各个磁盘上。在那里每个"条带"
被分散到连续"块"(block)上,数据被分成从512字节到数兆字节的若干块后,再交替
写到磁盘中。第1块被写到磁盘1中,第2块被写到磁盘2中,如此类推。当系统到达阵列
中的最后一个磁盘时,就写到磁盘1的下一分段,如此下去。
  分割数据可以将I/O负载平均分配到所有的驱动器中。由于驱动器可以同时写或读,
使得性能显著提高。但是,它却没有数据保护能力。如果一个磁盘出现故障,那么数据
就会全盘丢失。因此,RAID 0不适用于关键任务环境,但是,它的强项在于视频、图象
的制作和编辑等等对磁盘读写频繁的应用,以及做些临时性转换存储。
    RAID 0是磁盘容量利用率最高的。

  (2):RAID 1 (镜象 Mirror)
  
  RAID 1也被称为镜象,因为一个磁盘上的数据被完全复制到另一个磁盘上。如果一
个磁盘的数据发生错误,或者硬盘出现了坏道,那么另一个硬盘可以补救回磁盘故障而
造成的数据损失和系统中断。另外,RAID 1还可以实现双工——即可以复制整个控制器,
这样在磁盘故障或控制器故障发生时,所有数据都可以得到保护。镜象和双工的缺点是
需要多出一倍数量的驱动器来复制数据。在读数据过程中,系统可以在两块磁盘中同时
读取,这样会提高读效率,不过在写数据时,系统需要多执行一次写操作,这样的话会
影响写入效率。RAID 1是十分安全的一种方式。可以由软件或硬件方式实现。

  (3):RAID 0+1 (镜象阵列条带,又称 RAID 10,Striping+mirror)
  
  RAID 0+1 提供100%的数据冗余,支持更大的卷尺寸。组建 RAID 0+1 至少需要4
块磁盘,其中两块磁盘为条带数据分布,即做一个 RAID 0,提升读写性能,而另外两
块则为前面两块的镜像,保证了数据的完整备份。实际上就是先做两个RAID 0,组成两
个大容量硬盘,然后对这两个RAID 0再做镜象。虽然其硬盘利用率为50%,然是最高效
率的规划方式。

  (4):RAID 1+0 (Mirror+Striping)
  
  先将磁盘两两分组做Raid 1,然后对镜像磁盘组做Raid 0。从硬盘的使用效率和
数据的读写效率来说,Raid 1+0与Raid 0+1是完全一致的。但是从可靠性上来说,
Raid 1+0比Raid 0+1要更安全一些。
  举个简单的例子:  
  RAID 0+1 模式:A1+A2 / B1+B2
  如果此时A1盘坏了,相当于A1+A2坏掉了,此时如果B1+B2任一快盘坏掉的话,这个
RAID就无法工作了。即在坏两快盘的情况下,只有2/6的机率让磁盘能够正常运行。(数
学组合四快中取两块,有六种取法,只有两种取法能正常运行)

  RAID 1+0 模式:A1/A2 + B1/B2
  这时在坏两块盘正常运行的机率是 1-2/6 = 4/6,即只有两种取法会导致不能正常
运行。

  (5):RAID 2,RAID 3, RAID 4 和 RAID 5
  
  这些RAID方式都使用了校验的概念提供容错能力。简单的说,我们可以把校验想
象为一种二进制的校验和,可以告诉其它所有字位是否正确的特殊位。
  常用的校验如奇偶性校验,CRC校验等。在数据通信领域,奇偶校验常用于确定数
据是否被正确传送。例如,对于每一个字节,我们可以简单计算数字位1的个数,并在
字节内加入附加校验位。假设存储的数据用位标示为1、1、 1、0、0、1、0、1,那么
把每个位相加(1+1+1+0+0+1+0+1=5),结果是奇数,那么在校验位定义为1,
反之为0。当读取发送的数据时,会再次把前8位中存储的数据相加,计算结果是否与
校验位相一致。从而一定程度上能检测出通信错误,奇偶校验只能检测出错误而无法对
其进行修正,同时虽然双位同时发生错误的概率相当低,但奇偶校验却无法检测出双位
错误。
  对于RAID,这是远远不够的。固然错误的检测非常重要,但是如果不能对错误进行
修复,我们就无法提高整个系统的可靠性。

  RAID 3 Parallel transfer with parity (并行传输及校验)

  RAID 3采用的是一种较为简单的校验实现方式,使用一个专门的磁盘存放所有的校
验数据,而在剩余的磁盘中创建带区集(即条带化)分散数据的读写操作。例如,在一个
由4块硬盘构成的RAID 3系统中,3块硬盘将被用来保存数据,第四块硬盘则专门用于校
验。第四块硬盘中的每一个校验块所包含的都是其它3块硬盘中对应数据块的校验信息。
RAID 3的成功之处就在于不仅可以象RAID 1那样提供容错功能,而且整体开销从RAID 1
的50%下降为25%(RAID 3+1)。随着所使用磁盘数量的增多,成本开销会越来越小。
  在不同情况下,RAID 3读写操作的复杂程度不同。最简单的情况就是从一个完好的
RAID 3系统中读取数据。这时,只需要在数据存储盘中找到相应的数据块进行读取操作
即可,不会增加任何额外的系统开销。
  当向RAID 3写入数据时,情况会变得复杂一些。即使我们只是向一个磁盘写入一个
数据块,也必须计算与该数据块同处一个带区的所有数据块的校验值,并将新值重新写
入到校验块中。
  
  磁盘1     磁盘2      磁盘3    校验盘
  
  带区A     带区A      带区A    校验块A
  带区B     带区B      带区B    校验块B
  ...

  我们可以通过适当设置带区的大小使RAID系统得到简化。如果某个写入操作的长度
恰好等于一个完整带区的大小(全带区写入),那么我们就不必再读取带区中的关联数
据块计算校验值。我们只需要计算整个带区的校验值,然后直接把数据和校验信息写入
数据盘和校验盘即可。

  RAID 3虽然具有容错能力,但是系统会受到影响。当一块磁盘失效时,该磁盘上的
所有数据块必须使用校验信息重新建立。如果我们是从好盘中读取数据块,不会有任何
变化。但是如果我们所要读取的数据块正好位于已经损坏的磁盘,则必须同时读取同一
带区中的所有其它数据块,并根据校验值重建丢失的数据。
  当我们更换了损坏的磁盘之后,系统必须一个数据块一个数据块的重建坏盘中的数
据。整个过程包括读取带区,计算丢失的数据块和向新盘写入新的数据块,都是在后台
自动进行。重建活动最好是在RAID系统空闲的时候进行,否则整个系统的性能会受到严
重的影响。
  RAID 3所存在的最大一个不足,同时也是导致RAID 3很少被人们采用的原因就是
校验盘很容易成为整个系统的瓶颈。
  我们已经知道RAID 3会把数据的写入操作分散到多个磁盘上进行,然而不管是向哪
一个数据盘写入数据,都需要同时重写校验盘中的相关信息。因此,对于那些经常需要
执行大量写入操作的应用来说,校验盘的负载将会很大,无法满足程序的运行速度,从
而导致整个RAID系统性能的下降。鉴于这种原因,RAID 3更加适合应用于那些写入操作
较少,读取操作较多的应用环境。

  从概念上讲, RAID 2 同RAID 3类似, 两者都是将数据条块化分布于不同的硬盘上,
条块单位为位或字节。然而RAID 2使用称为“Hamming Code ECC (汉明码错误检测与
修正)”的编码技术来提供错误检查及恢复。
  这种编码技术需要多个磁盘存放检查及恢复信息, 使得RAID 2技术实施更复杂。
RAID 2是早期为了能进行即时的数据校验而研制的一种技术(这在当时的RAID 0、1 等
级中是无法做到的),从它的设计上看也是主要为了即时校验以保证数据安全,针对了
当时对数据即时安全性非常敏感的领域,如服务器、金融服务等。但由于花费太大成本
昂贵,目前已基本不再使用,转而以更高级的即时检验RAID 所代替,如RAID 3、5等。
  (汉明码是一个在原有数据中插入若干校验码来进行错误检查和纠正的编码技术。有
兴趣的可以研读相关文档)

  RAID 3 是在RAID 2 基础上发展而来的,主要的变化是用相对简单的异或逻辑运算
(XOR, eXclusive OR )校验代替了相对复杂的汉明码校验,从而也大幅降低了成本。

  RAID 4 Independent Data disks with shared Parity disk (独立的数据硬盘与共享的校验硬盘)

  同RAID 2, RAID 3一样, RAID 4同样将数据条块化并分布于不同的磁盘上, 但条块
单位为块。RAID 4 是按数据块为单位存储的,那么数据块应该怎么理解呢?简单的话,
一个数据块是一个完整的数据集合,比如一个文件就是一个典型的数据块。RAID 4 这
样按块存储可以保证块的完整,不受因分条带存储在其他硬盘上而可能产生的不利影响
(比如当其他多个硬盘损坏时,数据就完了)。

  (5):RAID 5

  RAID 3所存在的校验盘的性能问题使几乎所有的RAID系统都转向了RAID 5。在运行
机制上,RAID 5和RAID 3完全相同,也是由同一带区内的几个数据块共享一个校验块。
  RAID 5和RAID 3的最大区别在于RAID 5不是把所有的校验块集中保存在一个专门的
校验盘中,而是分散到所有的数据盘中。RAID 5使用了一种特殊的算法,可以计算出任
何一个带区校验块的存放位置。如下所示:

  磁盘1     磁盘2      磁盘3     磁盘4
  
  校验块A   带区A      带区A     带区A
  带区B     校验块B    带区B     带区B
  带区C     带区C      校验块C   带区C
  ...

  校验块已经被分散保存在不同的磁盘中,这样就可以确保任何对校验块进行的读写
操作都会在所有的RAID磁盘中进行均衡,从而消除了产生瓶颈的可能。
  RAID5 的控制比较复杂,尤其是利用硬件对磁盘阵列的控制,因为这种方式的应用
比其他的RAID level 要掌握更多的事情,有更多的输出/入需求,既要速度快,又要处
理数据,计算校验值,做错误校正等,所以价格较高。

  (6):RAID 6
  
  RAID 6 与RAID 5相比,增加了第二个独立的奇偶校验信息块. 两个独立的奇偶系统
使用不同的算法, 数据的可靠性非常高。即使两块磁盘同时失效,也不会影响数据的使用。
但需要分配给奇偶校验信息更大的磁盘空间, 相对于RAID 5有更大的"写损失"。RAID 6
的写性能非常差, 较差的性能和复杂的实施使得RAID 6很少使用。

  (7):RAID 7
  
  RAID 7自身带有智能化实时操作系统和用于存储管理的软件工具,可完全独立于主
机运行,不占用主机CPU资源。RAID 7存储计算机操作系统(Storage Computer Operating
System)是一套实时事件驱动操作系统,主要用来进行系统初始化和安排RAID 7磁盘阵
列的所有数据传输,并把它们转换到相应的物理存储驱动器上。通过Storage Computer
Operating System来设定和控制读写速度,可使主机I/O传递性能达到最佳。如果一个磁
盘出现故障,还可自动执行恢复操作,并可管理备份磁盘的重建过程。
  RAID 7采用的是非同步访问方式,极大地减轻了数据写瓶颈,提高了I/O速度。
(所谓非同步访问,即RAID 7的每个I/O接口都有一条专用的高速通道,作为数据或控制
信息的流通路径,因此可独立地控制自身系统中每个磁盘的数据存取。)如果RAID 7有N个
磁盘,那么除去一个校验盘(用作冗余计算)外,可同时处理N-1个主机系统随机发出的
读/写指令,从而显著地改善了I/O应用。RAID 7系统内置实时操作系统还可自动对主机发
送过来的读/写指令进行优化处理,以智能化方式将可能被读取的数据预先读入快速缓存中,
从而大大减少了磁头的转动次数,提高了I/O速度。RAID 7可帮助用户有效地管理日益庞大
的数据存储系统,并使系统的运行效率提高至少一倍以上,满足了各类用户的不同需求。
  RAID 7等级是至今为止,理论上性能最高的RAID模式。
  
五、写在最后

  作为入门的RAID介绍,这篇只是整理自形形色色的各类RAID文章,这里推荐几篇更
为系统或专业的文章以供查阅:
   时成阁的《网络存储导论》
   赵效民《让我们谈谈RAID》