對於RAID,一直都知道個概念,但是對於細節沒有去仔細的研究過。正好昨天Training的時候, 老師講解了RAID的內容,所以順便就整理一下。很多內容都是參考了ISMv2這本書。
RAID中用到的技術主要有
1. Striping
2. Mirroring
3. Parity
Striping(條帶化): 就是將一塊連續的數據分成很多小部分並把他們並行的存儲到不同磁盤上去。其中涉及到幾個術語 Strip,Stripe,Strip size,Stripe size。Strip就是在每個磁盤上預先定義好的一定數量的連續的Block。在RAID中所有磁盤上的Strip一起叫做一個Stripe。Strip size (Stripe depth)指的是一個strip中的最大數據大小即block number* block size。Stripe size指的就是stripe的大小即disk number * strip size。
Mirroring (鏡像):就是將同一數據存儲在兩塊不同的硬盤上,從而產生該數據的兩個copy。當其中一塊faulted,替換了新disk之后,Controller會自動將好的磁盤中的數據copy到新的磁盤中。
Parity(奇偶校驗):主要是來為Striped RAID提供數據保護功能。利用位異或(XOR)的算法,將產生的校驗值額外進行保存在磁盤上。可以是額外的一塊磁盤,也可以分布在所有磁盤上。注意在ISM書中P56的例子是錯誤的。異或並非例子中的加減操作。關於Parity的計算可以參考:RAID 5 Parity. What is it, and how does it work? 。 寫的很好理解。
對於這Striping,Mirroring,Parity有了基本的理解之后。下面就是RAID類型的介紹。RAID主要有這幾種類型RAID 0, 1, 3, 5, 6, 10, 01。
RAID 0
直接采用Striping的技術,過程如下圖所示。
讀:對於每一個文件的讀操作,RAID controller會去讀取這個文件所有的strip,是一個並發的I/O,所以讀性能比較好的。Disk數量越多,讀性能越好。
寫:和讀操作類似,RAID Controller會分成多個strip寫到各個disk中,所以寫的性能比較好。
性能:讀寫性能比較好。適合高I/O的情景。
優點:I/O性能好。
缺點:沒有數據保護。
RAID 1
采用mirroring技術,能夠提夠數據容錯能力(fault tolerance)。這個也很好理解。過程如下圖所示。
RAID 10
也叫做striped mirror。Disk 先做mirror,然后對這三個RAID1做striping。
RAID 01
是先將其中一半disk做RAID 0, 然后再做mirroring。
兩者之間的性能和可用空間是一樣的,在容錯方面RAID 10 要優於RAID 01,在數據rebuild時候RAID 10 也是有優勢的,所以RAID 01 很少見到。
1. 容錯方面:由於RAID 10 是先做mirror.是多組RAID,可以允許最多一半的disk損害,前提是不在一個RAID1中。而RAID 01中,如果一塊disk fault,那么這個RAID 0就fault。另外的一個RAID 0 無法容忍disk fault的情況,否則就是DL。
2. Rebuild過程: RAID 01 中,假設其中一塊disk fault,如果要recovery。那么需要另外一個RAID 0 來做Mirror,將整個stripe的數據copy到對應的disk中,而對於RAID 10 來說,只需要去copy一個disk就可以了。
RAID 3
RAID 3 和RAID 5 類似,只是Parity 信息都寫到一個disk中,由於每個寫操作,會產生2 Reading+ 2 Writing的操作。並且其中的一個R ,W都是在這個Parity 的disk上,所以很容易造成這個disk的fault。實際中用的也不多。
RAID 5
RAID 5的Parity信息是寫在各個disk中的,所以沒有RAID 3 的單個disk瓶頸。
RAID 6
RAID 6中有兩個Parity的信息,是寫在各個disk中的,可以容忍兩塊disk的fault。具體算法牽扯到線性代數中的矩陣,大學的學的基本忘干凈了。可以參考 這篇文章:RAID6算法解析。
關於不同RAID Level的比較可以參考下圖:
References:
1. RAID 5 Parity. What is it, and how does it work?