最近一直在研究RAID 50,因为牺牲一半的容量的RAID 10代价实在太大了,而且它提供的可用性也并不是百分百的,我们首先来看下RAID 10的可用性分析:
以同等容量的不同RAID方式作为案例分析:
8盘RAID 10 | 6盘RAID 50 | 5盘RAID 5 | 6盘RAID 6 | |
第一块盘故障后可用概率 | 100% | 100% | 100% | 100% |
第二块盘故障后可用概率 | 6/7 | 3/5 | 0% | 100% |
第三块盘故障后可用概率 | 4/6 | 0% | 0% | 0% |
第四块盘故障后可用概率 | 2/5 | 0% | 0% | 0% |
RAID 50中:4块盘组成单组RAID 5,然后两组RAID 5再组成RAID 0最后得到8块盘的RAID 50
案例分析:
第一块盘的容错概率都是100%,可见磁盘阵列最基本的能力就是容错,然而不同级别的阵列能够提供的数据保护能力也是不同的;
从第二块盘开始除了RAID 6能够提供100%的可用性以外,其他包括RAID 10在内都不能提供完美的解决方案。同时我们可以发现RAID 5的容错能力是最弱的,但是要达到同样容量所需要的盘数量也是最少的,如果故障运维较为及时的话,RAID 5是一个非常经济的方案,不然在第一块盘故障期间再次发生第二块盘故障就会导致数据丢失,这就是风险所在;
RAID 6当然是较为可靠的方案,但是它要牺牲两块盘的容量并且性能较差,所以要权衡性能和可用性;
当然重点还是RAID 10和50,我们发现50在损坏第二块盘时的可用概率和10比较接近,如果RAID 5组的数量更多的话,可用性概率将会更高,我们以9块盘RAID 50为例,要达到相同容量RAID 10需要12块盘:
12盘RAID 10 | 9盘RAID 50 | |
第一块盘故障后可用概率 | 100% | 100% |
第二块盘故障后可用概率 | 10/11 | 6/8 |
第三块盘故障后可用概率 | 8/10 | 3/7 |
第四块盘故障后可用概率 | 6/9 | 0% |
50已经能够提供第三块盘的容错,只是相比10概率更低些,但是两者都不能达到完全的100%,所以权衡成本和可用性50还是有一定的优势。接下来看看性能。
SSD成本较高,不少用户为了考虑可用性都会选用RAID 10的方式作阵列,这样无疑又增加了成本,为了能够很好地分析性能,我们沿用了第一组对比方案的作性能分析:
Intel S3500 800G SSD | 8p RAID 10 | 6p RAID 50 | 5p RAID 5 | 6p RAID 6 | |||||
块大小 | 队列深度 | IOPs | MBPs | IOPs | MBPs | IOPs | MBPs | IOPs | MBPs |
随机读(4KB 8KB 16KB 32KB) | |||||||||
4K | 32 | 96716 | 396 | 100630 | 412 | 105939 | 433 | 105278 | 431 |
8K | 32 | 96003 | 786 | 99199 | 812 | 103196 | 845 | 103059 | 844 |
16K | 32 | 94725 | 1551 | 94827 | 1553 | 91758 | 1503 | 96595 | 1582 |
32K | 32 | 83115 | 2723 | 66786 | 2188 | 56637 | 1855 | 66391 | 2175 |
随机写(4KB 8KB 16KB 32KB) | |||||||||
4K | 32 | 20220 | 82 | 15658 | 64 | 11602 | 47 | 10579 | 43 |
8K | 32 | 12306 | 100 | 14157 | 115 | 11561 | 94 | 9413 | 77 |
16K | 32 | 4856 | 79 | 8072 | 132 | 7426 | 121 | 6473 | 106 |
32K | 32 | 1856 | 60 | 2642 | 86 | 1631 | 53 | 1999 | 65 |
4KB混合随机读写(30%写) | |||||||||
4K | 32 | 46716 | 191 | 36758 | 150 | 30739 | 125 | 28566 | 117 |
顺序读(128KB 256KB 512KB) | |||||||||
128K | 32 | 20751 | 2719 | 20013 | 2623 | 18330 | 2402 | 20505 | 2687 |
256K | 32 | 10505 | 2753 | 9829 | 2576 | 8736 | 2290 | 9941 | 2605 |
512K | 32 | 5188 | 2720 | 4813 | 2523 | 4371 | 2291 | 4956 | 2598 |
顺序写(128KB 256KB 512KB) | |||||||||
128K | 32 | 5162 | 676 | 4660 | 610 | 7630 | 1000 | 2460 | 322 |
256K | 32 | 2426 | 635 | 1985 | 520 | 2208 | 578 | 980 | 256 |
512K | 32 | 1169 | 612 | 1373 | 719 | 2267 | 1188 | 1134 | 594 |
随机读分析:
理论上认为R10性能最好,真实测试数据显示4K、8K数据块下R5、R50、R6的性能都要优于R10;当数据块增大到16K、32K时,R10的多盘优势才被逐渐体现出来。
随机写分析:
4K由于R50、R5由于有大量校验计算一定程度上影响了性能,但随着数据块逐渐增大,盘数量的优势也显现出来。当数据块达到和超过8K 时,R50性能全面超越了R10;R10由于存在R1的写同步问题,因此只有4块盘在支撑并发写,随着数据块的增大,R50和R5的多盘性能优势开始发 挥。
混合随机读写分析:
得益多盘和无校验计算,混合读写R10领先;R50其次,和R10相差27%,性能也较为接近,R5和R50性能为线性关系,R6性能最差。
顺序读分析:
由于不存在校验计算,顺序读性能基本上由盘的数量决定;R50和R10性能也较为接近,同盘数的R6和R50性能相当,而盘数较少的R5性能相对前三者要弱一些,符合预期。至于为何R10性能无法线性增加,主要是因为阵列卡本身的性能限制。
顺序写分析:
顺序写R5被优化得最好;R50由于需要同时计算两次校验因此损失了一些性能,和R10性能相当,当数据块达到512K时,多盘优势进一步体现出来了,拉开了与R10的差距;R6由于校验和计算的实现较为复杂,顺序写性能也是最差的。
然后我们再来看看这些阵列方案的特性:
参数特性 | 8p RAID 10 | 6p RAID 50 | 5p RAID 5 | 6p RAID 6 | |||||
理论读并发数 | 8块盘 | 6块盘 | 5块盘 | 6块盘 | |||||
理论写并发数 | 4块盘 | 6块盘 | 5块盘 | 6块盘 | |||||
IO延迟来源 | RAID 1写同步 | 2组RAID 5写校验 | 1组RAID 5写校验 | 1组RAID 6写校验 | |||||
测试结论:
性能测试显示,相同容量的R50和R10性能接近:其中小块文件的随机读R50要全面好于R10,随机写4K虽然R50和R10差距在28%,但是块增大后R50要全面优于R10。顺序读写方面,R50和R10十分接近。
容错方面,R50接近R10:第二块盘容错率R50十分接近R10,两者相差30%。R10的优势主要是在有一定的概率提供第三、甚至第四 块磁盘的容错率,但是考虑到并非100%容错,因此从容错角度来看R50虽然和R10有一些差距,但也已体现出较好的容错率,至少优于R5。而且R50搭 配灵活,甚至可以指定3组R5以达到最大3块磁盘的容错;
成本方面,R50有很大优势:按这个配置计算R50只有R10的3/4。