寫這篇文字的初衷,源于自己最近糾正了之前的一個認(rèn)識——無論各種RAID改良技術(shù),其Rebuild(重建)速度都不可能超過單塊硬盤的最大寫入速度?
相關(guān)閱讀:《maxCache進(jìn)階:SSD緩存高可用,RAID重建加速》
一、發(fā)現(xiàn)局限,仍存誤區(qū)
大約幾個月前,我受益于高人的觀點,了解到IBM XIV的一個局限。XIV將底層磁盤空間完全打散為1MB大小的數(shù)據(jù)塊,然后按照偽隨機算法,將同一塊硬盤上的數(shù)據(jù)塊與來自其它所有的硬盤的數(shù)據(jù)塊進(jìn)行鏡像。這樣做消除了數(shù)據(jù)熱點,正常狀況下的理論性能相當(dāng)于RAID 10,當(dāng)然空間利用率也沒有RAID 5、6高。
其實XIV在技術(shù)上更值得關(guān)心的是:當(dāng)有一塊硬盤故障時,IBM宣稱向熱備盤重建的速度遠(yuǎn)高于傳統(tǒng)RAID,并且在此期間正常數(shù)據(jù)訪問性能下降的比較少,因為此時的Rebuild負(fù)載也被均衡分散了。然而有個問題:正是由于每一個硬盤上數(shù)據(jù)塊鏡像的副本分布在整個存儲池中其它所有的硬盤,相當(dāng)于剩下的硬盤上都存在唯一數(shù)據(jù)。也就是說,如果在重建結(jié)束之前再損壞第二塊硬盤的話,就有可能會丟失數(shù)據(jù)。
筆者以此得出推論——IBM曾表示在實驗室中測試過4個機架的XIV互連(60節(jié)點),但迄今為止仍然沒有推出15節(jié)點(180個驅(qū)動器)以上的型號,很可能就是上面提到的原因。畢竟硬盤越多,這種短時間單點故障的風(fēng)險就越大。
就這一點,@jametone 老師還曾在微博上與我交流,他表示3PAR的寬條帶化RAID技術(shù)也是類似的情況。而我當(dāng)時的誤區(qū)在于,無論這些改良型RAID重建時的數(shù)據(jù)可以同時來自多少塊硬盤,但它們都要寫入到一塊硬盤上?因此在該硬盤存滿數(shù)據(jù)的情況下,重建的時間無法超過以最大速度填充整個硬盤的時間?
那么后來我又是如何推翻這個認(rèn)識呢?在展開具體討論之前,我想先簡單敘述下寬條帶化(wide striping)技術(shù)的特點,以及在傳統(tǒng)RAID基礎(chǔ)上解決了哪些問題。
1.簡化配置,均衡性能熱點。如果說自動精簡配置(Thin-provisioning)提高的是容量方面的利用率,那么寬條帶化就是使RAID卷組規(guī)劃變得簡單,并提高性能利用率的技術(shù)。
比如說像IBM Storwize V7000(EMC VNX/CLARiiON等可能也是類似的情況),用兩至多個RAID 5 4+1的組成磁盤池,也就相當(dāng)于再次條帶化,在RAID 5之間又做了一次RAID 0。這樣可能會有一個問題,當(dāng)遇到故障盤重建的情況,Rebuild磁盤負(fù)載只產(chǎn)生在一個RAID 5上,而它會同時把其它RAID組“拖慢”。
2.提高重建速度,減少性能影響。我們看到還有些更進(jìn)一步的底層完全打散的技術(shù)。比如前面提到的XIV,帶有RAID 1的特點;NetApp E系列的動態(tài)磁盤池(Dynamic Disk Pools,以下簡稱DDP),帶有RAID 6的特點;惠普3PAR支持多種RAID級別,但客觀講我對于它的Dynamic Optimization研究還不夠。
關(guān)于“存儲底層打散的存儲虛擬化技術(shù)”(這里的虛擬化指的是陣列內(nèi)部的磁盤管理方面,而非像IBM SVC、EMC VPLEX那樣的“外部”存儲虛擬化),可以參考 @_林肯大叔 前輩所著的《存儲器那點事》。
動態(tài)磁盤池對比(傳統(tǒng)RAID)卷組的Rebuild時IOPS性能下降情況
這里我引用了來自NetApp的一張圖表,其中黑色柱形代表RAID6,藍(lán)色表示DDP中等重建優(yōu)先級,灰色為DDP高優(yōu)先級,從左到右依次為12、24、60、96和192塊硬盤。圖表反映了在運行4KB隨機讀訪問負(fù)載情況下,重建對性能產(chǎn)生的影響。
首先我們看到在12塊盤時,DDP的表現(xiàn)與RAID6基本相當(dāng)。再往上,傳統(tǒng)RAID不適合容納過多的硬盤,首先RAID 5/6有寫懲罰的問題;而RAID 10在重建時也會遇到磁盤對的瓶頸。隨著硬盤數(shù)量的增加,DDP對性能的影響能夠不斷減小,這和筆者在開頭提到的XIV是相同的道理。