应用系统一般要求存储系统具有良好的IO性能,同时也要求做好数据的安全保护,这里我们重点讨论raid10和raid5两种阵列方式。
关于这方面的讨论,网上也有了不少的资料,我这里一方面是做了一些整理,另一方面,在看别的帖子的时候,有些想法不敢苟同,所以就自己整理了一篇,所参考的资料在文后都有列述。对于其他RAID级别,由于比较简单,不再叙述。

就以这一篇文章作为blog存储系列专题的第一篇吧。主要内容包括三点:RAID5基本原理;RAID10基本原理;RAID10与RAID5差异比较。


一、RAID5基本原理
1、认识RAID5
RAID5 是一种存储性能、数据安全和存储成本兼顾的存储解决方案,它使用的是Disk Striping(硬盘分割)技术,RAID5不是利用镜像而是利用分散奇偶校验冗余数据。RAID5可以理解为是RAID0和RAID1的折衷方 案,RAID5可以为系统提供数据安全保障,但保障程度要比RAID1低,而磁盘空间利用率要比RAID1高。


一般都需要增加 RAID卡实现对RAID5的支持,保护数据存储安全。支持RAID5的RAID卡一般是使用SCSI RAID卡,它是用来实现RAID功能的板卡,通常是由I/O处理器、SCSI控制器、SCSI连接器、缓存、蜂鸣器等一系列零组件构成的。RAID卡可 以让很多磁盘驱动器同时传输数据,而这些磁盘驱动器在逻辑上又是一个磁盘驱动器,所以使用RAID可以达到单个的磁盘驱动器几倍、几十倍甚至上百倍的速 率,这也是RAID卡最初想要解决的问题;另外,RAID卡也可以提供容错功能。因此RAID卡不仅仅是提供数据存储安全保障,还能扩展硬盘的挂载数量, 所以,在企业购买阵列卡之后也会增加一些硬盘,来满足数据存储的需要,这里我们仅以四个硬盘组成的RAID5为例来说明。

2、RAID5的写(Write)操作
RAID5数据存储方式为:

盘1 盘2 盘3 盘4
................................
p4 9 10 11
6 p3 7 8
3 4 p2 5
0 1 2 p1

其 中:P4为数据9、10、11的奇偶校验信息,其它以此类推;P3为数据6、7、8的奇偶校验信息;P2为数据3、4、5的奇偶校验信息;P1为数据0、 1、2的奇偶校验信息。四个硬盘组成的RAID5采用数据分块并行传送的方法,它在数据分块之后计算它们的奇偶校验和。可以看出,RAID5不对存储的数 据进行备份,而是把数据和相对应的奇偶校验信息分别存储在组成RAID5的不同磁盘上。

RAID5具有和RAID0相近似的数据读取速度, 只是多了一个奇偶校验信息,写入数据的速度比对单个磁盘进行写入操作稍慢。同时由于多个数据对应一个奇偶校验信息,RAID5的磁盘空间利用率要比 RAID1高,存储成本相对较低。RAID5是采用奇偶校验的方法维护数据,这些奇偶校验的信息只占用一块磁盘的容量,所以RAID5的实际容量相当于阵 列中的磁盘数n-1,数据读写速度等于单盘的速度*盘数,RAID5具有较好的综合性能,因此是目前服务器使用最多的阵列选择之一。

3、RAID 5的数据损坏(Crash)与恢复(Recover)操作
当 组成RAID5的磁盘1数据发生损坏后,磁盘中的数据0、数据3、数据6以及奇偶校验信息P4将全部丢失。RAID5的数据恢复有二种方 式:Recover S/W和Recover H/W。Recover S/W主要是指用软件(如操作系统或第三方软件)做的RAID5的数据恢复,由于是操作系统下实现RAID,软RAID不能保护系统盘。软件RAID很多 情况下已经包含在系统之中,并成为其中一个功能,如 Windows、Netware及Linux。软件RAID中的所有操作皆由中央处理器负责,所以系统资源的利用率会很高,从而使系统性能降低。软件 RAID是不需要另外添加任何硬件设备,因为它是靠服务器的系统,主要是中央处理器的功能,提供所有现成的资源。


如果磁盘1坏了,系统将受到影响;必须进行更换新的硬盘,利用剩下的数据和相应的奇偶校验信息去恢复被损坏的数据,将数据数据0、数据3、数据6和奇偶校验信息P4写到新硬盘(磁盘1)中后,系统才能正常操作运行。

Recover H/W主要是指用硬件做热备份的RAID5的数据恢复,如果磁盘1坏了,系统一般不会受到影响;当我们更换新的硬盘,利用剩下的数据和相应的奇偶校验信息 去恢复被损坏的数据,将数据0、数据3、数据6和奇偶校验信息P4写到新硬盘(磁盘1)中,在整个数据恢复过程中,系统仍能正常操作运行。因此,有条件的 话,在做RAID5的时候最好做真正的硬件磁盘阵列。

二、RAID10基本原理

1、认识RAID10
Raid10是 一个Raid0与Raid1的组合体,它继承了Raid0的快速和Raid1的安全。我们知道,RAID1就是一个冗余的备份阵列,而RAID0则负责数 据的读写阵列。由于利用了RAID0的高读写效率和RAID1的高数据保护、恢复能力,使RAID10成为了一种性价比较高的等级,目前几乎所有的 RAID控制卡都支持这一等级。但是,RAID10对存储容量的利用率和RAID1一样低,只有50%。因此,RAID10可以达到既高效又安全的目的, 但是这种结构的可扩充性不好,使用此方案比较昂贵。

2、RAID10的写(Write)操作
Raid10其实结构非常简单,首先创 建2个独立的Raid1,然后将这两个独立的Raid1组成一个Raid0,当往这个逻辑Raid中写数据时,数据被有序的写入两个Raid1中。磁盘1 和磁盘2组成一个Raid1,磁盘3和磁盘4又组成另外一个Raid1;这两个Raid1组成了一个新的Raid0。

3、RAID10的数据损坏(Crash)与恢复(Recover)操作
虽然Raid10方案造成了50%的磁盘浪费,但是它提供了200%的速度和单磁盘损坏的数据安全性,并且当同时损坏的磁盘不在同一Raid1中,就能保证数据安全性。上如果只有一块磁盘损坏了,整个逻辑磁盘仍能正常工作的。
总 的来说,RAID10以RAID0为条带阵列,以RAID1为数据保护阵列,它具有与RAID1一样的容错能力,用于容错处理的系统开销与单独的镜像操作 基本一样,由于使用RAID0作为执行等级,因此具有较高的I/O宽带;对于那些想在RAID1基础上大幅提高性能的用户,它是一个完美的解决方案。 RAID10适用于数据库存储服务器等需要高性能、高容错但对容量要求不大的场合。

三、RAID10与RAID5差异比较
3.1 IO性能:读操作相当,写性能上RAID5不及RAID10
先介绍一下标准的RAID写操作,包括如:RAID5中所必需的校验计算,需包括以下几个步骤:
(1)从校验盘中读取数据;(2)从目标数据盘中读取数据;(3)以旧校验数据,新数据及已存在数据,生成新的校验数据;
(4)将新校验数据写入校验盘;(5)将新数据写入目标数据盘。

读 操作上RAID10与RAID5是相当的,对于RAID5,在一些很小数据的写操作(如比每个条带还小的小数据,需要2个读、2个写,还有2个XOR操 作。对于单个用户的写操作,在新数据应用之前必须将老的数据从校验盘中移除,整个的执行过程是这样:读出旧数据,存储的旧数据与写入的新数据做XOR,并 创建一个即时值,读出旧的校验信息,写下新的校验信息。为了减少对系统的影响,大多数的RAID5都读出并将整个条带(包括校验条带)写入缓存,执行2个 XOR 操作,然后发出并行写操作(通常对整个条带),即便了进行了上述优化,系统仍然需要为这种写操作进行额外的读和XOR操作。当然,也可以将存储系统的条带 大小定义为经常读写动作的数据大小,使之匹配,但这样会限制系统的灵活性,也不适用于企业中其它的应用。
对于raid10,由于不存在数据校验,每次写操作只是单纯的执行写操作。所以,在写性能上raid10要好于raid5。
注意:小量写操作困难使得RAID5技术很少应用于密集写操作的场合,如回滚字段及重做日志。不推荐将Oracle数据库的日志文件和控制文件放在RAID5的磁盘上!否则,容易出现大量的磁盘IO等待事件。

3.2 数据重构性:RAID5不及RAID10
对于raid10,当一块磁盘失效时,进行数据重构的操作只是复制一个新磁盘,如果假定磁盘的容量为250G,那么复制的数据量为250G(注意:这里需要区分RAID10和RAID01,在blog中另有一篇很早的文章介绍)。
对 于raid5的存储阵列,则需要从每块磁盘中读取数据,经过重新计算得到一块硬盘的数据量,如果raid5是以4+1的方式组建,每块磁盘的容量也为 250G,那么,需要在剩余的4个磁盘中读出总共是1000G的数据量计算得出250G的数据。从这点来看,raid5在数据重构上的工作负荷和花费的时 间应该远大于raid10,负荷变大将影响重构期间的性能,时间长意味再次出现数据损坏的可能性变大。
raid10和raid5系统在出现一块磁 盘失效后,进行数据重构时,raid5需耗费的时间要比raid10长,同时重构期间系统负荷上raid5要比raid10要高,同时raid5出现数据 丢失的可能性要比raid10高。因此,数据重构期间,raid5系统的可靠性远比raid10来的低。

3.3 数据安全保护:RAID10优于RAID5
RAID10 系统在已有一块磁盘失效的情况下,只有出现该失效盘的对应镜像盘也失效,才会导致数据丢失,其他的磁盘失效不会出现数据丢失情况。也就是说RAID10允 许系统掉一块盘,还可以有50%的几率可以容许坏2块盘。而Raid5系统,在已有一块磁盘失效的情况下,只要再出现任意的一块磁盘失效,都将导致数据丢 失。

Raid5在磁盘空间利用率上比Raid10高,raid5的空间利用率是(N-1)/ N (N为阵列的磁盘数目),而raid10的磁盘空间利用率仅为50%。但是结合磁盘来考虑,今天的硬盘厂商所生产的ATA硬盘的质量已经可以承担企业级的 应用,并且,容量的增加幅度相当大,目前已经可以实现单个磁盘400G的存储容量。SCSI硬盘由于要求高转速而使用小直径盘片,容量的增加相对缓 慢;ATA磁盘相对SCSI磁盘拥有成本也要小很多。因此,在一些IO要求非常高的应用中,raid5结合SCSI磁盘是比较好的选择,其他应用中采用大 容量的ATA硬盘结合raid10,既降低了raid10的为获得一定的存储空间必须采用双倍磁盘空间的拥有成本,又避免了raid5相对raid10的 其他缺点。在企业应用中,raid10结合ATA磁盘意味着一个更好的选择。


另外,piner在他的一篇文章中分析了RAID5与RAID10在写上面的差异(针对4块盘),他认为:
写 分为连续写和离散写。连续写的过程,一般表示写入连续的大批量的数据,如媒体数据流,很大的文件等等,这个写操作过程,如果有写cache存在,并且算法 没有问题的话,raid5比raid10甚至会更好一些(这里要假定存储有一定大小足够的写cache,而且计算校验的cpu不会出现瓶颈)。因为这个时 候的校验是在cache中完成,如4块盘的raid5,可以先在内存中计算好校验,同时写入3个数据+1个校验。而raid10只能同时写入2个数据+2 个镜相。写cache是可以缓存写操作的,等到一定时期再写到磁盘,但是,写操作不比读操作,这个写是迟早也要发生的,也就是说,最后落到磁盘上的写还是 避免不了的,不过,如果不是连续性的强连续写,只要不达到磁盘的写极限,差别都不是太大。离散写可能是最难理解,但是,也是最重要的部分,数据库,如 oracle 数据库大部分操作就是离散写,如每次写一个数据块的数据,如8K;联机日志虽然看起来是连续写,但是因为每次写的量不多,不保证能添满raid5的一个条 带(保证每张盘都能写入),所以很多时候也是离散写入。假定要把一个数字2变成数字4,那么对于raid5,实际发生了4次io,先读出2与校验6,可能 发生读命中;然后在cache中计算新的校验,写入新的数字4与新的校验8。对于raid10,我们可以看到,同样的单个操作,最终raid10只需要2 个io,而raid5需要4个io。但是,这里我忽略了raid5在那两个读操作的时候,还可能会发生读命中操作,也就是说,如果需要读取的数据已经在 cache中,可能是不需要4个io的,也证明了cache对raid5 的重要性,不仅仅是计算校验需要,而且对性能的提升由为重要。曾经测试过,在raid5的阵列中,如果关闭写cache,raid5的性能将差很多倍。
最后,piner给出了一个结论:raid10对cache的依赖性没有raid5那么明显;小io的数据库类型操作,建议采用raid10,而大型文件存储,数据仓库,则从空间利用的角度,可以采用raid5。这一篇文章也很精彩,值得学习:http://www.ixdba.com/html/ydate/2007/04/16/。

 

参考:
http://www.stcore.com/storage/2006-09-16/1158380211d102481_1.html
http://www.51doing.com/read.php?391
http://www.ixdba.com/html/y2007/m04/69-raid5-raid10.html

本文出处: http://sdusun.itpub.net/post/7915/286043