raid是一個我們經常能見到的名詞。但卻因為很少能在實際環境中體驗,是以很難對其原理 能有很清楚的認識和掌握。本文将對raid技術進行介紹和總結,以期能盡量闡明其概念。
raid全稱為獨立磁盤備援陣列(rdeundant array of independent disks),基本思想就是把 多個相對便宜的硬碟組合起來,成為一個硬碟陣列組,使性能達到甚至超過一個價格昂貴、 容量巨大的硬碟。raid通常被用在伺服器電腦上,使用完全相同的硬碟組成一個邏輯扇區, 是以作業系統隻會把它當做一個硬碟。
raid分為不同的等級,各個不同的等級均在資料可靠性及讀寫性能上做了不同的權衡。 在實際應用中,可以依據自己的實際需求選擇不同的raid方案。
<a target="_blank"></a>
raid0稱為條帶化(striping)存儲,将資料分段存儲于 各個磁盤中,讀寫均可以并行處理。是以其讀寫速率為單個磁盤的n倍(n為組成raid0的磁盤個數),但是卻沒有數 據備援,單個磁盤的損壞會導緻資料的不可修複。
raid0
大多數striping的實作允許管理者通過調節兩個關鍵的參數來定義資料分段及寫入磁盤的 方式,這兩個參數對raid0的性能有很重要的影響。
stripe width是指可被并行寫入的 stripe 的個數,即等于磁盤陣列中磁盤的個數。
也可稱為 block size(chunk size,stripe length,granularity),指寫入每個磁 盤的資料塊大小。以塊分段的raid通常可允許選擇的塊大小從 2kb 到 512kb不等,也有更 高的,但一定要是2的指數倍。以位元組分段的(比如raid3)一般的stripe size為1位元組或者 512位元組,并且使用者不能調整。
stripe size對性能的影響是很難簡單估量的,最好在實際應用中依自己需求多多調整并 觀察其影響。通常來說,減少stripe size,檔案會被分成更小的塊,傳輸資料會更快,但 是卻需要更多的磁盤來儲存,增加positioning performance,反之則相反。應該說,沒有 一個理論上的最優的值。很多時候,也要考慮磁盤控制器的政策,比如有的磁盤控制器會等 等到一定資料量才開始往磁盤寫入。
鏡像存儲(mirroring),沒有資料校驗。資料被同等地寫入兩個或多個磁盤中,可想而知,寫入速度會比較 慢,但讀取速度會比較快。讀取速度可以接近所有磁盤吞吐量的總和,寫入速度受限于最慢 的磁盤。
raid1也是磁盤使用率最低的一個。如果用兩個不同大小的磁盤建立raid1,可以用空間較小 的那一個,較大的磁盤多出來的部分可以作他用,不會浪費。
raid1
raid0的改良版,加入了漢明碼(hanmming code)錯誤校驗。
raid2
漢明碼能夠檢測最多兩個同時發生的比特錯誤,并且能夠更正單一比特的錯誤。漢明碼的位 數與資料的位數有一個不等式關系,即:
2^p ≥ p + d +1
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(比如視訊流服務)的情況。
類似于raid2,資料條帶化(stripe)存儲于不同的硬碟,資料以位元組為機關,隻是raid3使用單塊磁盤存儲簡單的 奇偶校驗資訊,是以最終磁盤數量為 n+1 。當這n+1個硬碟中的其中一個硬碟出現故障時, 從其它n個硬碟中的資料也可以恢複原始資料,當更換一個新硬碟後,系統可以重新恢複完整 的校驗容錯資訊。
raid3
由于在一個硬碟陣列中,多于一個硬碟同時出現故障率的幾率很小,是以一般情況下,使用 raid3,安全性是可以得到保障的。raid 3會把資料的寫入操作分散到多個磁盤上進行,不管是向哪一個資料盤寫入資料, 都需要同時重寫校驗盤中的相關資訊。是以,對于那些經常需要執行大量寫入操作的應用來 說,校驗盤的負載将會很大,無法滿足程式的運作速度,進而導緻整個raid系統性能的下降。 鑒于這種原因,raid 3更加适合應用于那些寫入操作較少,讀取操作較多的應用環境,例如 資料庫和web伺服器等。
與raid3類似,但raid4是按塊(扇區)存取。無須像raid3那樣,哪怕每一次小i/o操作也要涉 及全組,隻需涉及組中兩塊硬碟(一塊資料盤,一塊校驗盤)即可,進而提高了小量資料 i/o速度。
raid4
奇偶校驗(xor),資料以塊分段條帶化存儲。校驗資訊交叉地存儲在所有的資料盤上。
raid5
raid5把資料和相對應的奇偶校驗資訊存儲到組成raid5的各個磁盤上,并且奇偶校驗資訊和 相對應的資料分别存儲于不同的磁盤上,其中任意n-1塊磁盤上都存儲完整的資料,也就是 說有相當于一塊磁盤容量的空間用于存儲奇偶校驗資訊。是以當raid5的一個磁盤發生損壞 後,不會影響資料的完整性,進而保證了資料安全。當損壞的磁盤被替換後,raid還會自動 利用剩下奇偶校驗資訊去重建此磁盤上的資料,來保持raid5的高可靠性。
raid 5可以了解為是raid 0和raid 1的折衷方案。raid 5可以為系統提供資料安全保障,但 保障程度要比鏡像低而磁盤空間使用率要比鏡像高。raid 5具有和raid 0相近似的資料讀取 速度,隻是因為多了一個奇偶校驗資訊,寫入資料的速度相對單獨寫入一塊硬碟的速度略慢。
類似raid5,但是增加了第二個獨立的奇偶校驗資訊塊,兩個獨立的奇偶系統使用不同的算法, 資料的可靠性非常高,即使兩塊磁盤同時失效也不會影響資料的使用。但raid 6需要配置設定給 奇偶校驗資訊更大的磁盤空間,相對于raid 5有更大的“寫損失”,是以“寫性能”非常差。
raid6
由圖所知,每個硬碟上除了都有同級資料xor校驗區外,還有一個針對每個資料 塊的xor校驗區。當然,目前盤資料塊的校驗資料不可能存在目前盤而是交錯存儲的。從數 學角度來說,raid 5使用一個方程式解出一個未知變量,而raid 6則能通過兩個獨立的線性 方程構成方程組,進而恢複兩個未知資料。
伴随着硬碟容量的增長,raid6已經變得越來越重要。tb級别的硬碟上更容易造成資料丢失, 資料重建過程(比如raid5,隻允許一塊硬碟損壞)也越來越長,甚至到數周,這是完全不可接受的。而raid6允許兩 塊硬碟同時發生故障,是以漸漸受到人們的青睐。
伴随cd,dvd和藍光CD光牒的問世,存儲媒體出現了擦除碼技術,即使媒介表面出現劃痕,仍 然可以播放,大多數常見的擦除碼算法已經演變為上世紀60年代麻省理工學院林肯實驗室開 發的reed-solomon碼。實際情況中,多數raid6實作都采用了标準的raid5教校驗比特和reed-solomon碼 。而純擦除碼算法的使用使得raid 6陣列可以失效兩塊以上的硬碟,保護力度更強,有些實作 方法提供了多種級别的保護,甚至允許使用者(或存儲管理者)指定保護級别。
顧名思義,是raid0和raid1的結合。先做條帶(0),再做鏡像(1)。
raid01
同上,但是先做鏡像(1),再做條帶(0)
raid10
raid01和raid10非常相似,二者在讀寫性能上沒有什麼差别。但是在安全性上raid10要好于 raid01。如圖中所示,假設disk0損壞,在raid10中,在剩下的3塊盤中,隻有當disk1故障, 整個raid才會失效。但在raid01中,disk0損壞後,左邊的條帶将無法讀取,在剩下的3快盤 中,隻要disk2或disk3兩個盤中任何一個損壞,都會導緻raid失效。
raid10和raid5也是經常用來比較的兩種方案,二者都在生産實踐中得到了廣泛的應用。 raid10安全性更高,但是空間使用率低。至于讀寫性能,與cache有很大關聯,最好根據實 際情況測試比較選擇。
drfs,即distributedraidfilesystem,是一種嘗試将raid與hadoop的dfs結合起來的技術。 通常的hdfs在實踐中需要将replication factor設為3以保證資料完整性,而如果利用 raid的stripe和partity(奇偶校驗)技術,将資料分為多個塊,并且存儲各個塊的校驗信 息(xor或擦除碼)。有了這些措施,塊的副本數就可以降低并且保證同樣的資料可靠性,就能節省相當一部 分的存儲空間。
drfs包含以下幾個元件:
drfs client : 提供應用程式通路drfs的接口,在發現讀取到的檔案有損壞時修複,整 個操作對應用程式透明
raidnode : 建立,維護檢驗檔案的daemon
blockfixer : 周期性地檢查檔案,重新計算校驗和,修複檔案.
raidshell : 類似于hadoop shell.
erasurecode : 即drfs所使用的生成校驗碼的算法,可為xor或者 reed-solomon算法。 xor僅能建立一個校驗位元組,而reed-solomon則可以建立無數位(位數越多,能恢複的數 據也越多),如果使用reed-solomon,replication甚至可以降為1,缺點是降低了資料讀 寫的并行程度(隻能從單機讀寫)。
現在很都作業系統都提供了raid的軟體實作,主要由以下幾個方面:
由軟體在多個裝置上建立raid,比如linux上的mdadm工具.具體使用方法可檢視參考連結中 的例子。
lvm或者 veritas,虛拟卷管理工具.
檔案系統實作 : btrfs,zfs,gpfs.這些檔案都可以直接管理多個裝置上的資料,實 現了類似各級raid的功能。
在已有檔案系統之上提供資料校驗功能的raid系統(raid-f)
軟體實作并總是與系統的啟動程序相容,硬體實作(raid控制器)總是太貴并且都是廠商專有的技術,是以 有了一中混合的實作:系統啟動時,由固件(firmware)來實作raid,系統啟動的差不多了,由驅動來管 理raid。當然,這需要作業系統對這種驅動提供支援。
原文釋出時間:2015-01-29
本文來自雲栖合作夥伴“linux中國”