什么是RAID
硬盤是個很脆弱的東西,它經常會壞掉。所以,為了保證服務器可靠耐用,硬盤必須時時刻刻保持可用。所以有了RAID這個東西。它的目的是將好幾個硬盤合並在一起,就算硬盤壞了一個,剩下還有好幾個硬盤是正常的,這樣服務器才不會掛掉。
當然,保證服務高可用只是RAID其中的一個功能。它還能提升儲存容量、加快存取速度等能力。
RAID分為0~6級,另外還有RAID 1+0,簡稱RAID 10。下面分別介紹這幾種RAID實現原理。
下圖就是一個RAID實物圖:
下圖是RAID示意圖:
它跟插線板是相似的概念。區別在於,插線板是為了擴展電源插孔,RAID是為了擴展硬盤插槽。
RAID-0
RAID 0沒有數據冗余、沒有奇偶校驗。因此,如果一個硬盤壞掉了,整個RAID陣列的數據都沒法正常使用了。它存在的意義在於加快讀寫速度,提升硬盤容量。通常在數據可靠性要求不高的情況下才會使用RAID 0。比如游戲、科學計算。
因為每個硬盤都可以獨立讀寫,如果硬盤有n塊,那么讀寫速度提升是n倍。
下圖是RAID 0的數據分布方式:
RAID-1
RAID 1模式下,如果有n塊硬盤,那么會把數據保存n份一模一樣的。這樣即使一份數據壞掉了,剩下的備份可以正常工作。性能方面,隨機存取速度相當於所有硬盤的總和,寫入性能和原來單個硬盤的性能一樣。
RAID-1E
這種模式跟RAID 1的區別在於,當硬盤數量大於2時,RAID 1E對於同一份數據最多保存兩份一模一樣的。這樣可以充分的利用硬盤空間。下圖說明了這種儲存方式。
RAID-1+0
這種模式全稱是RAID-1加上RAID-0。它實現的原理如下圖所示:
用幾句話來描述吧。它相當於先把這些硬盤成對成對的用RAID-1方式組合起來,然后再把這些組合結果用RAID-0方式組合起來。這種模式下它支持高可用,又能有很好的讀寫性能。這種方式,由於需要存兩份一模一樣的數據,因此容量會損失一半。
這種方式是目前最常用的。
RAID-2
這種模式現在已經不太常用了。它把每個數據位都打散,然后均勻的放到各個硬盤上。使用了Hamming代碼來做糾錯,將Hamming代碼放到專門的幾個硬盤里面。下圖可以看到這種模式的數據分布:
RAID-3
這種模式現在也已經不太常用了。它把每個數據字節都打散,然后均勻的分散到各個硬盤。然后將奇偶校驗的數據放到專門的硬盤里。關於奇偶校驗的數據在后面會提到。這種模式下,由於每個數據都分散到各個硬盤的不同地方,因此每次操作都需要所有硬盤來參與。所以,對於隨機存取的場景下,這種模式的性能是很差的。對於特別長的順序讀寫是非常合適的,比如視頻監控數據。
RAID-4
這種模式把每個數據塊打散,然后均勻的分散到各個硬盤。另外還設置了專門的硬盤用來儲存奇偶校驗的數據。這種模式下,隨機讀取的性能非常好。但是隨機寫入的性能卻不行。因為需要將所有奇偶校驗的數據全部寫到專門的硬盤里面。
RAID-5
這種模式把每個數據塊打散,然后均勻分布到各個硬盤。與RAID-4不同的是,它將奇偶校驗的數據均勻的分散到不同的硬盤。這樣如果有一個硬盤壞掉了,丟失的數據可以從奇偶校驗里面計算出來。
通常RAID-5的容量會損失1/3,用來儲存奇偶校驗信息。
這種模式兼顧了成本、性能,也是比較常用的一種模式。
RAID-6
這種模式與其他模式的區別在於,它支持兩塊硬盤同時損壞,並且仍然能夠正常工作。它有這般神奇的能力,是因為它保存了兩種奇偶校驗。一種是普通的XOR方式,跟RAID-5一樣。另外一種比較復雜,需要消耗比較多的CPU。這種奇偶校驗方式在后面再講。
參考資料
https://en.wikipedia.org/wiki/RAID
https://en.wikipedia.org/wiki/Standard_RAID_levels