RAID 发展至今共有10 个主要的等级,下面就将依次介绍
RAID与大容量存储
1.1 RAID 概念
RAID 的英文全称为Redundant Array of Inexpensive (或Independent) Disks,而不是某些词典中所说的“ Redundant Access Independent Disks” 。中文名称是廉价(独立)磁盘冗余阵列。
RAID 的初衷主要是为了大型服务器提供高端的存储功能和冗余的数据安全。在系统中,RAID 被看作是一个逻辑分区,但是它是由多个硬盘组成的(最少两块)。它通过在多个硬盘上同时存储和读取数据来大幅提高存储系统的数据吞吐量(Throughput ),而且在很多RAID 模式中都有较为完备的相互校验/恢复的措施,甚至是直接相互的镜像备份,从而大大提高了RAID 系统的容错度,提高了系统的稳定冗余性,这也是Redundant 一词的由来。
RAID 以前一直是SCSI 领域的独有产品,因为它当时的技术与成本也限制了其在低端市场的发展。今天,随着RAID 技术的日益成熟与厂商的不断努力,存储工程师已经能够享受到相对成本低廉得多的IDE-RAID 系统,虽然稳定与可靠性还不可能与SCSI-RAID 相比,但它相对于单个硬盘的性能优势对广大玩家是一个不小的诱惑。事实上,对于日常的低强度操作,IDE-RAID 已足能胜任了。
与Modem 一样,RAID 也有全软、半软半硬与全硬之分,全软RAID 就是指RAID 的所有功能都是操作系统(OS)与CPU 来完成,没有第三方的控制/处理(业界称其为RAID 协处理器�D�DRAID Co-Processor )与I/O 芯片。这样,有关RAID 的所有任务的处理都由CPU 来完成,可想而知这是效率最低的一种RAID 。半软半硬RAID 则主要缺乏自己的I/O 处理芯片,所以这方面的工作仍要由CPU 与驱动程序来完成。而且,半软半硬RAID 所采用的RAID 控制/处理芯片的能力一般都比较弱,不能支持高的RAID 等级。全硬的RAID 则全面具备了自己的RAID 控制/处理与I/O 处理芯片,甚至还有阵列缓冲(Array Buffer ),对CPU 的占用率以及整体性能是这三种类型中最优势的,但设备成本也是三种类型中最高的。早期市场上所出现的使用HighPoint HPT 368 、370 以及PROMISE 芯片的IDE RAID 卡与集成它们的主板都是半软半硬的RAID,并不是真正的硬RAID,因为它们没有自己专用的I/O 处理器。而且,这两个公司的RAID控制/处理芯片的能力较弱,不能完成复杂的处理任务,因此还不支持RAID 5 等级。著名的 Adpatec 公司所出品的AAA-UDMA RAID 卡则是全硬RAID 的代表之作,其上有专用的高级RAID Co-Processor 和Intel 960 专用I/O 处理器,完全支持RAID 5 等级,是目前最高级的IDE-RAID 产品。表1 就是典型的软件RAID 与硬RAID 在行业应用中的比较。
RAID-0与RAID1
1.2 RAID-0 等级
RAID0 全称叫做Striped Disk Array without Fault Tolerance( 没有容错设计的条带磁盘阵列)。图中一个圆柱就是一块磁盘(以下均是),它们并联在一起。从图中可以看出,RAID 0 在存储数据时由RAID 控制器(硬件或软件)分割成大小相同的数据条,同时写入阵列中的磁盘。如果发挥一下想象力,你会觉得数据象一条带子横跨过所有的阵列磁盘,每个磁盘上的条带深度则是一样的。至于每个条带的深度则要看所采用的RAID 类型,在NT 系统的软RAID 0 等级中,每个条带深度只有64KB 一种选项,而在硬RAID 0 等级,可以提供8、16、32、64 以及128KB 等多种深度参数。Striped 是RAID 的一种典型方式,在很多RAID 术语解释中,都把Striped 指向RAID 0。在读取时,也是顺序从阵列磁盘中读取后再由RAID 控制器进行组合
图1-1 RAID-0 结构图解再传送给系统,这也是RAID 的一个最重要的特点。
这样,数据就等于并行的写入和读取,从而非常有助于提高存储系统的性能。对于两个硬盘的RAID 0 系统,提高一倍的读写性能可能有些夸张,毕竟要考虑到也同时缯加的数据分割与组合等与RAID 相关的操作处理时间,但比单个硬盘提高50% 的性能是完全可以的。
不过,RAID 0 还不能算是真正的RAID,因为它没有数据冗余能力。由于没有备份或校验恢复设计,在RAID 0 阵列中任何一个硬盘损坏就可导致整个阵列数据的损坏,因为数据都是分布存储的。下面总结下RAID 0的特点:
1.3 RAID-1 等级
图1-3 RAID-1 结构图解 Mirroring and Duplexing (相互镜像)
对比RAID 0 等级,存储工程师能发现硬盘的内容是两两相同的。这就是镜像�D�D两个硬盘的内容完全一样,这等于内容彼此备份。比如阵列中有两个硬盘,在写入时,RAID 控制器并不是将数据分成条带而是将数据同时写入两个硬盘。这样,其中任何一个硬盘的数据出现问题,可以马上从另一个硬盘中进行恢复。注意,这两个硬盘并不是主从关系,也就是说是相互镜像/恢复的。
RAID 1 已经可以算是一种真正的RAID 系统,它提供了强有力的数据容错能力,但这是由一个硬盘的代价所带来的效果,而这个硬盘并不能增加整个阵列的有效容量。下面总结下RAID 1的特点:
RAID-2 与汉明码
1.4 RAID-2 等级
Hamming Code ECC (汉明码错误检测与修正)
现在存储工程师要接触到RAID 系统中最为复杂的等级之一。RAID 2 之所以复杂就是因为它采用了早期的错误检测与修正技术----汉明码(Hamming Code )校验技术。因此在介绍RAID 2 之前有必要讲讲汉明码的原理。
汉明码的原理:
图 1-5 针对4 位数据的汉明码编码示意图
汉明码是一个在原有数据中插入若干校验码来进行错误检查和纠正的编码技术。以典型的4 位数据编码为例,汉明码将加入3 个校验码,从而使实际传输的数据位达到7 个(位),它们的位置如果把上图中的位置横过来就是:
图 1-6 汉明码原理
注:Dx中的x是2的整数幂(下面的幂都是指整数幂)结果,多少幂取决于码位,D1是0次幂,D8是3次幂,想想二进制编码就知道了
现以数据码1101 为例讲讲汉明码的编码原理,此时D8=1、D4=1、D2=0、D1=1,在P1 编码时,先将D8、D4、D1 的二进制码相加,结果为奇数3,汉明码对奇数结果编码为1,偶数结果为0,因此P1 值为1,D8+D2+D1=2 ,为偶数,那么P2 值为0,D4+D2+D1=2 ,为偶数,P3 值为0。这样,参照上文的位置表,汉明码处理的结果就是1010101 。在这个4 位数据码的例子中,存储工程师可以发现每个汉明码都是以三个数据码为基准进行编码的。图示就是它们的对应表(图1-6 ):
从编码形式上,存储工程师可以发现汉明码是一个校验很严谨的编码方式。在这个例子中,通过对4 个数据位的3 个位的3 次组合检测来达到具体码位的校验与修正目的(不过只允许一个位出错,两个出错就无法检查出来了,这从下面的纠错例子中就能体现出来)。在校验时则把每个汉明码与各自对应的数据位值相加,如果结果为偶数(纠错代码为0)就是正确,如果为奇数(纠错代码为1)则说明当前汉明码所对应的三个数据位中有错误,此时再通过其他两个汉明码各自的运算来确定具体是哪个位出了问题。
还是刚才的1101 的例子,正确的编码应该是1010101 ,如果第三个数据位在传输途中因干扰而变成了1,就成了1010111 。检测时,P1+D8+D4+D1 的结果是偶数4,第一位纠错代码为0,正确。P1+D8+D2+D1 的结果是奇数3,第二位纠错代码为1,有错误。P3+D4+D2+D1 的结果是奇数3,第三但纠错代码代码为1,有错误。那么具体是哪个位有错误呢?三个纠错代码从高到低排列为二进制编码110 ,换算成十进制就是6,也就是说第6 位数据错了,而数据第三位在汉明码编码后的位置正好是第6 位。
那么汉明码的数量与数据位的数量之间有何比例呢?上面的例子中数据位是4 位,加上3 位汉明码是7 位,而2 的3 次幂是8。这其中就存在一个规律,即2P≥P+D+1 ,其中P 代表汉明码的个数,D 代表数据位的个数,比如4 位数据,加上1 就是5,而能大于5 的2 的幂数就是3 (23=8,22=4)。这样,存储工程师就能算出任何数据位时所需要的汉明码位数:7 位数据时需要4 位汉明码(24>4+7+1),64 位数据时就需要7 位汉明码(27>64+7+1 ),大家可以依此推算。此时,它们的编码规也与4 位时不一样了。
另外,汉明码加插的位置也是有规律的。以四位数据为例,第一个是汉明码是第一位,第二个是第二位,第三个是第四位,1、2、4 都是2 的整数幂结果,而这个幂次数是从0 开始的整数。这样存储工程师可以推断出来,汉明码的插入位置为1(20)、2(21)、4(22)、8(23)、16(24)、32(25)……
说完汉明码,下面就开始介绍RAID 2 等级。
图 1-7 RAID-2 结构图解
RAID 2 等级介绍:
由于汉明码是位为基础进行校验的,那么在RAID2 中,一个硬盘在一个时间只存取一位的信息。没错,就是这么恐怖。如图中所示,左边的为数据阵列,阵列中的每个硬盘一次只存储一个位的数据。同理,右边的阵列(存储工程师称之为校验阵列)则是存储相应的汉明码,也是一位一个硬盘。所以RAID 2 中的硬盘数量取决于所设定的数据存储宽度。如果是4 位的数据宽度(这由用户决定),那么就需要4 个数据硬盘和3 个汉明码校验硬盘,如果是64 位的位宽呢?从上文介绍的计算方法中,就可以算出来,数据阵列需要64 块硬盘,校验阵列需要7 块硬盘。
在写入时,RAID 2 在写入数据位同时还要计算出它们的汉明码并写入校验阵列,读取时也要对数据即时地进行校验,最后再发向系统。通过上文的介绍,存储工程师知道汉明码只能纠正一个位的错误,所以RAID 2 也只能允许一个硬盘出问题,如果两个或以上的硬盘出问题,RAID 2 的数据就将受到破坏。但由于数据是以位为单位并行传输,所以传输率也相当快。
RAID 2 是早期为了能进行即时的数据校验而研制的一种技术(这在当时的RAID 0、1 等级中是无法做到的),从它的设计上看也是主要为了即时校验以保证数据安全,针对了当时对数据即时安全性非常敏感的领域,如服务器、金融服务等。但由于花费太大(其实,从上面的分析中可以看出如果数据位宽越大,用于校验阵列的相对投资就会越小,就如上面的4:3 与64:7), 成本昂贵,目前已基本不再使用,转而以更高级的即时检验RAID 所代替,如RAID 3、5 等。
图 1-8 RAID 2 特点
RAID-3简介
1.5 RAID-3 等级
Parallel transfer with parity (并行传输及校验)
RAID 2 等级的缺点相信大家已经很明白了,虽然能进行即时的ECC,但成本极为昂贵。为此,一种更为先进的即时ECC 的RAID 等级诞生,这就是RAID 3。
RAID 3 是在RAID 2 基础上发展而来的,主要的变化是用相对简单的异或逻辑运算(XOR, eXclusive OR )校验代替了相对复杂的汉明码校验,从而也大幅降低了成本。XOR 的校验原理如下图1-9:
图 1-9 XOR 的校验原理
这里的A 与B 值就代表了两个位,从中可以发现,A 与B 一样时,XOR 结果为0,A 与B 不一样时,XOR 结果就是1,而且知道XOR 结果和A 与B 中的任何一个数值,就可以反推出另一个数值。比如A 为1,XOR 结果为1,那么B 肯定为0,如果XOR 结果为0,那么B 肯定为1。这就是XOR 编码与校验的基本原理。
RAID 3 的结构图如下:
图 1-10 RAID-3 结构图解
从图中可以发现,校验盘只有一个,而数据与RAID 0 一样是分成条带(Stripe )存入数据阵列中,这个条带的深度的单位为字节而不再是bit 了。在数据存入时,数据阵列中处于同一等级的条带的XOR 校验编码被即时写在校验盘相应的位置,所以彼此不会干扰混乱。读取时,则在调出条带的同时检查校验盘中相应的XOR 编码,进行即时的ECC。由于在读写时与RAID 0 很相似,所以RAID 3 具有很高的数据传输效率。
RAID 3 在RAID 2 基础上成功地进行结构与运算的简化,曾受到广泛的欢迎,并大量应用。直到更为先进高效的RAID 5 出现后,RAID 3 才开始慢慢退出市场。下面让存储工程师总结一下RAID 3 的特点:
注:主轴同步是指阵列中所有硬盘的主轴马达同步
图1-11 RAID 3 的特点
RAID-4简介
1.6 RAID-4 等级
Independent Data disks with shared Parity disk (独立的数据硬盘与共享的校验硬盘)
RAID 3 英文定义是Parallel transfer with parity ,即并行传输及校验。与之相比,RAID 4 则是一种相对独立的形式,这也是它与RAID 3 的最大不同。
图 1-12 RAID-4 图解
与RAID 3 相比,存储工程师发现关键之处是把条带改成了“块”。即RAID 4 是按数据块为单位存储的,那么数据块应该怎么理解呢?简单的话,一个数据块是一个完整的数据集合,比如一个文件就是一个典型的数据块。RAID 4 这样按块存储可以保证块的完整,不受因分条带存储在其他硬盘上而可能产生的不利影响(比如当其他多个硬盘损坏时,数据就完了)。
不过,在不同硬盘上的同级数据块也都通过XOR 进行校验,结果保存在单独的校验盘。所谓同级的概念就是指在每个硬盘中同一柱面同一扇区位置的数据算是同级。在写入时,RAID 就是按这个方法把各硬盘上同级数据的校验统一写入校验盘,等读取时再即时进行校验。因此即使是当前硬盘上的数据块损坏,也可以通过XOR 校验值和其他硬盘上的同级数据进行恢复。由于RAID 4 在写入时要等一个硬盘写完后才能写一下个,并且还要写入校验数据所以写入效率比较差,读取时也是一个硬盘一个硬盘的读,但校验迅速,所以相对速度更快。总之,RAID 并不为速度而设计。下面存储工程师总结一下RAID 4 的特点:
图 1-13 RAID-4 特点4
RAID-5简介
1.7 RAID5 等级
RAID5 和RAID4 相似但避免了RAID4 的瓶颈,方法是不用校验磁盘而将校验数据以循环的方式放在每一个磁盘中,RAID5 的控制比较复杂,尤其是利用硬件对磁盘阵列的控制,因为这种方式的应用比其他的RAID level 要掌握更多的事情,有更多的输出/入需求,既要速度快,又要处理数据,计算校验值,做错误校正等,所以价格较高,其应用最好是OLTP ,至于用于大型文件,不见得有最佳的性能。
RAID5 在不停机及容错的表现都很好,但如有磁盘故障,对性能的影响较大,大容量的快取内存有助于维持性能,但在OLTP 的应用上,因为每一笔数据或记录(record )都很小,对磁盘的存取频繁,故有一定程度的影响。某一磁盘故障时,读取该磁盘的数据需把共用同一校验值分段的所有数据及校验值读出来,再把故障磁盘的数据计算出来;写入时,除了要重覆读取的程序外,还要再做校验值的计算,然后写入更新的数据及校验值;等换上新的磁盘,系统要计算整个磁盘阵列的数据以回复故障磁盘的数据,时间要很长,如系统的工作负载很重的话,有很多输出/入的需求在排队等候时,会把系统的性能拉下来。但如使用硬件磁盘阵列的话,其性能就可以得到大幅度的改进,因为硬件磁盘阵列如Arena 系列本身有内置的CPU 与主机系统并行运作,所有存取磁盘的输出入工作都在磁盘阵列本身完成,不花费主机的时间,配合磁盘阵列的快取内存的使用,可以提高系统的整体性能,而优越的SCSI 控制更能增加数据的传输速率,即使在磁盘故障的情况下,主机系统的性能也不会有明显的降低。RAID5 要做的事情太多,所以价格较贵,不适于小系统,但如果是大系统使用大的磁盘阵列的话,RAID5 却是最便宜的方案。这一点后续章节将详尽介绍。
|
0人
|
了这篇文章 |
类别: 存储┆阅读(
0)┆评论(
0) ┆ 返回博主首页┆ 返回博客首页
上一篇 软Raid教程一:Windows下创建软Raid 下一篇 RAID卡