RAID(獨(dú)立冗余磁盤陣列)技術(shù)淺析
RAID技術(shù)的由來
人類自有活動(dòng)以來,就伴隨著信息的記錄和保存。原始社會(huì)的刻痕和結(jié)繩,到中國古代的竹簡和紙張,以及20世紀(jì)中期出現(xiàn)的磁帶,軟盤和硬盤。到了20世紀(jì)后期,隨著集成電路的飛速發(fā)展,固態(tài)硅芯片的出現(xiàn),代表有RAM芯片,F(xiàn)lash芯片,CPU芯片等。技術(shù)在不斷進(jìn)步,其中一個(gè)大的趨勢是單位體積的存儲量越來越大。不過,隨著21世紀(jì)的到來,網(wǎng)絡(luò)日益發(fā)達(dá)和全球的一體化導(dǎo)致信息的大爆炸,對存儲量和存儲的速度有了更大的要求。縱然,如今的單碟SATA(Serial ATA)硬盤已經(jīng)可以達(dá)到幾個(gè)TB的容量,但是也遠(yuǎn)遠(yuǎn)無法滿足容量和速度上的需求。
要解決這個(gè)問題,除了提高單碟的容量和存取速度以外,還可以將多個(gè)磁盤進(jìn)行組合,這就是RAID技術(shù),即Redundant Array of Idependent Disks,中文名是由獨(dú)立的磁盤組成的具有冗余特性的陣列——磁盤陣列。RAID作為一種磁盤冗余陣列,能夠提供一個(gè)獨(dú)立的大型存儲設(shè)備解決方案。將幾個(gè)物理磁盤合并成一個(gè)更大的虛擬設(shè)備,在提高硬盤容量的同時(shí),還能夠充分提高硬盤的速度,使數(shù)據(jù)更加安全,更加易于磁盤的管理。
引言
如果我們有一個(gè)需要很大容量,一塊硬盤存儲不了的數(shù)據(jù),只能存儲到多個(gè)硬盤上,最簡單的思維是:一塊硬盤一塊硬盤的讀取/存儲。
很顯然,這樣單純的堆積法雖然解決了容量的問題,但是也帶來的浪費(fèi),因?yàn)橐淮沃皇菑囊粔K硬盤上進(jìn)行讀/寫,同時(shí),單塊硬盤的讀取速度,也是整個(gè)磁盤組合的讀取速度。
因?yàn)镃PU和緩存的速度遠(yuǎn)遠(yuǎn)大于磁盤的讀取數(shù)據(jù),因此我們可以將CPU數(shù)據(jù)讀/取請求按照順序給不同的磁盤,讓磁盤“同時(shí)”讀/寫數(shù)據(jù),也就是下面的RAID 0.
RAID 0
將連續(xù)的數(shù)據(jù)拆分成block,分散將數(shù)據(jù)block的讀/寫請求給各個(gè)磁盤,達(dá)到“同時(shí)”讀/寫的目的。
也叫Stripe條帶模式。
- 優(yōu)點(diǎn):這種數(shù)據(jù)上的并行操作可以充分利用總線的帶寬,顯著提高磁盤整體存取性能。因?yàn)樽x取和寫入是在設(shè)備上并行完成的,讀取和寫入性能將會(huì)增加,
- 缺點(diǎn):沒有數(shù)據(jù)冗余,如果其中一個(gè)磁盤Disk出現(xiàn)錯(cuò)誤,將影響所有的讀/寫操作,并且不能從錯(cuò)誤中恢復(fù)數(shù)據(jù)。
P.S.磁盤上只有實(shí)實(shí)在在的扇區(qū)結(jié)構(gòu),并沒有什么Stripe結(jié)構(gòu),Stripe只是一種邏輯上由程序根據(jù)某種算法實(shí)現(xiàn)的一種的概念。Stripe后的多個(gè)硬盤,數(shù)據(jù)是被并行寫入磁盤的,而不是只有寫滿了一個(gè)磁盤的Stripe區(qū)域后,再寫下個(gè)磁盤的Stripe區(qū)域。
RAID 1
又稱為鏡像(Mirroring),一個(gè)具有全冗余的模式。
- 優(yōu)點(diǎn):需要極高的可靠性和安全性。支持"熱替換",即不斷電的情況下對故障磁盤進(jìn)行更換。
- 缺點(diǎn):其磁盤的利用率卻只有50%,是所有RAID級別中***的。
RAID 1+0
先做鏡像(1),再做條帶(0)。
比如,有HDD0~HDD7共7個(gè)磁盤,其中HDD0~HDD3是數(shù)據(jù)盤,HDD4~HDD7是對應(yīng)的鏡像盤。同時(shí),有”ABCD”四個(gè)數(shù)據(jù)的磁盤寫請求。
當(dāng)數(shù)據(jù)A的寫請求在磁盤HDD0上執(zhí)行時(shí),就在對應(yīng)的鏡像盤HDD4中進(jìn)行鏡像A’。與此同時(shí),按照與數(shù)據(jù)A類似的步驟,并行在相應(yīng)磁盤中寫入數(shù)據(jù)B、數(shù)據(jù)C和數(shù)據(jù)D。
- 優(yōu)點(diǎn):兼顧了RAID0和RAID1的優(yōu)點(diǎn),在可靠性和I/O性能上有保證。只要不是數(shù)據(jù)盤和對應(yīng)的鏡像盤同時(shí)出現(xiàn)損壞,數(shù)據(jù)就能保證完整性,寫功能不會(huì)受到影響。如果損壞了其中一塊比如HDD0時(shí),讀性能可能會(huì)稍微降低(讀取數(shù)據(jù)時(shí)可以并行操作)。
- 缺點(diǎn):從上圖可以看出,需要分出一半的磁盤組作為Mirror,因此空間利用率只有50%,成本大。
RAID1+0 由于兼具可靠性和好的性能, 在商業(yè)應(yīng)用中很廣泛,常應(yīng)用于數(shù)據(jù)庫等要求安全性,小數(shù)據(jù)頻繁寫的場合。
RAID 0+1
先做條帶(0),再做鏡像(1)。
先對數(shù)據(jù)進(jìn)行RAID 0條帶化,然后將Stripe后的數(shù)據(jù)進(jìn)行備份。
RAID01幾乎不會(huì)在實(shí)際環(huán)境中應(yīng)用,因?yàn)镽AID0+1和RAID1+0在讀取效率上沒有差異,但是RAID0+1在安全性和可靠性低。
RAID 2
可以認(rèn)為是RAID0的改進(jìn)版,加入了漢明碼(Hanmming Code)錯(cuò)誤校驗(yàn)。
漢明碼(Hamming Code)是一種能夠自動(dòng)檢測并糾正一位錯(cuò)碼的線性糾錯(cuò)碼,即SEC(Single Error Correcting)碼。漢明碼通過在要傳輸?shù)臄?shù)據(jù)位中增加一些bit作為校驗(yàn)位,可以驗(yàn)證數(shù)據(jù)的有效性。
漢明碼的原理舉例說明,如果傳輸?shù)臄?shù)據(jù)位數(shù)為k,使用的校驗(yàn)位的位數(shù)為r,組成一個(gè)n=k+r位數(shù)的漢明碼。為了能夠發(fā)現(xiàn)這n位數(shù)的數(shù)據(jù)在傳輸給后端時(shí)是否出錯(cuò),并且能夠指明是那一位數(shù)據(jù)出錯(cuò),那么r位的校驗(yàn)位至少能夠代表k+r+1個(gè)狀態(tài)(k+r表明出錯(cuò)的位置,其中多出來的1表示數(shù)據(jù)傳輸正確)。那么關(guān)系式如下:
也是就是說,如果要傳輸k=4位數(shù)據(jù)位,根據(jù)算式(1) 必須則校驗(yàn)位r≥3,如果用r=3作為校驗(yàn)位數(shù),那么總共傳輸?shù)臄?shù)據(jù)位數(shù)n=k+r=7。
RAID就是利用了漢明碼的原理,使用校驗(yàn)磁盤作為錯(cuò)誤檢查和糾正ECC(Error Correcting Code)盤。如下圖,A0-A3四個(gè)盤是數(shù)據(jù)盤,Ax-Az三個(gè)盤是校驗(yàn)盤。
根據(jù)原理,漢明碼有且僅能糾正一個(gè)Bit的錯(cuò)誤,并且因?yàn)樾r?yàn)的原因,校驗(yàn)位和數(shù)據(jù)位需要一同并行寫人或讀取(例如,A0-A3,Ax-Az的磁盤需要并行聯(lián)動(dòng))
RAID2技術(shù)過于極端,目前基本已經(jīng)被淘汰了。根據(jù)原理,RAID2需要在IO數(shù)據(jù)到來之后,控制器將數(shù)據(jù)按Bit分開,順序并同時(shí)在每個(gè)數(shù)據(jù)盤和相應(yīng)校驗(yàn)盤中存放1Bit,而磁盤上的IO最小單位是扇區(qū)512B,那么如何確保寫入1Bit并且不至于浪費(fèi)過多空間的算法就很復(fù)雜。此外,需要占用相對較多的校驗(yàn)盤也是原因之一,雖然隨著數(shù)據(jù)盤的增加,校驗(yàn)盤的數(shù)量會(huì)呈指數(shù)下降。
RAID 3
RAID 2的缺點(diǎn)主要是將數(shù)據(jù)以bit位作為單位來分割,將原本物理連續(xù)的扇區(qū)轉(zhuǎn)變成了物理不連續(xù)、邏輯連續(xù)的,這樣導(dǎo)致效率低下。RAID3 就準(zhǔn)備從根本上就絕這個(gè)問題。
RAID3保留了RAID2的一些優(yōu)點(diǎn),比如多磁盤同時(shí)聯(lián)動(dòng),性能高(利用將一個(gè)IO盡量做到能夠分割成小塊,讓每個(gè)磁盤能夠參與工作)。不過RAID3放棄了將數(shù)據(jù)分割成Bit這么極端的做法,因?yàn)檫@樣就將磁盤扇區(qū)的物理連續(xù)性打破了。RAID3將數(shù)據(jù)以一個(gè)扇區(qū)(512B)或者幾個(gè)扇區(qū)(例如4KB)作為單位來分割數(shù)據(jù)。此外,RAID3也放棄了使用漢明碼來校驗(yàn),取而代之的是XOR校驗(yàn)算法。XOR校驗(yàn)算法只能判斷數(shù)據(jù)是否有誤,不能判斷出有那一位有誤,更不能更正錯(cuò)誤,但是XOR算法可以只需要一塊校驗(yàn)盤即可。
在一個(gè)磁盤陣列中,一般情況下多于一個(gè)磁盤出現(xiàn)故障的幾率是很小的,所有一般情況下,RAID3的安全性還是有保障的。
同RAID2一樣,由于需要多磁盤同時(shí)聯(lián)動(dòng),同時(shí)還需要校驗(yàn)。顯然,RAID3不適用于有大量寫操作的情況,因?yàn)檫@樣會(huì)使得校驗(yàn)盤的負(fù)荷較大,降低RAID系統(tǒng)的性能。RAID3 常用于寫操作較少,讀操作較多的應(yīng)用環(huán)境,比如數(shù)據(jù)庫和WEB服務(wù)器。
RAID 4
從RAID2和RAID3的設(shè)計(jì)來看,都是為了盡量達(dá)到全盤聯(lián)動(dòng),也就是說主要都是為了提高數(shù)據(jù)傳輸率而設(shè)計(jì)的,但是確無法做到并發(fā)IO。
然而,現(xiàn)實(shí)中例如數(shù)據(jù)庫等應(yīng)用的特點(diǎn)就是高頻率隨機(jī)IO讀寫,例如每秒產(chǎn)生的IO數(shù)目很大,但是每個(gè)IO請求的數(shù)據(jù)長度都很小。這種情況下,如果所有的磁盤同一時(shí)刻都被一個(gè)IO占用并且不能并發(fā)IO,只能一個(gè)IO一個(gè)IO的做,必然產(chǎn)生極大的浪費(fèi)。
那么,要實(shí)現(xiàn)并發(fā)IO,就需要保證有空閑的磁盤沒有被IO占用,這樣才能讓其他IO去占有這個(gè)磁盤進(jìn)訪問。要達(dá)到有有空閑磁盤的目的,那么就需要增加每次讀/寫的容量,例如按塊(Block)存取。
RAID4對于寫IO有個(gè)很難克服的問題,那就是校驗(yàn)盤的爭用。例如上圖A0-A3四個(gè)數(shù)據(jù)盤和一個(gè)校驗(yàn)盤構(gòu)成的RAID4系統(tǒng)中,某一時(shí)刻一個(gè)IO只占用了A0和A1兩個(gè)磁盤和校驗(yàn)盤,此時(shí)雖然后面兩塊磁盤是空閑的,可以同時(shí)接受新的IO請求,但是接受了新的IO請求,則新的IO請求也要使用校驗(yàn)盤。這樣就導(dǎo)致了校驗(yàn)盤的爭用成為并發(fā)的瓶頸。(動(dòng)畫演示見http://storage-system.fujitsu...)
基于這個(gè)原因,需要特別優(yōu)化請求的IO數(shù)據(jù),才能高效使用RAID4。然而,要優(yōu)化到并發(fā)幾率很高很不容易,目前只有NetApp的WAFL文件系統(tǒng)還在使用RAID4,其他產(chǎn)品均未使用了。
RAID4面臨淘汰,取而代之的是擁有高盲并發(fā)幾率的RAID5系統(tǒng)。所謂的高盲并發(fā)幾率,就是上層文件系統(tǒng)不用感知下層磁盤的結(jié)構(gòu),即可增加并發(fā)的幾率。
RAID 5
RAID 5+0
RAID 6
備注:
關(guān)于RAID的介紹中動(dòng)畫的網(wǎng)站http://storage-system.fujitsu...