RAID(獨立冗余磁盤陣列)技術淺析


引言

如果我們有一個需要很大容量,一塊硬盤存儲不了的數據,只能存儲到多個硬盤上,最簡單的思維是:一塊硬盤一塊硬盤的讀取/存儲。

很顯然,這樣單純的堆積法雖然解決了容量的問題,但是也帶來的浪費,因為一次只是從一塊硬盤上進行讀/寫,同時,單塊硬盤的讀取速度,也是整個磁盤組合的讀取速度。

因為CPU和緩存的速度遠遠大於磁盤的讀取數據,因此我們可以將CPU數據讀/取請求按照順序給不同的磁盤,讓磁盤“同時”讀/寫數據,也就是下面的RAID 0.

RAID 0

將連續的數據拆分成block,分散將數據block的讀/寫請求給各個磁盤,達到“同時”讀/寫的目的。

也叫Stripe條帶模式。

  • 優點:這種數據上的並行操作可以充分利用總線的帶寬,顯著提高磁盤整體存取性能。因為讀取和寫入是在設備上並行完成的,讀取和寫入性能將會增加,
  • 缺點:沒有數據冗余,如果其中一個磁盤Disk出現錯誤,將影響所有的讀/寫操作,並且不能從錯誤中恢復數據。

P.S.磁盤上只有實實在在的扇區結構,並沒有什么Stripe結構,Stripe只是一種邏輯上由程序根據某種算法實現的一種的概念。Stripe后的多個硬盤,數據是被並行寫入磁盤的,而不是只有寫滿了一個磁盤的Stripe區域后,再寫下個磁盤的Stripe區域。

RAID 1

又稱為鏡像(Mirroring),一個具有全冗余的模式。

  • 優點:需要極高的可靠性和安全性。支持"熱替換",即不斷電的情況下對故障磁盤進行更換。
  • 缺點:其磁盤的利用率卻只有50%,是所有RAID級別中最低的。

RAID 1+0

先做鏡像(1),再做條帶(0)。

比如,有HDD0~HDD7共7個磁盤,其中HDD0~HDD3是數據盤,HDD4~HDD7是對應的鏡像盤。同時,有”ABCD”四個數據的磁盤寫請求。

當數據A的寫請求在磁盤HDD0上執行時,就在對應的鏡像盤HDD4中進行鏡像A’。與此同時,按照與數據A類似的步驟,並行在相應磁盤中寫入數據B、數據C和數據D。

  • 優點:兼顧了RAID0和RAID1的優點,在可靠性和I/O性能上有保證。只要不是數據盤和對應的鏡像盤同時出現損壞,數據就能保證完整性,寫功能不會受到影響。如果損壞了其中一塊比如HDD0時,讀性能可能會稍微降低(讀取數據時可以並行操作)。
  • 缺點:從上圖可以看出,需要分出一半的磁盤組作為Mirror,因此空間利用率只有50%,成本大。

RAID1+0 由於兼具可靠性和好的性能, 在商業應用中很廣泛,常應用於數據庫等要求安全性,小數據頻繁寫的場合。

RAID 0+1

先做條帶(0),再做鏡像(1)。

先對數據進行RAID 0條帶化,然后將Stripe后的數據進行備份。

RAID01幾乎不會在實際環境中應用,因為RAID0+1和RAID1+0在讀取效率上沒有差異,但是RAID0+1在安全性和可靠性低。

RAID 2

可以認為是RAID0的改進版,加入了漢明碼(Hanmming Code)錯誤校驗。

漢明碼(Hamming Code)是一種能夠自動檢測並糾正一位錯碼的線性糾錯碼,即SEC(Single Error Correcting)碼。漢明碼通過在要傳輸的數據位中增加一些bit作為校驗位,可以驗證數據的有效性。

漢明碼的原理舉例說明,如果傳輸的數據位數為k,使用的校驗位的位數為r,組成一個n=k+r位數的漢明碼。為了能夠發現這n位數的數據在傳輸給后端時是否出錯,並且能夠指明是那一位數據出錯,那么r位的校驗位至少能夠代表k+r+1個狀態(k+r表明出錯的位置,其中多出來的1表示數據傳輸正確)。那么關系式如下:

也是就是說,如果要傳輸k=4位數據位,根據算式(1) 必須則校驗位r≥3,如果用r=3作為校驗位數,那么總共傳輸的數據位數n=k+r=7。

RAID就是利用了漢明碼的原理,使用校驗磁盤作為錯誤檢查和糾正ECC(Error Correcting Code)盤。如下圖,A0-A3四個盤是數據盤,Ax-Az三個盤是校驗盤。

根據原理,漢明碼有且僅能糾正一個Bit的錯誤,並且因為校驗的原因,校驗位和數據位需要一同並行寫人或讀取(例如,A0-A3,Ax-Az的磁盤需要並行聯動)

RAID2技術過於極端,目前基本已經被淘汰了。根據原理,RAID2需要在IO數據到來之后,控制器將數據按Bit分開,順序並同時在每個數據盤和相應校驗盤中存放1Bit,而磁盤上的IO最小單位是扇區512B,那么如何確保寫入1Bit並且不至於浪費過多空間的算法就很復雜。此外,需要占用相對較多的校驗盤也是原因之一,雖然隨着數據盤的增加,校驗盤的數量會呈指數下降。

RAID 3

RAID 2的缺點主要是將數據以bit位作為單位來分割,將原本物理連續的扇區轉變成了物理不連續、邏輯連續的,這樣導致效率低下。RAID3 就准備從根本上就絕這個問題。

RAID3保留了RAID2的一些優點,比如多磁盤同時聯動,性能高(利用將一個IO盡量做到能夠分割成小塊,讓每個磁盤能夠參與工作)。不過RAID3放棄了將數據分割成Bit這么極端的做法,因為這樣就將磁盤扇區的物理連續性打破了。RAID3將數據以一個扇區(512B)或者幾個扇區(例如4KB)作為單位來分割數據。此外,RAID3也放棄了使用漢明碼來校驗,取而代之的是XOR校驗算法。XOR校驗算法只能判斷數據是否有誤,不能判斷出有那一位有誤,更不能更正錯誤,但是XOR算法可以只需要一塊校驗盤即可。

在一個磁盤陣列中,一般情況下多於一個磁盤出現故障的幾率是很小的,所有一般情況下,RAID3的安全性還是有保障的。

同RAID2一樣,由於需要多磁盤同時聯動,同時還需要校驗。顯然,RAID3不適用於有大量寫操作的情況,因為這樣會使得校驗盤的負荷較大,降低RAID系統的性能。RAID3 常用於寫操作較少,讀操作較多的應用環境,比如數據庫和WEB服務器。

RAID 4

從RAID2和RAID3的設計來看,都是為了盡量達到全盤聯動,也就是說主要都是為了提高數據傳輸率而設計的,但是確無法做到並發IO。

然而,現實中例如數據庫等應用的特點就是高頻率隨機IO讀寫,例如每秒產生的IO數目很大,但是每個IO請求的數據長度都很小。這種情況下,如果所有的磁盤同一時刻都被一個IO占用並且不能並發IO,只能一個IO一個IO的做,必然產生極大的浪費。

那么,要實現並發IO,就需要保證有空閑的磁盤沒有被IO占用,這樣才能讓其他IO去占有這個磁盤進訪問。要達到有有空閑磁盤的目的,那么就需要增加每次讀/寫的容量,例如按塊(Block)存取。

RAID4對於寫IO有個很難克服的問題,那就是校驗盤的爭用。例如上圖A0-A3四個數據盤和一個校驗盤構成的RAID4系統中,某一時刻一個IO只占用了A0和A1兩個磁盤和校驗盤,此時雖然后面兩塊磁盤是空閑的,可以同時接受新的IO請求,但是接受了新的IO請求,則新的IO請求也要使用校驗盤。這樣就導致了校驗盤的爭用成為並發的瓶頸。(動畫演示見http://storage-system.fujitsu...)

基於這個原因,需要特別優化請求的IO數據,才能高效使用RAID4。然而,要優化到並發幾率很高很不容易,目前只有NetApp的WAFL文件系統還在使用RAID4,其他產品均未使用了。

RAID4面臨淘汰,取而代之的是擁有高盲並發幾率的RAID5系統。所謂的高盲並發幾率,就是上層文件系統不用感知下層磁盤的結構,即可增加並發的幾率。

RAID 5

RAID 5+0

RAID 6

備注:

關於RAID的介紹中動畫的網站http://storage-system.fujitsu...

http://storage-system.fujitsu...

文章來源:http://stor.51cto.com/art/201609/517218.htm


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM