Raid很基礎,但是在存儲系統中佔據非常重要的地位,所有涉及存儲的書籍都會提到RAID。RAID通過磁盤冗餘的方式提高了可用性和可高性,一方面增加了數據讀寫速度,另一方面增加了數據的安全性。
RAID 0
對數據進行條帶化。使用兩個磁盤交替存放連續數據。因此可以實現併發讀寫,但帶來的問題是如果一個磁盤損壞,另外一個磁盤的數據將失去意義。RAID 0最少需要2塊盤。
RAID 1
對數據進行鏡像。數據寫入時,相同的數據同時寫入兩塊盤。因此兩個盤的數據完全一致,如果一塊盤損壞,另外一塊盤可以頂替使用,RAID 1帶來了很好的可靠性。同時讀的時候,數據可以從兩個盤上進行讀取。但是RAID 1帶來的問題就是空間的浪費。兩塊盤只提供了一塊盤的空間。RAID 1最少需要2塊盤。
RAID 5 和 RAID 4
使用多餘的一塊校驗盤。數據寫入時,RAID 5需要對數據進行計算,以便得出校驗位。因此,在寫性能上RAID 5會有損失。但是RAID 5兼顧了性能和安全性。當有一塊磁盤損壞時,RAID 5可以通過其他盤上的數據對其進行恢復。
如圖可以看出,右下角爲p的就是校驗數據。可以看到RAID 5的校驗數據依次分佈在不同的盤上,這樣可以避免出現熱點盤(因爲所有寫操作和更新操作都需要修改校驗信息,如果校驗都在一個盤做,會導致這個盤成爲寫瓶頸,從而拖累整體性能,RAID 4的問題)。RAID 5最少需要3塊盤。
RAID 6
RAID 6與RAID 5類似。但是提供了兩塊校驗盤(下圖右下角爲p和q的)。安全性更高,寫性能更差了。RAID 0最少需要4塊盤。
RAID 10(Striped mirror)
RAID 10是RAID 0 和RAID 1的結合,同時兼顧了二者的特點,提供了高性能,但是同時空間使用也是最大。RAID 10最少需要4塊盤。
需要注意,使用RAID 10來稱呼其實很容易產生混淆,因爲RAID 0+1和RAID 10基本上只是兩個數字交換了一下位置,但是對RAID來說就是兩個不同的組成。因此,更容易理解的方式是“Striped mirrors”,即:條帶化後的鏡像——RAID 10;或者“mirrored stripes”,即:鏡像後的條帶化。比較RAID 10和RAID 0+1,雖然最終都是用到了4塊盤,但是在數據組織上有所不同,從而帶來問題。RAID 10在可用性上是要高於RAID 0+1的:
- RAID 0+1 任何一塊盤損壞,將失去冗餘。如圖4塊盤中,右側一組損壞一塊盤,左側一組損壞一塊盤,整個盤陣將無法使用。而RAID 10左右各損壞一塊盤,盤陣仍然可以工作。
- RAID 0+1 損壞後的恢復過程會更慢。因爲先經過的mirror,所以左右兩組中保存的都是完整的數據,數據恢復時,需要完整恢復所以數據。而RAID 10因爲先條帶化,因此損壞數據以後,恢復的只是本條帶的數據。如圖4塊盤,數據少了一半。
- RAID與LVM中的條帶化原理上類似,只是實現層面不同。在存儲上實現的RAID一般有專門的芯片來完成,因此速度上遠比LVM塊。也稱硬RAID。
- 如上介紹,RAID的使用是有風險的,如RAID 0,一塊盤損壞會導致所有數據丟失。因此,在實際使用中,高性能環境會使用RAID 10,兼顧性能和安全;一般情況下使用RAID 5(RAID 50),兼顧空間利用率和性能;