如何在Linux上構建 RAID 10陣列
RAID 10陣列(又名RAID 1+0 或先映象後分割槽)透過結合RAID 0 (讀寫操作在多個磁碟上同時並行執行)和RAID 1(資料被完全相同地寫入到兩個或更多的磁碟)兩者的特點實現高效能和高容錯性的磁碟I/O。
這篇文章會指導你如何使用五塊相同的8GB磁碟來組成一個軟體RAID 10陣列。因為組成一個RAID 10陣列至少需要4塊磁碟(比如,兩個映象各有一對分割槽組合),而且需要新增一塊額外的備用磁碟以防某塊主要的磁碟出錯。本文也會分享一些工具,在稍後用來分析RAID陣列的效能。
注意RAID 10的優缺點和其它分割槽方法(在不同大小的磁碟和檔案系統上)的內容不在本文討論範圍內。
Raid 10 陣列如何工作?
如果你需要實現一種支援I/O密集操作(比如資料庫、電子郵件或web伺服器)的儲存解決方案,RAID 10就是你需要的。來看看為什麼這麼說,請看下圖。
上圖中的檔案由A、B、C、D、E和F六種塊組成,每一個RAID 1映象對(如映象1和2)在兩個磁碟上覆制相同的塊。在這樣的配置下,寫操作效能會因為每個塊需要寫入兩次而下降,每個磁碟各一次;而讀操作與從單塊磁碟中讀取相比並未發生改變。不過這種配置的好處是除非一個映象中有超過一塊的磁碟故障,否則都能保持冗餘以維持正常的磁碟I/O操作。
RAID 0的分割槽透過將資料劃分到不同的塊,然後執行同時將塊A寫入映象1、將塊B寫入映象2(以此類推)的並行操作以提高整體的讀寫效能。在另一方面,沒有任何一個映象包含構成主存的資料片的全部資訊。這就意味著如果其中一個映象故障,那麼整個RAID 0元件將無法正常工作,資料將遭受不可恢復的損失。
建立RAID 10陣列
有兩種建立RAID 10陣列的可行方案:複雜法(一步完成)和巢狀法(先建立兩個或更多的RAID 1陣列,然後使用它們組成RAID 0)。本文會講述複雜法建立RAID 10陣列的過程,因為這種方法能夠使用偶數或奇數個磁碟去建立陣列,而且能以單個RAID裝置的形式被管理,而巢狀法則恰恰相反(只允許偶數個磁碟,必須以巢狀裝置的形式被管理,即分開管理RAID 1和RAID 0)。
假設你的機器已經安裝mdadm,並執行著相應的守護程式,細節參見這篇文章。也假設每個磁碟上已經劃分出一個主分割槽sd[bcdef]1 (LCTT 譯註:共計五塊磁碟,這裡是從sdb - sdf)。使用命令:
ls -l /dev | grep sd[bcdef]
檢視到的輸出應該如下所示:
然後使用下面的命令建立一個RAID 10陣列(LCTT 譯註:使用了四塊磁碟 bcde 建立):
# mdadm --create --verbose /dev/md0 --level=10 --raid-devices=4 /dev/sd[bcde]1 --spare-devices=1 /dev/sdf1
當陣列建立完畢後(最多花費幾分鐘),執行命令
# mdadm --detail /dev/md0
的輸出應如下所示:
在更進一步之前需要注意以下事項。
-
Used Dev Space表示陣列所使用的每一塊磁碟的容量。
-
Array Size表示陣列的整體大小。RAID 10陣列的大小透過(N*C)/M計算,其中N是活躍磁碟的數目,C是每個活躍磁碟的容量,M是每一個映象中磁碟的數目。在本文的情形下,這個值等於(4*8GiB)/2 = 16GiB。
-
Layout是整個資料佈局的詳細資訊。可能的佈局數值如下所示。
- n(預設選項):代表就近(near)複製。一個資料塊的多個複製在不同磁碟裡有相同的偏移量。這種佈局提供和RAID 0陣列相似的讀寫效能。
- o代表偏移量(offset)複製。塊並不是在條帶裡面複製的,而是整個條帶一起復制,但是迴圈會打亂,所以同一個分割槽中複製的塊會出現在不同的磁碟。因此,一個塊的後續複製會出現在下一個磁碟中,一個塊接著一個塊。為了在RAID 10陣列中使用這種佈局,在建立陣列的命令中新增--layout=o2選項。
- f代表遠端(far)複製(多個複製在不同的磁碟中具有不同的偏移量)。這種佈局提供更好的讀效能但帶來更差的寫效能。因此,對於讀遠遠多於寫的系統來說是最好的選擇。為了在RAID 10陣列中使用這種佈局,在建立陣列的命令中新增--layout=f2。
跟在佈局選項n、f和o後面的數字代表所需的每一個資料塊的副本數目。預設值是2,但可以是2到陣列中磁碟數目之間的某個值。提供足夠的副本數目可以最小化單個磁碟上的I/O影響。
- Chunk Size,參考Linux RAID wiki的說明,是寫入磁碟的最小資料單元。最佳的chunk大小取決於I/O操作的速率和相關的檔案大小。對於大量的寫操作,透過設定相對較大的chunk可以得到更低的開銷,但對於主要儲存小檔案的陣列來說更小的chunk效能更好。為了給RAID 10指定一個chunk大小,在建立陣列的命令中新增--chunk=desiredchunksize。
不幸的是,並沒有設定一個大小就能適合全域性的策略來提高效能,但可以參考下面的一些方案。
- 檔案系統:就整體而言,XFS據說是最好的,當然EXT4也是不錯的選擇。
- 最佳佈局:遠端佈局能提高讀效能,但會降低寫效能。
- 副本數目:更多的副本能最小化I/O影響,但更多的磁碟需要更大的花費。
- 硬體:在相同的環境下,SSD比傳統(機械旋轉)磁碟更能帶來出效能提升
使用DD進行RAID效能測試
下面的基準測試用於檢測RAID 10陣列(/dev/md0)的效能。
1. 寫操作
往磁碟中寫入大小為256MB的單個檔案:
# dd if=/dev/zero of=/dev/md0 bs=256M count=1 oflag=dsync
寫入1000次512位元組:
# dd if=/dev/zero of=/dev/md0 bs=512 count=1000 oflag=dsync
使用dsync標記,dd可以繞過檔案系統快取,在RAID陣列上執行同步寫。這個選項用於減少RAID效能測試中快取的影響。
2. 讀操作
從陣列中複製256KiB*15000(3.9 GB)大小內容到/dev/null:
# dd if=/dev/md0 of=/dev/null bs=256K count=15000
使用Iozone進行RAID效能測試
Iozone是一款檔案系統基準測試工具,用來測試各種磁碟I/O操作,包括隨機讀寫、順序讀寫和重讀重寫。它支援將結果匯出為微軟的Excel或LibreOffice的Calc檔案。
在CentOS/RHEL 7上安裝Iozone
先保證Repoforge可用,然後輸入:
# yum install iozone
在Debian 7上安裝Iozone
# aptitude install iozone3
下面的iozone命令會在RAID-10陣列中執行所有測試:
# iozone -Ra /dev/md0 -b /tmp/md0.xls
- -R:往標準輸出生成相容Excel的報告
- -a:以全自動模式執行所有的測試,並測試各種記錄/檔案大小。記錄大小範圍:4K-16M,檔案大小範圍:64K-512M。
- -b /tmp/md0.xls: 把測試結果儲存到一個指定的檔案中
希望這篇文章對你有所幫助,如果想到任何想法或建議可能會提升RAID 10的效能,請講出來。
via: http://xmodulo.com/setup-raid10-linux.html
作者:Gabriel Cánepa 譯者:KayGuoWhu 校對:wxy
相關文章
- linux RAID10磁碟陣列損壞的修復LinuxAI陣列
- RAID磁碟陣列AI陣列
- 磁碟陣列RAID陣列AI
- 構建最簡單陣列陣列
- 磁碟陣列RAID概述陣列AI
- 磁碟陣列關於Raid0,Raid1,Raid5,Raid10陣列AI
- Linux下RAID磁碟陣列的原理與搭建LinuxAI陣列
- RAID磁碟陣列與配置AI陣列
- 認識RAID磁碟陣列AI陣列
- RAID磁碟陣列應用AI陣列
- RAID10磁碟陣列損壞修復操作AI陣列
- 檢視Linux系統是否使用RAID陣列資訊LinuxAI陣列
- mdadm linux 做軟磁碟陣列 raid0Linux陣列AI
- 如何在AWS上構建Apache DolphinSchedulerApache
- JZ-051-構建乘積陣列陣列
- 1441 用棧操作構建陣列陣列
- 磁碟陣列檢視命令 RAID陣列AI
- RAID 磁碟陣列的應用AI陣列
- 構建一個 Javascript 多維陣列構造器JavaScript陣列
- 《劍指offer》:[52]構建乘積陣列陣列
- 陣列結構之陣列陣列
- 磁碟陣列RAID10優勢全面詳解_轉摘陣列AI
- 磁碟陣列RAID工具:SoftRaid for Mac陣列AIMac
- linux raid 0 raid 1 raid 10LinuxAI
- 如何在Windows上從原始碼構建OpenJFX 8Windows原始碼
- 如何在CoreOS上構建你的WordPress應用
- 教程:RAID-5磁碟陣列故障分析AI陣列
- 如何在阿里雲上構建高可用應用阿里
- 如何在Linux上從命令列嗅探HTTP流量Linux命令列HTTP
- Raid0/raid1/raid5磁碟陣列資料恢復思路AI陣列資料恢復
- 如何使用linux程式mdadm建立軟體RAID1軟陣列LinuxAI陣列
- Linux 陣列Linux陣列
- CentOS8中配置RAID磁碟陣列CentOSAI陣列
- PHP 陣列轉樹結構/樹結構轉陣列PHP陣列
- 如何在 bash 中使用索引陣列索引陣列
- 陣列(ArrayPool陣列池、Span<T>結構)陣列
- raid5陣列硬體故障修復方法/條帶分析/陣列重組AI陣列
- 力扣 - 劍指 Offer 66. 構建乘積陣列力扣陣列