全面介紹磁盤陣列 RAID 技術(shù)
1. 概述
磁盤陣列(Redundant Arrays of Independent Drives,RAID),簡單地說,就是講若干塊獨立磁盤構(gòu)成具有冗余能力的陣列。
他將很多塊磁盤組合到一起構(gòu)成一個磁盤組,來提升整個磁盤系統(tǒng)的讀寫性能及安全性。
利用同位檢查(Parity Check)的觀念,通過數(shù)據(jù)冗余實現(xiàn)磁盤系統(tǒng)中任何一個磁盤故障時整個磁盤系統(tǒng)仍然可以繼續(xù)工作。
對于服務器開發(fā)和運維人員,RAID 是必須了解和使用的磁盤系統(tǒng)管理方式,隨著時代的進步,越來越多的人在家庭、日常工作中使用簡單的磁盤陣列來增加磁盤讀寫性能或提高數(shù)據(jù)安全性,甚至一些主板都已經(jīng)提供了支持 RAID 的功能。
然而,RAID 概念很多,有時候會引起混淆,本文我們來詳細介紹一下 RAID 技術(shù)的概念特征、基本原理、關鍵技術(shù)、各種等級和發(fā)展現(xiàn)狀等方面的內(nèi)容。
圖片來自包圖網(wǎng)
2. RAID
RAID 是 1988 年美國加州大學伯克利分校的 D. A. Patterson 教授等首次在論文中提出的,起初,RAID 指的是廉價磁盤陣列,主要目的是為了節(jié)省購置大容量磁盤的成本,此后,RAID 咨詢委員會將 Inexpensive 替換為 Independent 就是我們今日的 RAID,但其實質(zhì)內(nèi)容并沒有改變。
RAID 主要利用數(shù)據(jù)條帶、鏡像和數(shù)據(jù)校驗技術(shù)來獲取高性能、可靠性、容錯能力和擴展性,根據(jù)運用或組合運用這三種技術(shù)的策略和架構(gòu),擁有 RAID0 ~ RAID6 等的等級,近年來,存儲廠商不斷推出諸如 RAID7 、 RAID10/01 、 RAID50 、 RAID53 、 RAID100 等 RAID 等級,但這些并無統(tǒng)一的標準。
目前業(yè)界公認的標準是 RAID0 ~ RAID5 ,除 RAID2 外的四個等級被定為工業(yè)標準,而在實際應用領域中使用最多的 RAID 等級是 RAID0 、 RAID1 、 RAID3 、 RAID5 、 RAID6 和 RAID10。
從實現(xiàn)角度看, RAID 主要分為軟 RAID、硬 RAID 以及軟硬混合 RAID 三種。軟 RAID 所有功能均有操作系統(tǒng)和 CPU 來完成,沒有獨立的 RAID 控制 / 處理芯片和 I/O 處理芯片,效率自然最低。硬 RAID 配備了專門的 RAID 控制 / 處理芯片和 I/O 處理芯片以及陣列緩沖,不占用 CPU 資源,但成本很高。軟硬混合 RAID 具備 RAID 控制 / 處理芯片,但缺乏 I/O 處理芯片,需要 CPU 和驅(qū)動程序來完成,性能和成本 在軟 RAID 和硬 RAID 之間。
目前來看,廣泛采用的是以硬 RAID 為主的方式來實現(xiàn) RAID,但各操作系統(tǒng)也都在不同程度上支持某些級別的軟 RAID。
3. RAID 的關鍵技術(shù)
RAID 主要有三個關鍵技術(shù):
1. 鏡像(Mirroring)
2. 數(shù)據(jù)條帶(Data Stripping)
3. 校驗(Data Parity)
不同的 RAID 級別會采用上述一到多個技術(shù)來獲得不同的數(shù)據(jù)可靠性、可用性或IO性能。
3.1. 鏡像
鏡像技術(shù)指的是將數(shù)據(jù)復制到多個磁盤,這樣,在實際的使用中,只要有一個磁盤沒有發(fā)生故障,都不影響整個磁盤系統(tǒng)的工作。
同時,并發(fā)地在多個磁盤上讀取也可以提高讀取性能,但是,相對的,鏡像技術(shù)的寫性能相對較低,每次寫入都必須確保多個磁盤寫成功。
3.2. 數(shù)據(jù)條帶
將數(shù)據(jù)分片保存在多個不同的磁盤,多個數(shù)據(jù)分片共同組成一個完整數(shù)據(jù)副本。
這與鏡像的多個副本是不同的,它通常用于性能考慮。
數(shù)據(jù)條帶具有更高的并發(fā)粒度,當訪問數(shù)據(jù)時,可以同時對位于不同磁盤上數(shù)據(jù)進行讀寫操作, 從而獲得非常可觀的 I/O 性能提升。
3.3. 數(shù)據(jù)校驗
利用冗余數(shù)據(jù)進行數(shù)據(jù)錯誤檢測和修復的技術(shù)。
冗余數(shù)據(jù)通常采用海明碼、異或操作等算法來計算獲得。
利用校驗功能,可以很大程度上提高磁盤陣列的可靠性、魯棒性和容錯能力。
比起鏡像 50% 的冗余開銷 ,數(shù)據(jù)校驗要小很多,它利用校驗冗余信息對數(shù)據(jù)進行校驗和糾錯。
不過,數(shù)據(jù)校驗需要從多處讀取數(shù)據(jù)并進行計算和對比,會影響系統(tǒng)性能。
4. RAID 的優(yōu)勢
通過上面的介紹,RAID 技術(shù)的優(yōu)勢已經(jīng)呼之欲出,總的來說主要有以下優(yōu)勢。
4.1. 大容量
顯然,由多個磁盤組成的 RAID 磁盤系統(tǒng)具有海量磁盤存儲空間。
目前還找不到 PB 級的單塊硬盤,但我們卻可以通過 RAID 組成 PB 級的磁盤系統(tǒng)。
但是一般來說,由于 RAID 需要一定的冗余開銷,RAID 可用容量要小于所有成員磁盤的總?cè)萘俊?/p>
通常, RAID 容量利用率在 50% ~ 90% 之間。
4.2. 高性能
RAID 的一個重要特征是對多塊磁盤的并發(fā)讀寫,從而可以很大程度的提高 IO 性能,甚至可以達到幾倍于單塊磁盤的性能。
4.3. 可靠性
可靠性和可用性是 RAID 的一個重要特征。
由于數(shù)據(jù)冗余,可以讓一塊甚至多塊磁盤在發(fā)生故障時都不影響整個磁盤系統(tǒng)的工作。
雖然磁盤的增加提高了出現(xiàn)故障的可能,但卻讓整個磁盤系統(tǒng)的可靠性大幅提升。
4.4. 可管理性
RAID 通過虛擬化技術(shù),將多個物理磁盤驅(qū)動器虛擬成一個大容量邏輯驅(qū)動器,對于外部主機系統(tǒng)來說,單一的大容量磁盤驅(qū)動器的管理成本是遠遠低于多個磁盤驅(qū)動器的。
從用戶應用的角度看,存儲系統(tǒng)也變得簡單易用。
5. 標準 RAID 等級
5.1. JBOD
JBOD 即 Just a Bunch Of Disks,他并不是標準的 RAID 等級。
它通常用來表示一個沒有控制軟件提供協(xié)調(diào)控制的磁盤集合,將多個物理磁盤串聯(lián)起來,提供一個巨大的邏輯磁盤。
JBOD 的存放機制是由第一塊磁盤開始按順序往后存儲,當前磁盤存儲空間用完后,再依次往后面的磁盤存儲數(shù)據(jù)。
它的存儲性能完全等同于單塊磁盤,而且也不提供數(shù)據(jù)安全保護,只是簡單提供一種擴展存儲空間的機制, JBOD 可用存儲容量等于所有成員磁盤的存儲空間之和。
目前很多人在家用 PC 機上組裝出 JBOD 陣列用來將若干塊小磁盤合并為一個單一邏輯磁盤從而降低磁盤的管理成本。

5.2. RAID0
RAID 是一種簡單、無數(shù)據(jù)冗余的數(shù)據(jù)帶化技術(shù),實際上它并不算是一種真正的 RAID,因為他不提供任何形式的冗余策略。
RAID0 將所在磁盤條帶化后組成大容量存儲空間,將數(shù)據(jù)分散存儲在所有磁盤中,以獨立訪問方式實現(xiàn)多塊磁盤的并發(fā)訪問。
由于可以并發(fā)執(zhí)行 I/O 操作,總線帶寬得到充分利用。再加上不需要進行數(shù)據(jù)校驗,RAID0 的性能在所有 RAID 等級中是最高的。
理論上講,一個由 n 塊磁盤組成的 RAID0 ,它的讀寫性能是單個磁盤性能的 n 倍,但由于總線帶寬等多種因素的限制,實際的性能提升低于理論值。
RAID0 具有低成本、高讀寫性能、 100% 的高存儲空間利用率等優(yōu)點,但是它不提供數(shù)據(jù)冗余保護,一旦數(shù)據(jù)損壞,將無法恢復。 因此, RAID0 一般適用于對性能要求嚴格但對數(shù)據(jù)安全性和可靠性不高的應用,如視頻、音頻存儲、臨時數(shù)據(jù)緩存空間等。
很多個人或家庭用戶通過將 HDD 磁盤組成 RAID0 磁盤陣列追求與 SSD 接近的讀寫性能。

5.3. RAID1
RAID1 稱為鏡像,它將數(shù)據(jù)完全一致地分別寫到工作磁盤和鏡像 磁盤,它的磁盤空間利用率為 50%
RAID1 在數(shù)據(jù)寫入時,響應時間會有所影響,但是讀數(shù)據(jù)的時候沒有影響。
RAID1 提供了最佳的數(shù)據(jù)保護,一旦工作磁盤發(fā)生故障,系統(tǒng)自動從鏡像磁盤讀取數(shù)據(jù),不會影響用戶工作。
RAID1 與 RAID0 剛好相反,是為了增強數(shù)據(jù)安全性使兩塊 磁盤數(shù)據(jù)呈現(xiàn)完全鏡像,從而達到安全性好、技術(shù)簡單、管理方便。 RAID1 擁有完全容錯的能力,但實現(xiàn)成本高。
RAID1 應用于對順序讀寫性能要求高以及對數(shù)據(jù)保護極為重視的應用,如對郵件系統(tǒng)的數(shù)據(jù)保護。
5.4. RAID2
RAID2 稱為糾錯海明碼磁盤陣列,其設計思想是利用海明碼實現(xiàn)數(shù)據(jù)校驗冗余。
海明碼是一種在原始數(shù)據(jù)中加入若干校驗碼來進行錯誤檢測和糾正的編碼技術(shù),其中第 2n 位( 1, 2, 4, 8, … )是校驗碼,其他位置是數(shù)據(jù)碼。
因此在 RAID2 中,數(shù)據(jù)按位存儲,每塊磁盤存儲一位數(shù)據(jù)編碼,磁盤數(shù)量取決于所設定的數(shù)據(jù)存儲寬度,可由用戶設定。
下圖為數(shù)據(jù)寬度為 4 的 RAID2 ,它需要 4 塊數(shù)據(jù)磁盤和 3 塊校驗磁盤。如果是 64 位數(shù)據(jù)寬度,則需要 64 塊 數(shù)據(jù)磁盤和 7 塊校驗磁盤,可見, RAID2 的數(shù)據(jù)寬度越大,存儲空間利用率越高,但同時需要的磁盤數(shù)量也越多。
海明碼自身具備糾錯能力,因此 RAID2 可以在數(shù)據(jù)發(fā)生錯誤的情況下對糾正錯誤,保證數(shù)據(jù)的安全性。它的數(shù)據(jù)傳輸性能相當高,設計復雜性雖然高于 RAID0 和 RAID1,但要低于后面介紹的 RAID3 、 RAID4 和 RAID5。
但是,海明碼的數(shù)據(jù)冗余開銷太大,而且 RAID2 的數(shù)據(jù)輸出性能受陣列中最慢磁盤驅(qū)動器的限制。再者,海明碼是按位運算, RAID2 數(shù)據(jù)重建非常耗時。由于這些顯著的缺陷,再加上大部分磁盤驅(qū)動器本身都具備了糾錯功能,因此 RAID2 在實際中很少應用,沒有形成商業(yè)產(chǎn)品,目前主流存儲磁盤陣列均不提供 RAID2 支持。
5.5. RAID3
RAID3 是把數(shù)據(jù)按位分散,存放在N個硬盤上,而第N+1個硬盤上存儲的數(shù)據(jù)是校驗容錯信息。
當這 N+1 個硬盤中的其中一個硬盤出現(xiàn)故障時,從其它 N 個硬盤中的數(shù)據(jù)也可以恢復原始數(shù)據(jù),當更換一個新硬盤后,系統(tǒng)可以重新恢復完整的校驗容錯信息。
雖然 RAID3 的數(shù)據(jù)存取方式與 RAID2 一樣是將數(shù)據(jù)按位為單位分散在各個磁盤上,但它的校驗算法由海明碼改為了 XOR 算法,因此他只需要一個額外的校驗盤,空間利用率更高。
在數(shù)據(jù)完好的情況下,其讀性能與 RAID0 完全一致,并行從多個磁盤條帶讀取數(shù)據(jù),性能非常高,但是寫操作需要進行寫數(shù)據(jù)塊、讀取同條帶的數(shù)據(jù)塊、計算校驗值、寫入校驗值等多個操作,系統(tǒng)開銷非常大,性能較低。
RAID3 擁有很高的讀性能和較差的寫性能,因此適用大容量數(shù)據(jù)的順序訪問應用,如影像處理、流媒體服務等。
但是,因為 RAID3 在出現(xiàn)壞盤時性能會大幅下降,因此常使用 RAID5 替代 RAID3 來運行具有持續(xù)性、高帶寬、大量讀寫特征的應用。
5.6. RAID4
RAID4 與 RAID3 的原理大致相同,數(shù)據(jù)都是依次存儲在多個硬盤之上,奇偶校驗碼存放在獨立的奇偶校驗盤上,唯一不同的是,在數(shù)據(jù)分割上RAID3對數(shù)據(jù)的訪問是按位進行的,RAID4是以數(shù)據(jù)塊為單位。
一個數(shù)據(jù)塊是一個完整的數(shù)據(jù)集合,比如一個文件就是一個典型的數(shù)據(jù)塊。當然,對于硬盤的讀取,一個數(shù)據(jù)塊并不是一個文件,而是由操作系統(tǒng)所決定的,這就是我們熟悉的簇(Cluster)
不過,在不同硬盤上的同級數(shù)據(jù)塊也都通過 XOR 進行校驗,結(jié)果保存在單獨的校驗盤,所謂同級的概念就是指在每個硬盤中同一柱面同一扇區(qū)位置的數(shù)據(jù)算是同級。在寫入時,RAID 就是按這個方法把各硬盤上同級數(shù)據(jù)的校驗統(tǒng)一寫入校驗盤,等讀取時再即時進行校驗。因此即使是當前硬盤上的數(shù)據(jù)塊損壞,也可以通過 XOR 校驗值和其他硬盤上的同級數(shù)據(jù)進行恢復。
RAID4 寫一個數(shù)據(jù)塊操作只需要寫數(shù)據(jù)盤和校驗盤兩個磁盤,因此性能要高于 RAID3,但是由于其每次寫操作仍然必須讀取所有同條帶的數(shù)據(jù)塊、計算校驗值、寫入校驗值等多個操作,寫性能仍然較低,同時并發(fā)寫入情況下,單塊校驗磁盤壓力過大,而且隨著成員磁盤數(shù)量的增加,校驗盤的系統(tǒng)瓶頸將更加突出,因此 RAID4 在實際應用中很少見。
5.7. RAID5
RAID5 是目前最為廣泛使用的 RAID 等級,它的原理與 RAID4 相似,區(qū)別在于校驗數(shù)據(jù)分布在陣列中的所有磁盤上,而沒有采用專門的校驗磁盤。對于數(shù)據(jù)和校驗數(shù)據(jù),它們的寫操作可以同時發(fā)生在完全不同的磁盤上。因此, RAID5 不存在 RAID3、RAID4 中的并發(fā)寫操作時的校驗盤性能瓶頸問題。
另外, RAID5 還具備很好的擴展性。當陣列磁盤 數(shù)量增加時,并行操作量的能力也隨之增長,可比 RAID4 支持更多的磁盤,從而擁有更高的容量以及更高的性能。
RAID5 的磁盤上同時存儲數(shù)據(jù)和校驗數(shù)據(jù),數(shù)據(jù)塊和對應的校驗信息存保存在不同的磁盤上,當一個數(shù)據(jù)盤損壞時,系統(tǒng)可以根據(jù)同一條帶的其他數(shù)據(jù)塊和對應的校驗數(shù)據(jù)來重建損壞的數(shù)據(jù)。與其他 RAID 等級一樣,重建數(shù)據(jù)時, RAID5 的性能會受到較大的影響。
RAID5 兼顧存儲性能、數(shù)據(jù)安全和存儲成本等各方面因素,它可以理解為 RAID0 和 RAID1 的折中方案,是目前綜合性能最佳的數(shù)據(jù)保護解決方案。 RAID5 基本上可以滿足大部分的存儲應用需求,數(shù)據(jù)中心大多采用它作為應用數(shù)據(jù)的保護方案。
5.8. RAID6
前面所述的各個 RAID 等級都只能保護因單個磁盤失效而造成的數(shù)據(jù)丟失。如果兩個磁盤同時發(fā)生故障,數(shù)據(jù)將無法恢復。
RAID6 引入雙重校驗的概念,它可以保護陣列中同時出現(xiàn)兩個磁盤失效時,陣列仍能夠繼續(xù)工作,不會發(fā)生數(shù)據(jù)丟失。 RAID6 等級是在 RAID5 的基礎上為了進一步增強數(shù)據(jù)保護而設計的一種 RAID 方式,它可以看作是一種擴展的 RAID5 等級。
RAID6 不僅要支持數(shù)據(jù)的恢復,還要支持校驗數(shù)據(jù)的恢復,因此實現(xiàn)代價很高,控制器的設計也比其他等級更復雜、更昂貴。
RAID6 思想最常見的實現(xiàn)方式是采用兩個獨立的校驗算法,假設稱為 P 和 Q ,校驗數(shù)據(jù)可以分別存儲在兩個不同的校驗盤上,或者分散存儲在所有成員磁盤中。當兩個磁盤同時失效時,即可通過求解兩元方程來重建兩個磁盤上的數(shù)據(jù)。
RAID6 具有快速的讀取性能、更高的容錯能力。但是,它的成本要高于 RAID5 許多,寫性能也較差,并有設計和實施非常復雜。因此, RAID6 很少得到實際應用,主要用于對數(shù)據(jù)安全等級要求非常高的場合。它一般是替代 RAID10 方案的經(jīng)濟性選擇。
6. RAID 組合等級
標準 RAID 等級各有優(yōu)勢和不足,但如果將多個 RAID 等級組合起來,實現(xiàn)優(yōu)勢互補,彌補相互的不足,就可以達到在性能、數(shù)據(jù)安全性等指標上更高的 RAID 系統(tǒng)。
目前在業(yè)界和學術(shù)研究中提到的 RAID 組合等級主要有 RAID00 、 RAID01 、 RAID10 、 RAID100 、 RAID30 、 RAID50 、 RAID53 、 RAID60 ,但實際得到較為廣泛應用的只有 RAID01 和 RAID10 兩個等級。當然,組合等級的實現(xiàn)成本一般都非常昂貴,只是在 少數(shù)特定場合應用。
下面兩張圖是 RAID01 和 RAID10 的示意圖,他們將數(shù)據(jù)條帶化與鏡像結(jié)合,兼顧了性能和安全性,是比較常見和被廣泛應用的組合方案。
進一步的,還可以組合成為 RAID 100,進一步提高讀寫性能,也可以將 RAID3、RAID5、RAID6 與 RAID0 相組合形成性能較強的磁盤系統(tǒng)。
7. RAID 使用選擇
RAID 等級比較
然而,當前的 RAID 技術(shù)仍然存在諸多不足,各種 RAID 模式都存在自身的缺陷,主要集中在讀寫性能、實現(xiàn)成本、恢復時間窗口、多磁盤損壞等方面。因此, RAID 技術(shù)顯然還存在很大的提升空間,具有很大的發(fā)展?jié)摿Α?/p>