RAID全称为独立磁盘冗余阵列(Redundant Array of Independent Disks),基本思想就是把多个相对便宜的硬盘组合起来,成为一个硬盘阵列组,使性能达到甚至超过一个价格昂贵、容量巨大的硬盘。RAID通常被用在服务器电脑上,使用完全相同的硬盘组成一个逻辑扇区,因此操作系统只会把它当做一个硬盘。 RAID分为不同的等级,各个不同的等级均在数据可靠性及读写性能上做了不同的权衡。在实际应用中,可以依据自己的实际需求选择不同的RAID方案。
批注:RAID的目的是将多个硬盘组合起来,构成一个逻辑上的大硬盘,操作系统会把这个组合识别成一个硬盘来使用。
批注:学习研究RAID要关注以下几点,条带化存储,校验码(汉明码校验,奇偶校验),校验码存储,镜像冗余。
RAID可以分为三大类,标准RAID,混合RAID,非标准RAID。
RAID0称为条带化(Striping)存储,将数据分段存储于各个磁盘中,读写均可以并行处理。因此其读写速率为单个磁盘的N倍(N为组成RAID0的磁盘个数),但是却没有数据冗余,单个磁盘的损坏会导致数据的不可修复。
大多数striping的实现允许管理者通过调节两个关键的参数来定义数据分段及写入磁盘的方式,这两个参数对RAID0的性能有很重要的影响。
STRIPEWIDTH
stripe width是指可被并行写入的 stripe 的个数,即等于磁盘阵列中磁盘的个数。
STRIPESIZE
也可称为block size(chunk size,stripe length,granularity),指写入每个磁 盘的数据块大小。以块分段的RAID通常可允许选择的块大小从2KB 到 512KB不等,也有更 高的,但一定要是2的指数倍。以字节分段的(比如RAID3)一般的stripe size为1字节或者512字节,并且用户不能调整。 stripesize对性能的影响是很难简单估量的,最好在实际应用中依自己需求多多调整并观察其影响。通常来说,减少stripesize,文件会被分成更小的块,传输数据会更快,但是却需要更多的磁盘来保存,增加positioningperformance,反之则相反。应该说,没有一个理论上的最优的值。很多时候,也要考虑磁盘控制器的策略,比如有的磁盘控制器会等 等到一定数据量才开始往磁盘写入。
批注:数据会被条带化,分布到阵列中的各个磁盘上,数据没有冗余,数据没有校验,一个磁盘崩,整个阵列崩。
镜像存储(mirroring),没有数据校验。数据被同等地写入两个或多个磁盘中,可想而知,写入速度会比较 慢,但读取速度会比较快。读取速度可以接近所有磁盘吞吐量的总和,写入速度受限于最慢 的磁盘。 RAID1也是磁盘利用率最低的一个。如果用两个不同大小的磁盘建立RAID1,可以用空间较小 的那一个,较大的磁盘多出来的部分可以作他用,不会浪费。
批注:RAID1 会把同一份数据写入至少两个磁盘,写入慢(要写多个磁盘),读取快(任何一个磁盘都可读取完整数据),数据没有校验,磁盘利用率低,数据安全性有所提高。各个磁盘的使用空间以最小的那个为准。
RAID0的改良版,加入了汉明码(Hanmming Code)错误校验。
汉明码能够检测最多两个同时发生的比特错误,并且能够更正单一比特的错误。汉明码的位数与数据的位数有一个不等式关系,即:
1 | 2^P ≥ P + D +1 |
---|---|
P代表汉明码的个数,D代表数据位的个数,比如4位数据需要3位汉明码,7位数据需要4位汉明码,64位数据时就需要7位汉明码。RAID2是按1bit来分割数据写入的,而P:D就代表了数据盘与校验盘的个数。所以如果数据位宽越大,用于校验的盘的比例就越小。由于汉明码能够 纠正单一比特的错误,所以当单个磁盘损坏时,汉明码便能够纠正数据。
RAID 2因为每次读写都需要全组磁盘联动,所以为了最大化其性能,最好保证每块磁盘主 轴同步,使同一时刻每块磁盘磁头所处的扇区逻辑编号都一致,并存并取,达到最佳性能。如果不能同步,则会产生等待,影响速度。
与RAID0相比,RAID2的传输率更好。因为RAID0一般stripe size相对于RAID2的1bit来说实在太大,并不能保证每次都是多磁盘并行。而RAID2每次IO都能保证是多磁盘并行,为了发挥这个优势,磁盘的寻道时间一定要减少(寻道时间比数据传输时间要大几个数量级),所 以RAID2适合于连续IO,大块IO(比如视频流服务)的情况。
批注:数据会被条带化,分布到阵列的各个磁盘上,数据没有备份,数据有汉明码校验,数据以字节为单位。
类似于RAID2,数据条带化(stripe)存储于不同的硬盘,数据以字节为单位,只是RAID3使用单块磁盘存储简单的 奇偶校验信息,所以最终磁盘数量为 N+1。当这N+1个硬盘中的其中一个硬盘出现故障时, 从其它N个硬盘中的数据也可以恢复原始数据,当更换一个新硬盘后,系统可以重新恢复完整 的校验容错信息。
由于在一个硬盘阵列中,多于一个硬盘同时出现故障率的几率很小,所以一般情况下,使用RAID3,安全性是可以得到保障的。RAID 3会把数据的写入操作分散到多个磁盘上进行,不管是向哪一个数据盘写入数据,都需要同时重写校验盘中的相关信息。因此,对于那些经常需要执行大量写入操作的应用来说,校验盘的负载将会很大,无法满足程序的运行速度,从而导致整个RAID系统性能的下降。 鉴于这种原因,RAID3更加适合应用于那些写入操作较少,读取操作较多的应用环境,例如 数据库和WEB服务器等。
批注:数据会被条带化,分配到阵列的各个磁盘上,数据没有备份,数据有奇偶校验,数据以字节为单位,奇偶校验存放在一个单独的磁盘上。
与RAID3类似,但RAID4是按块(扇区)存取。无须像RAID3那样,哪怕每一次小I/O操作也要涉及全组,只需涉及组中两块硬盘(一块数据盘,一块校验盘)即可,从而提高了小量数据 I/O速度。
批注:数据会被条带化,分配到阵列的各个磁盘上,数据没有备份,数据有奇偶校验,数据以块(扇区)存取为单位,奇偶校验存放在一个单独的磁盘上。
奇偶校验(XOR),数据以块分段条带化存储。校验信息交叉地存储在所有的数据盘上。
RAID5把数据和相对应的奇偶校验信息存储到组成RAID5的各个磁盘上,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上,其中任意N-1块磁盘上都存储完整的数据,也就是 说有相当于一块磁盘容量的空间用于存储奇偶校验信息。因此当RAID5的一个磁盘发生损坏 后,不会影响数据的完整性,从而保证了数据安全。当损坏的磁盘被替换后,RAID还会自动利用剩下奇偶校验信息去重建此磁盘上的数据,来保持RAID5的高可靠性。
RAID5可以理解为是RAID 0和RAID 1的折衷方案。RAID 5可以为系统提供数据安全保障,但 保障程度要比镜像低而磁盘空间利用率要比镜像高。RAID5具有和RAID 0相近似的数据读取 速度,只是因为多了一个奇偶校验信息,写入数据的速度相对单独写入一块硬盘的速度略慢。
批注:RAID 5可以理解为是RAID 0(数据没有备份,没有校验)和RAID 1(数据至少写入两个磁盘,没有校验)的折中方案。RAID 5可以为系统提供数据安全保障。RAID 5的奇偶校验分布在阵列的各个磁盘上,省去了一个单独磁盘的浪费,条带化。
类似RAID5,但是增加了第二个独立的奇偶校验信息块,两个独立的奇偶系统使用不同的算法,数据的可靠性非常高,即使两块磁盘同时失效也不会影响数据的使用。但RAID 6需要分配给 奇偶校验信息更大的磁盘空间,相对于RAID5有更大的“写损失”,因此“写性能”非常差。
由图所知,每个硬盘上除了都有同级数据XOR校验区外,还有一个针对每个数据块的XOR校验区。当然,当前盘数据块的校验数据不可能存在当前盘而是交错存储的。从数 学角度来说,RAID 5使用一个方程式解出一个未知变量,而RAID6则能通过两个独立的线性 方程构成方程组,从而恢复两个未知数据。
伴随着硬盘容量的增长,RAID6已经变得越来越重要。TB级别的硬盘上更容易造成数据丢失,数据重建过程(比如RAID5,只允许一块硬盘损坏)也越来越长,甚至到数周,这是完全不可接受的。而RAID6允许两 块硬盘同时发生故障,所以渐渐受到人们的青睐。
伴随CD,DVD和蓝光光盘的问世,存储介质出现了擦除码技术,即使媒介表面出现划痕,仍然可以播放,大多数常见的擦除码算法已经演变为上世纪60年代麻省理工学院林肯实验室开发的Reed-Solomon码。实际情况中,多数RAID6实现都采用了标准的RAID5教校验比特和Reed-Solomon码 。而纯擦除码算法的使用使得RAID6阵列可以失效两块以上的硬盘,保护力度更强,有些实现方法提供了多种级别的保护,甚至允许用户(或存储管理员)指定保护级别。
批注:RAID 6使用两个独立的奇偶校验信息块。更安全。允许两个硬盘同时发生故障。
顾名思义,是RAID0和RAID1的结合。先做条带(0),再做镜像(1)。
同上,但是先做镜像(1),再做条带(0)
RAID01和RAID10非常相似,二者在读写性能上没有什么差别。但是在安全性上RAID10要好于RAID01。如图中所示,假设DISK0损坏,在RAID10中,在剩下的3块盘中,只有当DISK1故障,整个RAID才会失效。但在RAID01中,DISK0损坏后,左边的条带将无法读取,在剩下的3快盘中,只要DISK2或DISK3两个盘中任何一个损坏,都会导致RAID失效。
RAID10和RAID5也是经常用来比较的两种方案,二者都在生产实践中得到了广泛的应用。RAID10安全性更高,但是空间利用率低。至于读写性能,与cache有很大关联,最好根据实 际情况测试比较选择。
批注:从RAID 01和RAID 10可以看出,磁盘的条带化存储,和镜像存储非常重要。
DRFS,即DistributedRaidFileSystem,是一种尝试将RAID与Hadoop的DFS结合起来的技术。 通常的HDFS在实践中需要将replication factor设为3以保证数据完整性,而如果利用 RAID的stripe和partity(奇偶校验)技术,将数据分为多个块,并且存储各个块的校验信息(XOR或擦除码)。有了这些措施,块的副本数就可以降低并且保证同样的数据可靠性,就能节省相当一部 分的存储空间。
DRFS包含以下几个组件:
现在很都操作系统都提供了RAID的软件实现,主要由以下几个方面:
软件实现并总是与系统的启动进程兼容,硬件实现(RAID控制器)总是太贵并且都是厂商专有的技术,所以有了一中混合的实现:系统启动时,由固件(firmware)来实现RAID,系统启动的差不多了,由驱动来管 理RAID。当然,这需要操作系统对这种驱动提供支持。