RAID基礎知識


本文是部分摘抄,原文鏈接見末尾。

RAID基礎知識

 

RAID 中主要有三個關鍵概念和技術:鏡像(Mirroring )、數據條帶( Data Stripping )和數據校驗( Data parity )。

鏡像,將數據複製到多個磁盤,一方面可以提高可靠性,另一方面可併發從兩個或多個副本讀取數據來提高讀性能。顯而易見,鏡像的寫性能要稍低,確保數據正確地寫到多個磁盤需要更多的時間消耗。

數據條帶,將數據分片保存在多個不同的磁盤,多個數據分片共同組成一個完整數據副本,這與鏡像的多個副本是不同的,它通常用於性能考慮。數據條帶具有更高的併發粒度,當訪問數據時,可以同時對位於不同磁盤上數據進行讀寫操作,從而獲得非常可觀的 I/O 性能提升

數據校驗,利用冗餘數據進行數據錯誤檢測和修復,冗餘數據通常採用海明碼、異或操作等算法來計算獲得。利用校驗功能,可以很大程度上提高磁盤陣列的可靠性、魯棒性和容錯能力。不過,數據校驗需要從多處讀取數據並進行計算和對比,會影響系統性能。不同等級的 RAID 採用一個或多個以上的三種技術,來獲得不同的數據可靠性、可用性和 I/O 性能。至於設計何種 RAID (甚至新的等級或類型)或採用何種模式的 RAID ,需要在深入理解系統需求的前提下進行合理選擇,綜合評估可靠性、性能和成本來進行折中的選擇。

 

RAID 技術如此流行,源於其具有顯著的特徵和優勢,基本可以滿足大部分的數據存儲需求。總體說來, RAID 主要優勢有如下幾點:
(1)
大容量
  這是 RAID 的一個顯然優勢,它擴大了磁盤的容量,由多個磁盤組成的 RAID 系統具有海量的存儲空間。現在單個磁盤的容量就可以到 1TB 以上,這樣 RAID 的存儲容量就可以達到 PB 級,大多數的存儲需求都可以滿足。一般來說, RAID 可用容量要小於所有成員磁盤的總容量。不同等級的 RAID 算法需要一定的冗餘開銷,具體容量開銷與採用算法相關。如果已知 RAID 算法和容量,可以計算出 RAID 的可用容量。通常, RAID 容量利用率在 50% ~ 90% 之間。
(2)
高性能
RAID 的高性能受益於數據條帶化技術。單個磁盤的 I/O 性能受到接口、帶寬等計算機技術的限制,性能往往很有限,容易成爲系統性能的瓶頸。通過數據條帶化, RAID 將數據 I/O 分散到各個成員磁盤上,從而獲得比單個磁盤成倍增長的聚合 I/O 性能。
(3)
可靠性
  可用性和可靠性是 RAID 的另一個重要特徵。從理論上講,由多個磁盤組成的 RAID 系統在可靠性方面應該比單個磁盤要差。這裏有個隱含假定:單個磁盤故障將導致整個 RAID 不可用。 RAID 採用鏡像和數據校驗等數據冗餘技術,打破了這個假定。鏡像是最爲原始的冗餘技術,把某組磁盤驅動器上的數據完全複製到另一組磁盤驅動器上,保證總有數據副本可用。比起鏡像 50% 的冗餘開銷,數據校驗要小很多,它利用校驗冗餘信息對數據進行校驗和糾錯。 RAID 冗餘技術大幅提升數據可用性和可靠性,保證了若干磁盤出錯時,不會導致數據的丟失,不影響系統的連續運行。
(4)
可管理性
  實際上, RAID 是一種虛擬化技術,它對多個物理磁盤驅動器虛擬成一個大容量的邏輯驅動器。對於外部主機系統來說, RAID 是一個單一的、快速可靠的大容量磁盤驅動器。這樣,用戶就可以在這個虛擬驅動器上來組織和存儲應用系統數據。從用戶應用角度看,可使存儲系統簡單易用,管理也很便利。由於 RAID 內部完成了大量的存儲管理工作,管理員只需要管理單個虛擬驅動器,可以節省大量的管理工作。 RAID 可以動態增減磁盤驅動器,可自動進行數據校驗和數據重建,這些都可以大大簡化管理工作。


關鍵技術

鏡像

鏡像是一種冗餘技術,爲磁盤提供保護功能,防止磁盤發生故障而造成數據丟失。對於 RAID 而言,採用鏡像技術典型地將會同時在陣列中產生兩個完全相同的數據副本,分佈在兩個不同的磁盤驅動器組上。鏡像提供了完全的數據冗餘能力,當一個數據副本失效不可用時,外部系統仍可正常訪問另一副本,不會對應用系統運行和性能產生影響。而且,鏡像不需要額外的計算和校驗,故障修復非常快,直接複製即可。鏡像技術可以從多個副本進行併發讀取數據,提供更高的讀 I/O 性能,但不能並行寫數據,寫多個副本會會導致一定的 I/O 性能降低。

鏡像技術提供了非常高的數據安全性,其代價也是非常昂貴的,需要   至少雙倍的存儲空間。高成本限制了鏡像的廣泛應用,主要應用於至關重要的數據保護,這種場合下數據丟失會造成巨大的損失。另外,鏡像通過拆分能獲得特定時間點的上數據快照,從而可以實現一種備份窗口幾乎爲零的數據備份技術。

數據條帶

磁盤存儲的性能瓶頸在於磁頭尋道定位,它是一種慢速機械運動,無法與高速的 CPU 匹配。再者,單個磁盤驅動器性能存在物理極限, I/O 性能非常有限。 RAID 由多塊磁盤組成,數據條帶技術將數據以塊的方式分佈存儲在多個磁盤中,從而可以對數據進行併發處理。這樣寫入和讀取數據就可以在多個磁盤上同時進行,併發產生非常高的聚合 I/O ,有效提高了整體 I/O 性能,而且具有良好的線性擴展性。這對大容量數據尤其顯著,如果不分塊,數據只能按順序存儲在磁盤陣列的磁盤上,需要時再按順序讀取。而通過條帶技術,可獲得數倍與順序訪問的性能提升。

數據條帶技術的分塊大小選擇非常關鍵。條帶粒度可以是一個字節至幾 KB 大小,分塊越小,並行處理能力就越強,數據存取速度就越高,但同時就會增加塊存取的隨機性和塊尋址時間。實際應用中,要根據數據特徵和需求來選擇合適的分塊大小,在數據存取隨機性和併發處理能力之間進行平衡,以爭取儘可能高的整體性能。

數據條帶是基於提高 I/O 性能而提出的,也就是說它只關注性能,而對數據可靠性、可用性沒有任何改善。實際上,其中任何一個數據條帶損壞都會導致整個數據不可用,採用數據條帶技術反而增加了數據發生丟失的概念率。

數據校驗

鏡像具有高安全性、高讀性能,但冗餘開銷太昂貴。數據條帶通過併發性來大幅提高性能,然而對數據安全性、可靠性未作考慮。數據校驗是一種冗餘技術,它用校驗數據來提供數據的安全,可以檢測數據錯誤,並在能力允許的前提下進行數據重構。相對鏡像,數據校驗大幅縮減了冗餘開銷,用較小的代價換取了極佳的數據完整性和可靠性。數據條帶技術提供高性能,數據校驗提供數據安全性, RAID 不同等級往往同時結合使用這兩種技術。

採用數據校驗時, RAID 要在寫入數據同時進行校驗計算,並將得到的校驗數據存儲在 RAID 成員磁盤中。校驗數據可以集中保存在某個磁盤或分散存儲在多個不同磁盤中,甚至校驗數據也可以分塊,不同 RAID 等級實現各不相同。當其中一部分數據出錯時,就可以對剩餘數據和校驗數據進行反校驗計算重建丟失的數據。校驗技術相對於鏡像技術的優勢在於節省大量開銷,但由於每次數據讀寫都要進行大量的校驗運算,對計算機的運算速度要求很高,必須使用硬件 RAID 控制器。在數據重建恢復方面,檢驗技術比鏡像技術複雜得多且慢得多。

海明校驗碼和異或校驗是兩種最爲常用的數據校驗算法。海明校驗碼是由理查德 · 海明提出的,不僅能檢測錯誤,還能給出錯誤位置並自動糾正。海明校驗的基本思想是:將有效信息按照某種規律分成若干組,對每一個組作奇偶測試並安排一個校驗位,從而能提供多位檢錯信息,以定位錯誤點並糾正。可見海明校驗實質上是一種多重奇偶校驗。異或校驗通過異或邏輯運算產生,將一個有效信息與一個給定的初始值進行異或運算,會得到校驗信息。如果有效信息出現錯誤,通過校驗信息與初始值的異或運算能還原正確的有效信息。


常見RAID類型

wKioL1bj3o-xv-XMAAB7LZJmAQk841.png


JBOD

JBOD Just a Bunch Of Disks)不是標準的 RAID 等級,它通常用來表示一個沒有控制軟件提供協調控制的磁盤集合。 JBOD 將多個物理磁盤串聯起來,提供一個巨大的邏輯磁盤。 JBOD 的數據存放機制是由第一塊磁盤開始按順序往後存儲,當前磁盤存儲空間用完後,再依次往後面的磁盤存儲數據。 JBOD 存儲性能完全等同於單塊磁盤,而且也不提供數據安全保護。它只是簡單提供一種擴展存儲空間的機制, JBOD 可用存儲容量等於所有成員磁盤的存儲空間之和。目前 JBOD 常指磁盤櫃,而不論其是否提供 RAID 功能。

                             500px-JBOD.svg.png


RAID0

RAID0 是一種簡單的、無數據校驗的數據條帶化技術。實際上不是一種真正的 RAID ,因爲它並不提供任何形式的冗餘策略。 RAID0 將所在磁盤條帶化後組成大容量的存儲空間,將數據分散存儲在所有磁盤中,以獨立訪問方式實現多塊磁盤的並讀訪問。由於可以併發執行 I/O 操作,總線帶寬得到充分利用。再加上不需要進行數據校驗, RAID0 的性能在所有 RAID 等級中是最高的。理論上講,一個由 n 塊磁盤組成的 RAID0 ,它的讀寫性能是單個磁盤性能的 n 倍,但由於總線帶寬等多種因素的限制,實際的性能提升低於理論值。

RAID0 具有低成本、高讀寫性能、 100% 的高存儲空間利用率等優點,但是它不提供數據冗餘保護,一旦數據損壞,將無法恢復。 因此, RAID0 一般適用於對性能要求嚴格但對數據安全性和可靠性不高的應用,如視頻、音頻存儲、臨時數據緩存空間等。


RAID1

RAID1 稱爲鏡像,它將數據完全一致地分別寫到工作磁盤和鏡像 磁盤,它的磁盤空間利用率爲 50% 。 RAID1 在數據寫入時,響應時間會有所影響,但是讀數據的時候沒有影響。 RAID1 提供了最佳的數據保護,一旦工作磁盤發生故障,系統自動從鏡像磁盤讀取數據,不會影響用戶工作。

RAID1 與 RAID0 剛好相反,是爲了增強數據安全性使兩塊 磁盤數據呈現完全鏡像,從而達到安全性好、技術簡單、管理方便。 RAID1 擁有完全容錯的能力,但實現成本高。 RAID1 應用於對順序讀寫性能要求高以及對數據保護極爲重視的應用,如對郵件系統的數據保護。

RAID5

RAID5 應該是目前最常見的 RAID 等級,它的原理與 RAID4 相似,區別在於校驗數據分佈在陣列中的所有磁盤上,而沒有采用專門的校驗磁盤。對於數據和校驗數據,它們的寫操作可以同時發生在完全不同的磁盤上。因此, RAID5 不存在 RAID4 中的併發寫操作時的校驗盤性能瓶頸問題。另外, RAID5 還具備很好的擴展性。當陣列磁盤 數量增加時,並行操作量的能力也隨之增長,可比 RAID4 支持更多的磁盤,從而擁有更高的容量以及更高的性能。

RAID5 的磁盤上同時存儲數據和校驗數據,數據塊和對應的校驗信息存保存在不同的磁盤上,當一個數據盤損壞時,系統可以根據同一條帶的其他數據塊和對應的校驗數據來重建損壞的數據。與其他 RAID 等級一樣,重建數據時, RAID5 的性能會受到較大的影響。

RAID5 兼顧存儲性能、數據安全和存儲成本等各方面因素,它可以理解爲 RAID0 和 RAID1 的折中方案,是目前綜合性能最佳的數據保護解決方案。 RAID5 基本上可以滿足大部分的存儲應用需求,數據中心大多采用它作爲應用數據的保護方案。


RAID6

前面所 述的各個 RAID 等級都只能保護因單個磁盤失效而造成的數據丟失。如果兩個磁盤同時發生故障,數據將無法恢復。 RAID6 引入雙重校驗的概念,它可以保護陣列中同時出現兩個磁盤失效時,陣列仍能夠繼續工作,不會發生數據丟失。 RAID6 等級是在 RAID5 的基礎上爲了進一步增強數據保護而設計的一種 RAID 方式,它可以看作是一種擴展的 RAID5 等級。

RAID6 不僅要支持數據的恢復,還要支持校驗數據的恢復,因此實現代價很高,控制器的設計也比其他等級更復雜、更昂貴。 RAID6 思想最常見的實現方式是採用兩個獨立的校驗算法,假設稱爲 P 和 Q ,校驗數據可以分別存儲在兩個不同的校驗盤上,或者分散存儲在所有成員磁盤中。當兩個磁盤同時失效時,即可通過求解兩元方程來重建兩個磁盤上的數據。

RAID6 具有快速的讀取性能、更高的容錯能力。但是,它的成本要高於 RAID5 許多,寫性能也較差,並有設計和實施非常複雜。因此, RAID6 很少得到實際應用,主要用於對數據安全等級要求非常高的場合。它一般是替代 RAID10 方案的經濟性選擇


RAID10 和 RAID01

一些文獻把這兩種 RAID 等級看作是等同的,本文認爲是不同的。 RAID01 是先做條帶化再作鏡像,本質是對物理磁盤實現鏡像;而 RAID10 是先做鏡像再作條帶化,是對虛擬磁盤實現鏡像。相同的配置下,通常 RAID01 比 RAID10 具有更好的容錯能力。

RAID01 兼備了 RAID0 和 RAID1 的優點,它先用兩塊磁盤建立鏡像,然後再在鏡像內部做條帶化。 RAID01 的數據將同時寫入到兩個磁盤陣列中,如果其中一個陣列損壞,仍可繼續工作,保證數據安全性的同時又提高了性能。 RAID01 和 RAID10 內部都含有 RAID1 模式,因此整體磁盤利用率均僅爲 50% 。


RAID 50

RAID 5與RAID 0的組合,先作RAID 5,再作RAID 0,也就是對多組RAID 5彼此構成Stripe訪問。由於RAID 50是以RAID 5爲基礎,而RAID 5至少需要3顆硬盤,因此要以多組RAID 5構成RAID 50,至少需要6顆硬盤。以RAID 50最小的6顆硬盤配置爲例,先把6顆硬盤分爲2組,每組3顆構成RAID 5,如此就得到兩組RAID 5,然後再把兩組RAID 5構成RAID 0。

RAID 50在底層的任一組或多組RAID 5中出現1顆硬盤損壞時,仍能維持運作,不過如果任一組RAID 5中出現2顆或2顆以上硬盤損毀,整組RAID 50就會失效。

RAID 50由於在上層把多組RAID 5構成Stripe,性能比起單純的RAID 5高,容量利用率比RAID5要低。比如同樣使用9顆硬盤,由各3顆RAID 5再組成RAID 0的RAID 50,每組RAID 5浪費一顆硬盤,利用率爲(1-3/9),RAID 5則爲(1-1/9)。


RAID 60

RAID 6與RAID 0的組合:先作RAID 6,再作RAID 0。換句話說,就是對兩組以上的RAID 6作Stripe訪問。RAID 6至少需具備4顆硬盤,所以RAID 60的最小需求是8顆硬盤。

由於底層是以RAID 6組成,所以RAID 60可以容許任一組RAID 6中損毀最多2顆硬盤,而系統仍能維持運作;不過只要底層任一組RAID 6中損毀3顆硬盤,整組RAID 60就會失效,當然這種情況的概率相當低。

比起單純的RAID 6,RAID 60的上層通過結合多組RAID 6構成Stripe訪問,因此性能較高。不過使用門檻高,而且容量利用率低是較大的問題。

關於RAID參數調優

  1. 1、使用SSD或者PCIe SSD設備,至少獲得數百倍甚至萬倍的IOPS提升

  2. 2、購置陣列卡同時配備CACHE及BBU模塊,可明顯提升IOPS(主要是指機械盤,SSD或PCIe SSD除外。同時需要定期檢查CACHE及BBU模塊的健康狀況,確保意外時不至於丟失數據)

  3. 3、有陣列卡時,設置陣列寫策略爲WB,甚至FORCE WB(若有雙電保護,或對數據安全性要求不是特別高的話),嚴禁使用WT策略。並且閉陣列預讀策略

  4. 4、儘可能選用RAID-10,而非RAID-5(這句話有待商榷)

  5. 5、使用機械盤的話,儘可能選擇高轉速的,例如選用15KRPM,而不是7.2KRPM的盤,不差幾個錢的;



摘自:


http://wsgzao.github.io/post/raid/?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章