为了方便RAID 10和RAID5对比,这里拿同样多驱动器的磁盘来做对比(4个相同的磁盘),RAID 5可以选择3D+1P的RAID方案,RAID 10则可以选择2D+2D的RAID方案。
- 安全性方面的比较, 其实在安全性方面,勿须质疑,肯定是RAID 10的安全性高于RAID 5。我们也可以从简单的分析来得出。当盘1损坏时,对于RAID 10,只有当盘1对应的镜象盘损坏,才导致RAID失效。但是对于RAID 5,剩下的3块盘中,任何一块盘故障,都将导致RAID失效, 在恢复的时候,RAID10恢复的速度也快于RAID5。
- 空间利用率的比较: RAID 10的利用率是50%,RAID 5的利用率是75%。硬盘数量越多,RAID 5的空间利用率越高。
- 读写性能方面的比较: 主要分析分析如下三个过程:读,连续写,离散写。
在介绍这三个过程之前,先介绍一个特别重要的概念:cache(写入缓存), cache已经是整个存储的核心所在,就是中低端存储,也有很大的cache存在,包括最简单的raid卡,一般都包含有几十,甚至几百兆的Raid cache。
Cache的主要作用是什么呢?体现在读与写两个不同的方面,如果作为写,一般存储阵列只要求写到cache就算完成了写操作,所以,阵列的写是非常快速的,在写cache的数据积累到一定程度,阵列才把数据刷到磁盘,可以实现批量的写入,至于cache数据的保护,一般都依赖于镜相与电池(或者是UPS)。
Cache的读一样不可忽视,因为如果读能在cache中命中的话,将减少磁盘的寻道,因为磁盘从寻道开始到找到数据,一般都在6ms以上,而这个时间,对于那些密集型io的应用可能不是太理想。但是,如果cache能命中,一般响应时间则可以在1ms以内。两者应该相差3个数量级(1000倍)。
读操作方面的性能比较
RAID 10可供读取有效数据的磁盘个数为4,RAID 5可供读取有效数据的磁盘个数也为4个(校验信息分布在所有的盘上),所以两者的读的性能应该是基本一致的。
连续写方面的性能比较
在连续写操作过程,如果有写cache存在,并且算法没有问题的话,RAID 5比RAID 10甚至会更好一些,虽然也许并没有太大的差别。(这里要假定存储有一定大小足够的写cache,而且计算校验的cpu不会出现瓶颈)。 因为这个时候的RAID校验是在cache中完成,如4块盘的RAID 5,可以先在内存中计算好校验,同时写入3个数据+1个校验。而RAID 10只能同时写入2个数据+2个镜相。
根据前面对缓存原理的介绍,写cache是可以缓存写操作的,等到缓存写数据积累到一定时期再写到磁盘。但是,写到磁盘阵列的过程是迟早也要发生的,所以RAID 5与RAID 10在连续写的情况下,从缓存到磁盘的写操作速度会有较小的区别。不过,如果不是连续性的强连续写,只要不达到磁盘的写极限,差别其实并不是太大。
离散写方面的性能比较
如果采用的是 oracle 数据库,每次写一个数据块的数据,如8K;由于每次写入的量不是很大,而且写入的次数非常频繁,因此联机日志看起来会像是连续写。但是因为不保证能够添满RAID 5的一个数据条带块,比如32K(保证每个盘都能写入),所以很多时候更加偏向于离散写入(写入到已存在数据的条带中)。在 离散写的时候对于RAID5,实际发生了4次i/o:但 对于RAID 10,同样的操作,最终RAID 10只需要2个i/o操作,但是,在RAID 5中, 如果需要读取的数据已经在cache中,可能并不需要4个io的。这也证明了cache对RAID5 的重要性,不仅仅是计算校验需要,而且对性能的提升尤为重要。 当然,并不是说cache对RAID10就不重要了,因为写缓冲,读命中等,都是提高速度的关键所在,只不过RAID 10对cache的依赖性没有RAID 5那么明显而已。
磁盘世纪读写操作(机械 电磁操作)的IOPS对比
假定有一个数据请求事件,其iops是10000,读cache命中率是30%,读iops为60%,写iops为40%,磁盘个数为120,那么分别计算在raid5与raid10的情况下,每个磁盘的iops为多少。
Raid 5: 单块盘的iops =(10000*(1-0.3)*0.6+4*(10000*0.4))/120=(4200+16000)/120=168
这里的10000*(1-0.3)*0.6表示是读的iops,比例是0.6,除掉cache命中,实际只有4200个iops。4*(10000*0.4)表示写的iops,因为每一个写,在raid 5中,实际发生了4个io,所以写的iops为16000个。
为了考虑raid 5在写操作的时候,那2个读操作也可能发生命中,所以更精确的计算为:单块盘的iops = (10000*(1-0.3)*0.6+2*(10000*0.4)*(1-0.3)+2*(10000*0.4))/120=(4200 + 5600 + 8000)/120=148计算出来单个盘的iops为148个,基本达到磁盘极限。
Raid10:单块盘的iops=(10000*(1-0.3)*0.6+2*(10000*0.4))/120=(4200+8000)/120=102
可以看到,因为raid 10对于一个写操作,只发生2次io,所以,同样的压力,同样的磁盘,每个盘的iops只有102个,这远远低于磁盘的极限iops。
Raid10和Raid5对比结论
要求较高的空间利用率,对安全性要求不是特别高、大文件存储的系统采用RAID 5比较好。相反,安全性要求很高,不计成本,小数据量频繁写入的系统采用RAID 10的方式比较好。另外关于限制: 在Raid 10中,四个硬盘的总空间不能大于3.8T,这样现在的大容量磁盘: 1T的就无法使用,限制了储存空间,而RAID 5就基本不存在这种限制。另外,磁盘数量增加,对电源的要求上升,能耗也加大了,且服务器散热风扇的噪音也将急剧增大。
http://mtoou.info/raid10-raid5-bijiao/http://mtoou.info/raid10-raid5-bijiao/