[关闭]
@JCChan 2015-07-28T12:12:47.000000Z 字数 3341 阅读 2964

七种RAID技术详解

大话存储


一、基础知识

  1. 磁盘相同偏移处横向逻辑分割,形成Stripee,一个Stripee横跨过的扇区或块的个数或字节容量,就是条带长度。
  2. 一个Stripee所占用的单块磁盘上的区域,称为一个Segment,一个Segment中所包含的data Block或者扇区的个数或者字节容量,称为Stripee Depth
  3. Data Block可以是N倍个扇区大小的容量,由控制器决定可不可以调整。
  4. 读/写IO,大小块IO,连续/随机IO,顺序/并发IO,持续/间断IO,实/虚IO
  5. IO并发几率:单盘,IO并发几率为0,因为一块磁盘同时只可以进行一次IO,对于RAID0,在2块盘的情况下,条带深度比较大的时候(条带太小不能并发IO),并发两个IO的几率为1/2
  6. IOPS:完成一次IO所用的时间=寻道时间+旋转延迟时间+数据传输时间,IOPS=IO并发系数/(寻道时间+旋转延迟时间+数据传输时间)
  7. 每秒IO吞吐量=IOPS×平均IO SIZE,IOPS越大,每秒IO的吞吐量就越高

二、RAID 0 技术分析

  1. 从外面看,参与形成RAID 0的各个物理盘会组成一个逻辑上连续、物理上也连续的虚拟磁盘。一级磁盘控制器对这个虚拟磁盘发出的指令,都被RAID控制器收到并分析处理,根据Block映射关系算法公式转换成对组成RAID 0的各个物理盘的真实物理磁盘IO请求指令,收集或写入数据后,再提交给主机磁盘控制器。
  2. RAID 0非条带化模式:写满一块物理磁盘后再接着写另一块,直至所有组成的磁盘全部写满,对于IO写没有任何优化,对于IO读能提高一定的并发IO读几率。
  3. 读取过程:如果某次读取数据都落在同一个Segment的话,IO只在一块物理盘中读取,性能没有优化,反而增加了RAID控制器的额外计算开销,因此若要提升性能,就要让一个IO尽量扩散到多块物理盘上,减小条带深度,在磁盘数量不变的条件下,尽量减小条带的大小,让这个IO的数据被控制器分割,同时放满多个Segment。记住:不要以为控制器总是先放满第一个Segment,再放满第二个Segment
  4. RAID 0要提升性能,条带做的越小越好,但是另外一个矛盾是如果条带太小的话并发IO的几率就会降低,因为如果条带太小,每次IO会占用大部分物理盘,队列中的IO就只能等待这次IO结束后才能使用物理盘,而条带太大的话不能充分提高速度。

三、RAID 1 技术分析

  1. RAID 1 对虚拟逻辑盘上的每个物理Block,都在物理盘上有一个镜像备份,对于RAID 1的写IO,速度反而下降,取决于最慢的那个。对于读IO请求,不但可以并发,而且即使在顺序IO也可以像RAID 0一样从两块盘上同时读取数据,RAID 1 没有Stripe的概念。
  2. 在读、并发IO的模式下,由于可以并发N个IO,每个IO占用一个物理盘,这就相当于提升了N倍的IOPS。由于每个IO只独占了一个物理盘,所以数据传输速度相对于单盘没有提升。
  3. 在读、顺序IO、随机IO的模式下,因为IO不能并发,此时一个IO可以同时读取N个盘的内容,但寻道时间影响非常大。
  4. 在读、顺序IO、连续IO时,寻道影响最低,但是有传输速率为主要矛盾,多块盘传输,时间减少为1/N,性能提升了N倍。
  5. 在写IO时,若想做到并发IO,则可以从IO队列中提取连续的多个IO,将IO合并,并发写入磁盘,前提是几个IO必须是事务性的,也就是说LBA必须连续,不然不能作为一个大的合并IO。而且和文件系统也有关系,文件系统碎片越少,并发几率会越高。

四、RAID 2 技术分析

  1. RAID 2 的基本思想是在IO到来以后,控制器将数据按照位分散开,顺序在每块磁盘中存取1b,上层IO经过文件系统,才通过磁盘控制器驱动来向磁盘发出IO,最终是N倍的扇区。
  2. RAID 2 控制器接受到IO数据后,在Cache中计算需要写入的物理磁盘的信息,将数据分割为比特,一次性那个写入物理扇区,以等位的方式写入。扇区没用完的部分先空着,在第二次IO到来后,控制器需要读出原来的数据,与新数据合并后一并再写入这个扇区,使得效率大打折扣,因为是以位为单位,分割存放到不连续的多块物理盘上,任何条件下都迫使全磁盘组并行读写,提高性能。
  3. RAID 2 的每次读写都需要全组磁盘联动,所以为了最大化其性能,最好保证每块磁盘主轴同步,使同一时刻每块磁盘磁头所处的扇区逻辑编号一致,并存并取,达到最佳性能。适用于视频流服务。
  4. 对于磁盘控制器的IO一般都是事务性的,所以IO中的扇区对于上层文件系统来说是一个完整的事务,很少会发生只针对这个事务中某个点进行读写的情况。
  5. RAID 2不能并发IO
  6. 需要的汉明码的位数与数据位的数量之间的关系为2^p>=p+D+1,D为数据位数,P为汉明码数

五、RAID 3 技术分析

  1. RAID 3 改进了RAID 2 致命的缺点——以比特为单位,RAID 3 以扇区或者几个扇区为单位来分散数据,同时以高效的XOR校验算法判断数据是否有误,但是不能判断出哪一位出现错误,更不能修正错误,但是这使得校验盘只需要一块足矣。
  2. RAID 3 的每一个条带,长度可以被设计为一个文件系统块的大小,深度随磁盘数量而决定。
  3. 控制器接受到IO后,会以扇区为单位对数据进行等距离分割,然后同时写入Segment中,除开校验盘的开销外并没有多少的延迟,但是当数据大小小于条带长度时,由于需要更新校验块,就出现了写惩罚,也就是先要读出所有数据,再写入所有更新数据。
  4. RAID 3 不能并发IO,但是可以通过设计形成RAID 30系统,做到并发。
  5. RAID 3 最怕遇到随机IO,必须牵动所有盘来服务,频繁的寻道导致还不如单块磁盘读取。但是对于连续IO,RAID 3 的多盘并发读写,做到相当于单盘的N倍速率

六、RAID 4 技术分析

  1. RAID 4 专门针对的是类似数据库读取这种随机IO而设计的,因为RAID 2 和RAID 3 都是针对大块IO来设计,提高了传输速率,对于随机IO的IOPS还是很小。
  2. 当IO SIZE小于Stripe SIZE的时候,会有磁盘处于空闲状态,但是因为校验盘被占领了,这些盘就没有用途了,在RAID 4 中,如果利用上层文件系统控制,使得磁盘写入尽可能使用磁盘相同条带的块,就可能做到了类似并发IO,使得几率增大,从而减小了校验盘的写入次数。
  3. 总结:通过上层文件系统的调整写入,人为使得并发IO的几率增大,本质还是使用RAID 3 的模式。

七 RAID 5 技术分析

  1. 整条写:需要修改奇偶校验群组中的所有的条带单元,新的XOR校验值可以根据所有新的条带数据计算得到,不需要额外的读写操作,所有控制器可以直接利用这些更新的数据计算出校验数据之后,在数据被写入数据盘的同时,将计算好的校验信息写入校验盘。
  2. 重构写:当要写入的磁盘数目超过阵列磁盘数目的一半时,不需要修改的Segment中读取原来的数据,再和本条带中所有需要修改的Segment上的新数据一起计算XOR校验值。再将新的Segment数据和没有更改的Segment数据以及新的XOR校验值一并写入。
  3. 读改写:当要写入的磁盘数目少于阵列磁盘数目的一半时,先从需要修改的Segment中读取原来的数据,再读取旧的奇偶校验值,根据旧数据、旧校验值和需要修改的Segment上的新数据计算出这个条带上新的校验值,最后写入新的数据和新的奇偶校验值。公式为:新数据的校验数据=(老数据EOR新数据)EOR老校验数据
  4. 写效率排列:整条写>重构写>读改写
  5. 为了保证并发IO,RAID 5 同样将条带大小做的较大,保证每次IO数据不会占满整个条带,造成队列中其他IO的等待,但是要保证高效率的并发,否则就跟读改写模式一样。
  6. RAID 5 面对频发的随机写IO,IOPS下降的趋势比其他RAID类型要平缓一些。
  7. RAID 5 相对于经过特别优化的RAID 4 来说,在底层实现了并发,脱离文件系统。
  8. RAID 5E 使用了一个热备盘,当其中一个盘出现问题时立马顶上去,RAID 5EE则是把热备盘也进行了分布式,达到了更好的危险保障效果。

八、RAID 6 技术分析

  1. RAID 6相比RAID 5最大的不同是增加了一块校验盘,在同时坏了两块盘的时候也能保证数据不会发生丢失,可以通过保存两份数学上不相关的校验数据,不过由于是同时操作,不会比RAID 5慢多少,其他特性与RAID 5类似。
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注