廣泛使用的不同 RAID 級別有哪些?我應該在什麼時候考慮它們?
這是關於 RAID 級別的規範問題。
什麼是:
- 通常使用的 RAID 級別(包括 RAID-Z 系列)?
- 它們常見於部署中嗎?
- 每個人的好處和陷阱?
RAID:為什麼和何時
RAID 代表獨立磁碟冗餘陣列(有些被教導“廉價”以表明它們是“普通”磁碟;歷史上存在非常昂貴的內部冗餘磁碟;因為這些不再可用,所以首字母縮略詞已經適應)。
在最一般的級別上,RAID 是一組執行相同讀取和寫入操作的磁碟。SCSI IO 在卷(“LUN”)上執行,它們以引入性能提升和/或冗餘增加的方式分佈到底層磁碟。性能提升是條帶化的功能:數據分佈在多個磁碟上,以允許讀取和寫入同時使用所有磁碟的 IO 隊列。冗餘是鏡像的功能。可以將整個磁碟保存為副本,或者可以多次寫入單個條帶。或者,在某些類型的 RAID 中,不是逐位複制數據,而是通過創建包含奇偶校驗資訊的特殊條帶來獲得冗餘,這些資訊可用於在發生硬體故障時重新創建任何失去的數據。
有幾種配置可以提供不同級別的這些好處,此處將介紹這些配置,並且每種配置都偏向於性能或冗餘。
評估哪種 RAID 級別適合您的一個重要方面取決於其優勢和硬體要求(例如:驅動器數量)。
大多數這些類型的 RAID (0,1,5) 的另一個重要方面是它們不能確保數據的完整性,因為它們是從實際儲存的數據中抽像出來的。所以 RAID 不能防止損壞的文件。如果文件以任何方式損壞,損壞將被鏡像或 paritied 並送出到磁碟。但是,RAID-Z 確實聲稱可以為您的數據提供文件級別的完整性。
直連 RAID:軟體和硬體
RAID 可以在直連儲存上實現兩層:硬體和軟體。在真正的硬體 RAID 解決方案中,有一個帶有專用於 RAID 計算和處理的處理器的專用硬體控制器。它通常還具有電池支持的記憶體模組,因此即使在電源故障後也可以將數據寫入磁碟。當系統沒有完全關閉時,這有助於消除不一致。一般來說,好的硬體控制器比軟體控制器性能更好,但它們也有相當大的成本並增加了複雜性。
軟體 RAID 通常不需要控制器,因為它不使用專用的 RAID 處理器或單獨的記憶體。通常,這些操作由 CPU 直接處理。在現代系統中,這些計算消耗最少的資源,儘管會產生一些邊際延遲。RAID 由作業系統直接處理,或者在FakeRAID的情況下由人造控制器處理。
一般來說,如果有人要選擇軟體 RAID,他們應該避免使用 FakeRAID 並為他們的系統使用 OS-native 包,例如 Windows 中的 Dynamic Disks、Linux 中的 mdadm/LVM,或 Solaris、FreeBSD 和其他相關發行版中的 ZFS . FakeRAID 使用硬體和軟體的組合,導致硬體 RAID 的初始外觀,但軟體 RAID 的實際性能。此外,將陣列移動到另一個適配器通常非常困難(如果原始適配器出現故障)。
集中儲存
RAID 常見的另一個地方是集中式儲存設備,通常稱為 SAN(儲存區域網路)或 NAS(網路附加儲存)。這些設備管理自己的儲存並允許連接的伺服器以各種方式訪問儲存。由於多個工作負載包含在相同的幾個磁碟上,因此通常需要具有高水平的冗餘。
NAS 和 SAN 之間的主要區別在於塊級與文件系統級導出。SAN 導出整個“塊設備”,例如分區或邏輯卷(包括那些建構在 RAID 陣列之上的)。SAN 的範例包括光纖通道和 iSCSI。NAS 導出“文件系統”,例如文件或文件夾。NAS 的範例包括 CIFS/SMB(Windows 文件共享)和 NFS。
RAID 0
好時機:不惜一切代價加快速度!
不好的時候:你關心你的數據
RAID0(又名條帶化)有時被稱為“當驅動器出現故障時您將剩下的數據量”。它確實與“RAID”的紋理背道而馳,其中“R”代表“冗餘”。
RAID0 獲取您的數據塊,將其拆分為與您的磁碟一樣多的部分(2 個磁碟→ 2 個,3 個磁碟→ 3 個),然後將每個數據寫入單獨的磁碟。
這意味著單個磁碟故障會破壞整個陣列(因為您有第 1 部分和第 2 部分,但沒有第 3 部分),但它提供了非常快速的磁碟訪問。
它不常在生產環境中使用,但它可以用於您有嚴格的臨時數據的情況,這些數據可能會失去而不會產生影響。它通常用於記憶體設備(例如 L2Arc 設備)。
總可用磁碟空間是陣列中所有磁碟的總和(例如 3x 1TB 磁碟 = 3TB 空間)。
RAID 1
適用於:您的磁碟數量有限但需要冗餘
不好的時候:你需要大量的儲存空間
RAID 1(又名鏡像)獲取您的數據並將其複製到兩個或更多磁碟(儘管通常只有 2 個磁碟)上。如果使用了兩個以上的磁碟,則每個磁碟上都會儲存相同的資訊(它們都是相同的)。當磁碟少於三個時,這是確保數據冗餘的唯一方法。
RAID 1 有時會提高讀取性能。RAID 1 的一些實現將從兩個磁碟讀取以使讀取速度加倍。有些只會從其中一個磁碟讀取,這不會提供任何額外的速度優勢。其他人將從兩個磁碟讀取相同的數據,確保每次讀取時陣列的完整性,但這將導致與單個磁碟相同的讀取速度。
它通常用於磁碟擴展很少的小型伺服器,例如可能只有兩個磁碟空間的 1RU 伺服器或需要冗餘的工作站。由於其“失去”空間的高成本,小容量、高速(和高成本)驅動器的成本可能令人望而卻步,因為您需要花費兩倍的錢才能獲得相同級別的可用儲存空間。
總可用磁碟空間是陣列中最小磁碟的大小(例如 2x 1TB 磁碟 = 1TB 空間)。
RAID 1E
1E RAID 級別與 RAID 1 相似,因為數據始終寫入(至少)兩個磁碟。但與 RAID1 不同的是,它通過簡單地將數據塊交錯在幾個磁碟之間來允許奇數個磁碟。
性能特徵類似於 RAID1,容錯性類似於 RAID 10。這種方案可以擴展到三個以上的奇數磁碟(可能稱為 RAID 10E,雖然很少)。
RAID 10
好時機:您想要速度和冗餘
不好的時候:你不能損失一半的磁碟空間
RAID 10 是 RAID 1 和 RAID 0 的組合。1 和 0 的順序非常重要。假設您有 8 個磁碟,它將創建 4 個 RAID 1 陣列,然後在 4 個 RAID 1 陣列之上應用一個 RAID 0 陣列。它至少需要 4 個磁碟,並且必須成對添加額外的磁碟。
這意味著每對中的一個磁碟可能會發生故障。因此,如果您有磁碟 A1、A2、B1、B2、C1、C2、D1、D2 的集合 A、B、C 和 D,您可能會從每組(A、B、C 或 D)中失去一個磁碟,但仍然有一個有效的數組。
但是,如果您失去了同一組中的兩個磁碟,則該陣列將完全失去。您最多可能會失去*(*但不能保證)50% 的磁碟。
在 RAID 10 中保證您的高速和高可用性。
RAID 10 是一種非常常見的 RAID 級別,特別是對於大容量驅動器,在重建 RAID 陣列之前,單個磁碟故障導致第二個磁碟故障的可能性更大。在恢復期間,性能下降遠低於 RAID 5,因為它只需從一個驅動器讀取即可重建數據。
可用磁碟空間為總空間總和的 50%。(例如 8 個 1TB 驅動器 = 4TB 可用空間)。如果您使用不同的大小,則只會使用每個磁碟中最小的大小。
值得注意的是,Linux 核心的軟體 RAID 驅動程序
md
允許使用奇數驅動器的 RAID 10 配置,即 3 或 5 磁碟 RAID 10。RAID 01
好時機:從不
不好的時候:總是
它與 RAID 10 相反。它創建兩個 RAID 0 陣列,然後將 RAID 1 放在頂部。這意味著您可以從每組(A1、A2、A3、A4 或 B1、B2、B3、B4)中失去一個磁碟。在商業應用中很少見,但可能與軟體 RAID 相關。
絕對清楚:
- 如果您有一個包含 8 個磁碟的 RAID10 陣列,其中一個死掉了(我們稱之為 A1),那麼您將有 6 個冗餘磁碟和 1 個沒有冗餘。如果另一個磁碟死了,那麼您的陣列仍有**85%**的可能性仍在工作。
- 如果您有一個包含 8 個磁碟的 RAID01 陣列,其中一個死掉了(我們稱之為 A1),那麼您將擁有 3 個冗餘磁碟和 4 個沒有冗餘的磁碟。如果另一個磁碟死了,那麼您的陣列仍有**43%**的可能性仍在工作。
與 RAID 10 相比,它沒有提供額外的速度,但冗餘大大減少,應該不惜一切代價避免。
RAID 5
適用於:您想要平衡冗餘和磁碟空間,或者主要是隨機讀取工作負載
糟糕的情況:您有很高的隨機寫入工作負載或大型驅動器
幾十年來,RAID 5 一直是最常用的 RAID 級別。它提供陣列中所有驅動器的系統性能(小隨機寫入除外,它會產生輕微的成本)。它使用簡單的異或運算來計算奇偶校驗。在單個驅動器發生故障時,可以使用對已知數據的 XOR 操作從剩餘驅動器中重建資訊。
不幸的是,在驅動器發生故障的情況下,重建過程是非常 IO 密集型的。RAID 中的驅動器越大,重建所需的時間越長,第二個驅動器發生故障的可能性就越大。由於大型慢速驅動器都有更多的數據需要重建,而性能卻要低得多,因此通常不建議使用 7200 RPM 或更低的 RAID 5。
在消費類應用中使用 RAID 5 陣列時,最關鍵的問題可能是當總容量超過 12TB 時,它們幾乎肯定會失敗。這是因為 SATA 消費類驅動器的不可恢復讀取錯誤(URE) 率為每 10 個14位一個,即約 12.5TB。
如果我們以具有七個 2 TB 驅動器的 RAID 5 陣列為例:當一個驅動器發生故障時,剩下六個驅動器。為了重建陣列,控制器需要讀取六個驅動器,每個驅動器 2 TB。看上圖,幾乎可以肯定在重建完成之前會發生另一個 URE。一旦發生這種情況,陣列及其上的所有數據都會失去。
然而,由於大多數硬碟製造商已將其較新的驅動器的 URE 評級提高到 10 個15位中的 1 個,因此消費驅動器中 RAID 5 問題的 URE/數據失去/陣列故障在一定程度上得到了緩解。與往常一樣,購買前請檢查規格表!
還必須將 RAID 5 置於可靠的(電池支持的)寫入記憶體之後。這避免了小寫入的成本,以及在寫入過程中失敗時可能發生的不穩定行為。
RAID 5 是向陣列添加冗餘儲存的最具成本效益的解決方案,因為它只需要失去 1 個磁碟(例如 12 個 146GB 磁碟 = 1606GB 可用空間)。它至少需要 3 個磁碟。
RAID 6
適用於:您想使用 RAID 5,但您的磁碟太大或太慢
不好的時候:你有很高的隨機寫入工作量
RAID 6 與 RAID 5 類似,但它使用兩個具有奇偶校驗價值的磁碟而不是一個(第一個是 XOR,第二個是 LSFR),因此您可以從陣列中失去兩個磁碟而不會失去數據。寫入懲罰高於 RAID 5,並且您的磁碟空間減少了一個。
值得考慮的是,RAID 6 陣列最終會遇到與 RAID 5 類似的問題。更大的驅動器會導致更長的重建時間和更多潛在錯誤,最終導致整個陣列出現故障並在重建完成之前失去所有數據。
- http://www.zdnet.com/article/why-raid-6-stops-working-in-2019
- http://queue.acm.org/detail.cfm?id=1670144
RAID 50
適合情況:您有很多磁碟需要放在一個陣列中,並且由於容量問題,RAID 10 不是一個選項
糟糕的情況:您有太多磁碟,以至於在重建完成之前可能會同時發生許多故障,或者當您沒有很多磁碟時
RAID 50 是一個嵌套級別,與 RAID 10 非常相似。它結合了兩個或多個 RAID 5 陣列並在 RAID 0 中將數據條帶化。這提供了性能和多磁碟冗餘,只要多個磁碟從不同的RAID 5中失去數組。
在 RAID 50 中,磁碟容量為 nx,其中 x 是條帶化的 RAID 5 數量。例如,如果是一個簡單的 6 磁碟 RAID 50(可能是最小的),如果您在兩個 RAID 5 中有 6x1TB 磁碟,然後將它們條帶化成為 RAID 50,您將擁有 4TB 可用儲存空間。
RAID 60
適用於:您有與 RAID 50 類似的案例,但需要更多冗餘
不好的時候:陣列中沒有大量磁碟
RAID 6 對 RAID 60 就像 RAID 5 對 RAID 50 一樣。本質上,您有多個 RAID 6,然後數據在 RAID 0 中被條帶化。這種設置允許集合中任何單個 RAID 6 的最多兩個成員失敗而不會失去數據。RAID 60 陣列的重建時間可能很長,因此為陣列中的每個 RAID 6 成員配備一個熱備件通常是個好主意。
在 RAID 60 中,磁碟容量是 n-2x,其中 x 是條帶化的 RAID 6 的數量。例如,如果一個簡單的 8 磁碟 RAID 60(可能是最小的),如果您在兩個 RAID 6 中有 8x1TB 磁碟,然後將它們條帶化成為 RAID 60,那麼您將擁有 4TB 的可用儲存空間。如您所見,這提供了與 RAID 10 在 8 個成員陣列上提供的相同數量的可用儲存空間。雖然 RAID 60 會稍微冗餘一些,但重建時間會大大增加。通常,僅當您有大量磁碟時才需要考慮 RAID 60。
RAID-Z
適用於:您在支持 ZFS 的系統上使用它
不好的時候:性能需要硬體 RAID 加速
RAID-Z 解釋起來有點複雜,因為 ZFS 從根本上改變了儲存和文件系統的互動方式。ZFS 包含捲管理(RAID 是捲管理器的功能)和文件系統的傳統角色。因此,ZFS 可以在文件的儲存塊級別而不是卷的條帶級別執行 RAID。這正是 RAID-Z 所做的,將文件的儲存塊寫入多個物理驅動器,包括每組條帶的奇偶校驗塊。
一個例子可能會更清楚地說明這一點。假設您在 ZFS RAID-Z 池中有 3 個磁碟,塊大小為 4KB。現在您將一個正好為 16KB 的文件寫入系統。ZFS 會將其分成四個 4KB 的塊(就像普通作業系統一樣);然後它將計算兩個奇偶校驗塊。這六個塊將被放置在驅動器上,類似於 RAID-5 分配數據和奇偶校驗的方式。這是對 RAID5 的改進,因為沒有讀取現有數據條來計算奇偶校驗。
另一個例子建立在前面的基礎上。假設文件只有 4KB。ZFS 仍然需要建構一個奇偶校驗塊,但現在寫入負載減少到 2 個塊。第三個驅動器將可以免費為任何其他並發請求提供服務。只要寫入的文件不是池的塊大小乘以驅動器數量減去一的倍數,就會看到類似的效果(即
$$ File Size $$<>$$ Block Size $$*$$ Drives - 1 $$). ZFS 同時處理捲管理和文件系統還意味著您不必擔心對齊分區或條帶塊大小。ZFS 使用推薦的配置自動處理所有這些。
ZFS 的性質抵消了一些經典的 RAID-5/6 警告。ZFS 中的所有寫入都以寫時複製的方式完成;寫入操作中所有更改的塊都將寫入磁碟上的新位置,而不是覆蓋現有塊。如果寫入因任何原因失敗,或者係統在寫入過程中失敗,則寫入事務要麼在系統恢復後完全發生(在 ZFS 意圖日誌的幫助下),要麼根本不發生,從而避免潛在的數據損壞。RAID-5/6 的另一個問題是重建期間潛在的數據失去或靜默數據損壞。正常
zpool scrub
操作有助於在數據損壞或驅動器問題導致數據失去之前發現它們,所有數據塊的校驗和將確保擷取重建期間的所有損壞。RAID-Z 的主要缺點是它仍然是軟體 RAID(並且受到 CPU 計算寫入負載而不是讓硬體HBA解除安裝它所產生的相同的微小延遲)。這可能會在未來通過支持 ZFS 硬體加速的 HBA 解決。
其他 RAID 和非標準功能
由於沒有中央機構強制執行任何類型的標準功能,因此各種 RAID 級別已經發展並通過普遍使用進行了標準化。許多供應商生產的產品與上述描述不同。他們發明一些新奇的行銷術語來描述上述概念之一也很常見(這在 SOHO 市場中最常見)。如果可能,請嘗試讓供應商實際描述冗餘機制的功能(大多數人會自願提供這些資訊,因為真的沒有秘訣了)。
值得一提的是,有類似 RAID 5 的實現,它允許您啟動一個只有兩個磁碟的陣列。它將數據儲存在一個條帶上,奇偶校驗儲存在另一個條帶上,類似於上面的 RAID 5。這將像 RAID 1 一樣執行,但需要額外的奇偶校驗計算成本。優點是您可以通過重新計算奇偶校驗來將磁碟添加到陣列中。