RAID(獨立冗餘磁盤陣列)技術

RAID技術的由來

人類自有活動以來,就伴隨着信息的記錄和保存。原始社會的刻痕和結繩,到中國古代的竹簡和紙張,以及20世紀中期出現的磁帶,軟盤和硬盤。到了20世紀後期,隨着集成電路的飛速發展,固態硅芯片的出現,表明有RAM芯片,Flash芯片,CPU芯片等。技術在不斷進步,其中一個大的趨勢是單位體積的存儲量愈來愈大。不過,隨着21世紀的到來,網絡日益發達和全球的一體化致使信息的大爆炸,對存儲量和存儲的速度有了更大的要求。縱然,現在的單碟SATA(Serial ATA)硬盤已經能夠達到幾個TB的容量,可是也遠遠沒法知足容量和速度上的需求。html

要解決這個問題,除了提升單碟的容量和存取速度之外,還能夠將多個磁盤進行組合,這就是RAID技術,即Redundant Array of Idependent Disks,中文名是由獨立的磁盤組成的具備冗餘特性的陣列——磁盤陣列。RAID做爲一種磁盤冗餘陣列,可以提供一個獨立的大型存儲設備解決方案。將幾個物理磁盤合併成一個更大的虛擬設備,在提升硬盤容量的同時,還可以充分提升硬盤的速度,使數據更加安全,更加易於磁盤的管理。算法

引言

若是咱們有一個須要很大容量,一塊硬盤存儲不了的數據,只能存儲到多個硬盤上,最簡單的思惟是:一塊硬盤一塊硬盤的讀取/存儲。數據庫

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

由於CPU和緩存的速度遠遠大於磁盤的讀取數據,所以咱們能夠將CPU數據讀/取請求按照順序給不一樣的磁盤,讓磁盤「同時」讀/寫數據,也就是下面的RAID 0.緩存

RAID 0

將連續的數據拆分紅block,分散將數據block的讀/寫請求給各個磁盤,達到「同時」讀/寫的目的。安全

也叫Stripe條帶模式。服務器

優勢:這種數據上的並行操做能夠充分利用總線的帶寬,顯著提升磁盤總體存取性能。由於讀取和寫入是在設備上並行完成的,讀取和寫入性能將會增長,網絡

缺點:沒有數據冗餘,若是其中一個磁盤Disk出現錯誤,將影響全部的讀/寫操做,而且不能從錯誤中恢復數據。併發

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

image

RAID 1

又稱爲鏡像(Mirroring),一個具備全冗餘的模式。

優勢:須要極高的可靠性和安全性。支持"熱替換",即不斷電的狀況下對故障磁盤進行更換。

缺點:其磁盤的利用率卻只有50%,是全部RAID級別中最低的。

image

RAID 1+0

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

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

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

image

優勢:兼顧了RAID0和RAID1的優勢,在可靠性和I/O性能上有保證。只要不是數據盤和對應的鏡像盤同時出現損壞,數據就能保證完整性,寫功能不會受到影響。若是損壞了其中一塊好比HDD0時,讀性能可能會稍微下降(讀取數據時能夠並行操做)。

缺點:從上圖能夠看出,須要分出一半的磁盤組做爲Mirror,所以空間利用率只有50%,成本大。

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

RAID 0+1

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

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

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

image

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表示數據傳輸正確)。那麼關係式以下:

image

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


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

image

根據原理,漢明碼有且僅能糾正一個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算法能夠只須要一塊校驗盤便可。

image

在一個磁盤陣列中,通常狀況下多於一個磁盤出現故障的概率是很小的,全部通常狀況下,RAID3的安全性仍是有保障的。

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

RAID 4

從RAID2和RAID3的設計來看,都是爲了儘可能達到全盤聯動,也就是說主要都是爲了提升數據傳輸率而設計的,可是確沒法作到併發IO。

然而,現實中例如數據庫等應用的特色就是高頻率隨機IO讀寫,例如每秒產生的IO數目很大,可是每一個IO請求的數據長度都很小。這種狀況下,若是全部的磁盤同一時刻都被一個IO佔用而且不能併發IO,只能一個IO一個IO的作,必然產生極大的浪費。

那麼,要實現併發IO,就須要保證有空閒的磁盤沒有被IO佔用,這樣才能讓其餘IO去佔有這個磁盤進訪問。要達到有有空閒磁盤的目的,那麼就須要增長每次讀/寫的容量,例如按塊(Block)存取。

image

RAID4對於寫IO有個很難克服的問題,那就是校驗盤的爭用。例如上圖A0-A3四個數據盤和一個校驗盤構成的RAID4系統中,某一時刻一個IO只佔用了A0和A1兩個磁盤和校驗盤,此時雖而後面兩塊磁盤是空閒的,能夠同時接受新的IO請求,可是接受了新的IO請求,則新的IO請求也要使用校驗盤。這樣就致使了校驗盤的爭用成爲併發的瓶頸。(動畫演示見http://storage-system.fujitsu.com/jp/term/raid/raid4_w.html

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

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

RAID 5

image

RAID 5+0

image

RAID 6

image

備註:

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

http://storage-system.fujitsu.com/jp/term/raid/raid0_w.html


參考文獻:

1. 大話雲存儲

2.RAID技術介紹和總結 http://blog.jobbole.com/83808/ 

3. http://www.cnblogs.com/PBDragon/archive/2012/10/09/2716573.html

相關文章
相關標籤/搜索