最近一直在研究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。