RAID技術介紹和總結

發表於2015-01-27

簡介

RAID是一個我們經常能見到的名詞。但卻因為很少能在實際環境中體驗,所以很難對其原理 能有很清楚的認識和掌握。本文將對RAID技術進行介紹和總結,以期能儘量闡明其概念。

RAID全稱為獨立磁碟冗餘陣列(Redundant Array of Independent Disks),基本思想就是把多個相對便宜的硬碟組合起來,成為一個硬碟陣列組,使效能達到甚至超過一個價格昂貴、 容量巨大的硬碟。RAID通常被用在伺服器電腦上,使用完全相同的硬碟組成一個邏輯扇區,因此作業系統只會把它當做一個硬碟。 RAID分為不同的等級,各個不同的等級均在資料可靠性及讀寫效能上做了不同的權衡。 在實際應用中,可以依據自己的實際需求選擇不同的RAID方案。

標準RAID

 

RAID 0

RAID0稱為條帶化(Striping)儲存,將資料分段儲存於 各個磁碟中,讀寫均可以並行處理。因此其讀寫速率為單個磁碟的N倍(N為組成RAID0的磁碟個數),但是卻沒有數 據冗餘,單個磁碟的損壞會導致資料的不可修復。 大多數striping的實現允許管理者通過調節兩個關鍵的引數來定義資料分段及寫入磁碟的 方式,這兩個引數對RAID0的效能有很重要的影響。

STRIPE WIDTH

stripe width是指可被並行寫入的 stripe 的個數,即等於磁碟陣列中磁碟的個數。

STRIPE SIZE

也可稱為block size(chunk sizestripe lengthgranularity),指寫入每個磁 盤的資料塊大小。以塊分段的RAID通常可允許選擇的塊大小從 2KB 到 512KB不等,也有更 高的,但一定要是2的指數倍。以位元組分段的(比如RAID3)一般的stripe size為1位元組或者 512位元組,並且使用者不能調整。 stripe size對效能的影響是很難簡單估量的,最好在實際應用中依自己需求多多調整並 觀察其影響。通常來說,減少stripe size,檔案會被分成更小的塊,傳輸資料會更快,但 是卻需要更多的磁碟來儲存,增加positioning performance,反之則相反。應該說,沒有 一個理論上的最優的值。很多時候,也要考慮磁碟控制器的策略,比如有的磁碟控制器會等 等到一定資料量才開始往磁碟寫入。

RAID 1

映象儲存(mirroring),沒有資料校驗。資料被同等地寫入兩個或多個磁碟中,可想而知,寫入速度會比較 慢,但讀取速度會比較快。讀取速度可以接近所有磁碟吞吐量的總和,寫入速度受限於最慢 的磁碟。 RAID1也是磁碟利用率最低的一個。如果用兩個不同大小的磁碟建立RAID1,可以用空間較小 的那一個,較大的磁碟多出來的部分可以作他用,不會浪費。

RAID 2

RAID0的改良版,加入了漢明碼(Hanmming Code)錯誤校驗。

漢明碼能夠檢測最多兩個同時發生的位元錯誤,並且能夠更正單一位元的錯誤。漢明碼的位 數與資料的位數有一個不等式關係,即:

P代表漢明碼的個數,D代表資料位的個數,比如4位資料需要3位漢明碼,7位資料需要4位漢 明碼,64位資料時就需要7位漢明碼。RAID2是按1bit來分割資料寫入的,而P:D就代表了資料 盤與校驗盤的個數。所以如果資料位寬越大,用於校驗的盤的比例就越小。由於漢明碼能夠 糾正單一位元的錯誤,所以當單個磁碟損壞時,漢明碼便能夠糾正資料。

RAID 2 因為每次讀寫都需要全組磁碟聯動,所以為了最大化其效能,最好保證每塊磁碟主 軸同步,使同一時刻每塊磁碟磁頭所處的扇區邏輯編號都一致,並存並取,達到最佳效能。 如果不能同步,則會產生等待,影響速度。

與RAID0相比,RAID2的傳輸率更好。因為RAID0一般stripe size相對於RAID2的1bit來說 實在太大,並不能保證每次都是多磁碟並行。而RAID2每次IO都能保證是多磁碟並行,為了 發揮這個優勢,磁碟的尋道時間一定要減少(尋道時間比資料傳輸時間要大幾個數量級),所 以RAID2適合於連續IO,大塊IO(比如視訊流服務)的情況。

RAID 3

類似於RAID2,資料條帶化(stripe)儲存於不同的硬碟,資料以位元組為單位,只是RAID3使用單塊磁碟儲存簡單的 奇偶校驗資訊,所以最終磁碟數量為 N+1 。當這N+1個硬碟中的其中一個硬碟出現故障時, 從其它N個硬碟中的資料也可以恢復原始資料,當更換一個新硬碟後,系統可以重新恢復完整 的校驗容錯資訊。

由於在一個硬碟陣列中,多於一個硬碟同時出現故障率的機率很小,所以一般情況下,使用 RAID3,安全性是可以得到保障的。RAID 3會把資料的寫入操作分散到多個磁碟上進行,不管是向哪一個資料盤寫入資料, 都需要同時重寫校驗盤中的相關資訊。因此,對於那些經常需要執行大量寫入操作的應用來 說,校驗盤的負載將會很大,無法滿足程式的執行速度,從而導致整個RAID系統效能的下降。 鑑於這種原因,RAID 3更加適合應用於那些寫入操作較少,讀取操作較多的應用環境,例如 資料庫和WEB伺服器等。

RAID 4

與RAID3類似,但RAID4是按塊(扇區)存取。無須像RAID3那樣,哪怕每一次小I/O操作也要涉 及全組,只需涉及組中兩塊硬碟(一塊資料盤,一塊校驗盤)即可,從而提高了小量資料 I/O速度。

RAID 5

奇偶校驗(XOR),資料以塊分段條帶化儲存。校驗資訊交叉地儲存在所有的資料盤上。

RAID5把資料和相對應的奇偶校驗資訊儲存到組成RAID5的各個磁碟上,並且奇偶校驗資訊和 相對應的資料分別儲存於不同的磁碟上,其中任意N-1塊磁碟上都儲存完整的資料,也就是 說有相當於一塊磁碟容量的空間用於儲存奇偶校驗資訊。因此當RAID5的一個磁碟發生損壞 後,不會影響資料的完整性,從而保證了資料安全。當損壞的磁碟被替換後,RAID還會自動 利用剩下奇偶校驗資訊去重建此磁碟上的資料,來保持RAID5的高可靠性。

RAID 5可以理解為是RAID 0和RAID 1的折衷方案。RAID 5可以為系統提供資料安全保障,但 保障程度要比映象低而磁碟空間利用率要比映象高。RAID 5具有和RAID 0相近似的資料讀取 速度,只是因為多了一個奇偶校驗資訊,寫入資料的速度相對單獨寫入一塊硬碟的速度略慢。

RAID 6

類似RAID5,但是增加了第二個獨立的奇偶校驗資訊塊,兩個獨立的奇偶系統使用不同的演算法, 資料的可靠性非常高,即使兩塊磁碟同時失效也不會影響資料的使用。但RAID 6需要分配給 奇偶校驗資訊更大的磁碟空間,相對於RAID 5有更大的“寫損失”,因此“寫效能”非常差。

由圖所知,每個硬碟上除了都有同級資料XOR校驗區外,還有一個針對每個資料 塊的XOR校驗區。當然,當前盤資料塊的校驗資料不可能存在當前盤而是交錯儲存的。從數 學角度來說,RAID 5使用一個方程式解出一個未知變數,而RAID 6則能通過兩個獨立的線性 方程構成方程組,從而恢復兩個未知資料。

伴隨著硬碟容量的增長,RAID6已經變得越來越重要。TB級別的硬碟上更容易造成資料丟失, 資料重建過程(比如RAID5,只允許一塊硬碟損壞)也越來越長,甚至到數週,這是完全不可接受的。而RAID6允許兩 塊硬碟同時發生故障,所以漸漸受到人們的青睞。

伴隨CD,DVD和藍光光碟的問世,儲存介質出現了擦除碼技術,即使媒介表面出現劃痕,仍然可以播放,大多數常見的擦除碼演算法已經演變為上世紀60年代麻省理工學院林肯實驗室開 發的Reed-Solomon碼。實際情況中,多數RAID6實現都採用了標準的RAID5教校驗位元和Reed-Solomon碼 。而純擦除碼演算法的使用使得RAID 6陣列可以失效兩塊以上的硬碟,保護力度更強,有些實現方法提供了多種級別的保護,甚至允許使用者(或儲存管理員)指定保護級別。

混合RAID

RAID 01

顧名思義,是RAID0和RAID1的結合。先做條帶(0),再做映象(1)。

RAID 10

同上,但是先做映象(1),再做條帶(0)

RAID01和RAID10非常相似,二者在讀寫效能上沒有什麼差別。但是在安全性上RAID10要好於 RAID01。如圖中所示,假設DISK0損壞,在RAID10中,在剩下的3塊盤中,只有當DISK1故障, 整個RAID才會失效。但在RAID01中,DISK0損壞後,左邊的條帶將無法讀取,在剩下的3快盤 中,只要DISK2或DISK3兩個盤中任何一個損壞,都會導致RAID失效。

RAID10和RAID5也是經常用來比較的兩種方案,二者都在生產實踐中得到了廣泛的應用。 RAID10安全性更高,但是空間利用率低。至於讀寫效能,與cache有很大關聯,最好根據實 際情況測試比較選擇。

非標準RAID

DRFS

DRFS,即DistributedRaidFileSystem,是一種嘗試將RAID與Hadoop的DFS結合起來的技術。 通常的HDFS在實踐中需要將replication factor設為3以保證資料完整性,而如果利用 RAID的stripepartity(奇偶校驗)技術,將資料分為多個塊,並且儲存各個塊的校驗信 息(XOR或擦除碼)。有了這些措施,塊的副本數就可以降低並且保證同樣的資料可靠性,就能節省相當一部 分的儲存空間。

DRFS包含以下幾個元件:

  • DRFS client: 提供應用程式訪問DRFS的介面,在發現讀取到的檔案有損壞時修復,整個操作對應用程式透明
  • RaidNode: 建立,維護檢驗檔案的daemon
  • BlockFixer: 週期性地檢查檔案,重新計算校驗和,修復檔案.
  • RaidShell: 類似於hadoop shell.
  • ErasureCode: 即DRFS所使用的生成校驗碼的演算法,可為XOR或者Reed-Solomon演算法。 XOR僅能建立一個校驗位元組,而Reed-Solomon則可以建立無數位(位數越多,能恢復的數 據也越多),如果使用Reed-Solomonreplication甚至可以降為1,缺點是降低了資料讀 寫的並行程度(只能從單機讀寫)。

實現

軟體實現

現在很都作業系統都提供了RAID的軟體實現,主要由以下幾個方面:

  • 由軟體在多個裝置上建立RAID,比如linux上的mdadm工具.具體使用方法可檢視參考連結中 的例子。
  • LVM或者Veritas,虛擬卷管理工具.
  • 檔案系統實現 :btrfsZFSGPFS.這些檔案都可以直接管理多個裝置上的資料,實 現了類似各級RAID的功能。
  • 在已有檔案系統之上提供資料校驗功能的RAID系統(RAID-F)

韌體/驅動實現

軟體實現並總是與系統的啟動程式相容,硬體實現(RAID控制器)總是太貴並且都是廠商專有的技術,所以 有了一中混合的實現:系統啟動時,由韌體(firmware)來實現RAID,系統啟動的差不多了,由驅動來管 理RAID。當然,這需要作業系統對這種驅動提供支援。

參考連結

  1. 維基百科 : RAID
  2. Stripe Width and Stripe Size
  3. RAID6
  4. DRFS
  5. HDFS and Erasure Codes
  6. Linux下的軟磁碟矩陣Software RAID實現步驟簡介
  7. Wiki: mdadm
  8. VxFS(Veritas File System)檔案系統簡介
  9. Linux LVM邏輯卷管理詳細介紹
  10. GPFS介紹
  11. RAID-F
  12. 基本的RAID介紹

相關文章