背景介绍
在单机时代,采用单块硬盘进行数据存储和读写的方式寻址和读写的时间消耗大,IO性能低,存储容量小,而且单块硬盘若是出现无法修复的物理故障,就会导致数据丢失。随着存储技术的发展,使用多块硬盘组成存储阵列的RAID(redundant array of indeprndent disk)技术应运而生,它是使用多个独立硬盘组成的大型硬盘系统,通过组建立不同的RAID阵列,可以实现比单块硬盘更好的存储性能或是数据恢复能力。
1. RAID 0
RAID 0技术比较简单,即把几块硬盘从相同偏移量位置按block(块)或sector(扇区)组织在一起,形成一个stripe(条带),如图1所示:
图1.RAID 0示意图
图1是一个由4块硬盘(extent0-extent4)组成的RAID 0示意图,当遇到大块数据写入时,数据常以条带为单位写入,最佳情况是RAID控制器将数据被分为4部分写入4块硬盘中,此时写入速度为单块硬盘的4倍。
RAID 0阵列的存储和IO效率与条带深度和存取文件大小有很大关系,若条带深度相对于存取文件大小过大,单个段就可以完成文件存储,那么RAID阵列就会退化为单硬盘IO,存储性能和单硬盘模式一样甚至低于单硬盘,而条带深度过小,虽然存储性能大幅提升,但IO的开销就会很大,极大影响IO效率,所以RAID 0在设置时需要在条带深度和IO大小之间做平衡,才能最大程度发挥阵列的效率。综上所述,RAID 0阵列相对于单硬盘性能对比如表1所示:
表1 RAID 0阵列系统相较于单盘的IO对比
RAID 0 IOPS | 读 | 写 | ||||||
并发IO | 顺序IO | 并发IO | 顺序IO | |||||
随机IO | 连续IO | 随机IO | 连续IO | 随机IO | 连续IO | 随机IO | 连续IO | |
IO SIZE/Stripe SIZE较大 | 不支持 | 不支持 | 提升很小 | 提升N*系数倍 | 不支持 | 不支持 | 提升很小 | 提升N*系数倍 |
IO SIZE/Stripe SIZE较小 | 提升(1+并发系数)倍 | 提升(1+并发系数+系数)倍 | 提升很小 | 提升系数倍 | 提升(1+并发系数)倍 | 提升(1+并发系数+系数)倍 | 提升很小 | 提升系数倍 |
此外,由于RAID 0阵列未设置数据校验或恢复区,一旦阵列中任一块硬盘损坏,阵列中所有数据将会丢失。
2. RAID 1
由于RAID 0没有任何数据保护措施,在RAID 0的基础上对每个虚拟逻辑盘的Block都做一份物理备份在其他盘上,也就是在写数据时同时向备份盘写一份数据,以实现数据保护的效果,如图2所示:
图2.RAID 1示意图
与RAID 0不同,RAID 1对虚拟逻辑盘上的每个物理Block,都在物理盘上有一个备份,因此RAID 1的写IO速度相较于RAID 0有所下降,因为数据需要写两份,且速度以最慢的物理盘为准,由此RAID 1系统相较于单盘的IO对比如表2所示(其中N为组成镜像物理盘的数目):
表2. RAID 1系统相较于单盘的IO对比
RAID 1 IOPS | 读 | 写 | ||||||
并发IO | 顺序IO | 并发IO | 顺序IO | |||||
随机IO | 连续IO | 随机IO | 连续IO | 随机IO | 连续IO | 随机IO | 连续IO | |
提升N倍或并发系数倍 | 提升N倍或并发系数倍 | 提升很小 | 提升N倍 | 不支持 | 事务型IO可并发,提升并发系数倍 | 没有提升 | 没有提升 |
在读、并发IO模式下,由于可以并发N个IO,每个IO占用一个物理盘,相当于提升了N倍IOPS。由于每个IO只独占了一个物理盘,所以数据传输速度相较于单盘没有改变。
在读,顺序IO模式或随机IO模式下下由于IO不能并发,所以此时一个IO可以同时读取N个盘上的内容。但随机IO时,寻到时间影响很大,总体来说性能提升很小。
在读、顺序IO或连续IO模式下寻道时间影响最低,此时性能主要取决于硬盘传输速度,性能提升了N倍。
3. RAID 2
RAID 2是一种特殊的模式,它是一种专用RAID,现在已经被淘汰,与RAID 1不同,RAID 2的备份盘用于存储校验数据的汉明码(Hamming Code ECC)用于错误检测和修正,它能够修正一位的错误,即只允许一个硬盘出问题,但它需要的校验码位数与存储数据的位数正相关,也就是硬盘阵列中存储硬盘数量越多,需要的校验盘数量也越多。
为了保证每次写数据都能保证多硬盘并行,RAID 2把条带深度设置为1b,但这也导致RAID 1无法并发IO,因为每次写数据都会占用全部硬盘的IO,RAID 2系统与单盘IO的对比如表3所示(N为数据盘数量):
表3. RAID 2系统相较于单盘的IO对比
RAID 2 IOPS | 读 | 写 | ||||
顺序IO | 顺序IO | |||||
非事务性随机IO | 事务性随机IO | 连续IO | 非事务性随机IO | 事务性随机IO | 连续IO | |
提升极小 | 提升极小 | 提升N倍 | 性能降低 | 提升极小 | 提升N倍 |
4. RAID 3
RAID 3把校验盘也虚拟化为条带的形式,如图3所示,它采用更为高效的XOR校验算法,在写入数据时同时向校验盘相同偏移量的条带写入数据经过XOR校验后的校验码。这种算法可以在阵列中某块硬盘故障后恢复其中的数据,但在针对数据传输时出现的错误,XOR校验算法只能判断数据是否有错误,无法找出哪里有误,更无法修复错误。
RAID 3摒弃了RAID 2把条带深度仅仅设置为1b的设计,而是把条带深度设置为随硬盘数量而定,最小1个扇区,条带长度为一个文件系统块的大小,即每个Segment的大小为一个或几个扇区。这样一来不仅保留了每次IO尽可能占用全部硬盘的并行性,还解决了RAID 2非事务性IO效率低下的问题,但因为校验盘无法共享IO,RAID 3和RAID 2一样无法并发IO。RAID 3系统与单盘IO的对比见表4。
图3.RAID 3示意图
表4 RAID 3阵列系统相较于单盘的IO对比
RAID 3 IOPS | 读 | 写 | ||||||
并发IO | 顺序IO | 并发IO | 顺序IO | |||||
随机IO | 连续IO | 随机IO | 连续IO | 随机IO | 连续IO | 随机IO | 连续IO | |
IO SIZE/Stripe SIZE较大 | 不支持 | 不支持 | 提升很小 | 提升N倍 | 不支持 | 不支持 | 提升很小 | 提升N倍 |
IO SIZE/Stripe SIZE较小 | 不支持 | 事务型IO可并发,提升并发系数倍 | 提升很小 | 提升N*IO SIZE/Stripe SIZE倍 | 不支持 | 事务型IO可并发,提升并发系数倍 | 提升很小 | 提升N*IO SIZE/Stripe SIZE倍 |
5. RAID 4
RAID 4 为提高IO并发的几率,在RAID 3的基础上又加大了条带的深度,使得大部分文件写入的IO操作只调用阵列中的一部分硬盘,但RAID 4只有一块校验盘,在写入数据的同时也会对校验盘进行IO操作,这样校验盘就成为了热点盘,由于单块校验盘不支持IO并发,RAID 4依然难以做到并发IO,业界针对这种情况专门研制了优化方案,例如WAFL文件系统,它提供一个控制器,将两个不同事务的IO写操作,尽量放到同一条带上,以人为制造更多的重构写模式,这样不仅并发了IO,还增加了写效率。RAID 4系统与单盘IO的对比见表5所示。
表5 RAID 4阵列系统相较于单盘的IO对比
RAID 4 IOPS | 读 | 写 | ||||||
特别优化的并发IO | 顺序IO | 特别优化的并发IO | 顺序IO | |||||
随机IO | 连续IO | 随机IO | 连续IO | 随机IO | 连续IO | 随机IO | 连续IO | |
IO SIZE/Stripe SIZE较大 | 冲突 | 冲突 | 提升很小 | 提升N倍 | 冲突 | 冲突 | 没有提升 | 提升N倍 |
IO SIZE/Stripe SIZE较小 | 提升很小 | 提升N*并发系数倍 | 几乎无提升 | 几乎无提升 | 提升并发系数倍 | 提升N*并发系数倍 | 性能降低 | 性能降低 |
6. RAID 5
RAID 5系统与RAID 3和RAID 4相比,它不使用单独的一块物理盘作为校验盘,而是将校验盘以条带的形式分布于各数据盘中,一个5硬盘、条带深度为5个block的RAID 5系统如图4所示:
图5.RAID 5示意图
RAID 5阵列中的每个条带都有一个校验Segment,但是不同条带中位置不同,在相邻条带间循环分布。为保证并发IO,RAID 5将条带大小做得比较大,以保证每次IO不会占满整个条带,造成队列中其他IO的等待。因此RAID 5要保证高并发率,一旦某时刻没有成功并发,则这次IO几乎就是读改写模式,所以RAID 5有较高的写惩罚。但是在随机写IO频发的环境下,由于频发的随机IO提高了潜在的并发几率,如果碰巧并发的IO处在一个条带上,还可以降低写惩罚的几率。因此RAID 5 系统面对频发的随机写IO时,其IOPS下降趋势比其他RAID系统更平缓一些。
RAID 5相较于经过特别优化的RAID 4,其在底层就实现了并发,可以脱离文件系统的干预。而不像基于WAFL文件系统的RAID 4,需要预先规划并发环境,就效率而言,仍然是WAFL拥有更高的并发系数,因为WAFL是主动创造并发环境,RAID 5是被动等待并发发生。RAID 5系统与单盘IO对比见表6。
表6 RAID 5阵列系统相较于单盘的IO对比
RAID 5 IOPS | 读 | 写 | ||||||
并发IO | 顺序IO | 并发IO | 顺序IO | |||||
随机IO | 连续IO | 随机IO | 连续IO | 随机IO | 连续IO | 随机IO | 连续IO | |
IO SIZE近似Stripe SIZE | 不支持 | 不支持 | 提升很小 | 提升N倍 | 不支持 | 不支持 | 提升很小 | 提升N倍 |
IO SIZE大于Segment Size且重构写 | 提升并发系数倍 | 提升N*并发系数倍 | 几乎无提升 | 提升IO SIZE/Segment Size倍 | 提升并发系数倍 | 提升N*并发系数倍 | 性能降低 | 提升很小 |
IO SIZE小于Segment Size且读改写 | 提升并发系数倍 | 提升N*并发系数倍 | 提升很小 | 几乎无提升 | 提升并发系数倍 | 提升N*并发系数倍 | 性能降低 | 性能降低 |
此外还有RAID 5E系统,它在RAID 5的基础上,每块硬盘又各自分出一部分区域充当热备区域,目的是在遇到阵列中突然有硬盘损坏时,其他硬盘立即恢复数据并写入热备区域中。RAID 5EE系统是将RAID 5E中的热备区域也条带化,以便于规划硬盘空间。
7. RAID 6
RAID 6相较于RAID 5,其在每个条带中又增加了一个Segment存储校验数据,即每个RAID 6阵列使用相当于两块硬盘的空间充当校验盘,这样一来整个存储阵列遇到同时损坏两块硬盘时,也能恢复数据。RAID 6系统示意图见图6所示。
RAID 6在写的时候会比RAID 5同时读取或写入额外的一份校验数据,不过由于是并行操作,所以不会比RAID 5慢多少,其他性能则与RAID 5类似,RAID 6系统与单盘IO的对比见表7所示。
图6.RAID 6示意图
表7 RAID 6阵列系统相较于单盘的IO对比
RAID 6 IOPS | 读 | 写 | ||||||
并发IO | 顺序IO | 并发IO | 顺序IO | |||||
随机IO | 连续IO | 随机IO | 连续IO | 随机IO | 连续IO | 随机IO | 连续IO | |
IO SIZE近似Stripe SIZE | 不支持 | 不支持 | 提升很小 | 提升N倍 | 不支持 | 不支持 | 提升很小 | 提升N倍 |
IO SIZE大于Segment Size且重构写 | 提升并发系数倍 | 提升N*并发系数倍 | 几乎无提升 | 提升IO SIZE/Segment Size倍 | 提升并发系数倍 | 提升N*并发系数倍 | 性能降低 | 提升很小 |
IO SIZE小于Segment Size且读改写 | 提升并发系数倍 | 提升N*并发系数倍 | 提升很小 | 几乎无提升 | 提升并发系数倍 | 提升N*并发系数倍 | 性能降低 | 性能降低 |