1. 程式人生 > 實用技巧 >如何在Linux上設定RAID 10,確保高效能和容錯的磁碟輸入/輸出

如何在Linux上設定RAID 10,確保高效能和容錯的磁碟輸入/輸出

RAID 10(又叫RAID 1+0或映象條帶)陣列結合了RAID 0和RAID 1兩者的功能特性,從而提供了高效能、容錯的磁碟輸入/輸出操作。在RAID 0中,讀取/寫入操作跨多個驅動器並路執行;在RAID 1中,一模一樣的資料寫入到兩個或多個驅動器上。

在本教程中,我將介紹如何使用5只相同的8 GiB磁碟,構建一個軟體RAID 10陣列。雖然用來構建RAID 10陣列的最大磁碟數量是4只(比如一組條帶化的兩個映象),但我們將增添一隻額外的備用驅動器,以防其中一個主驅動器出現故障。我們還將介紹一些工具,你以後可以用來分析RAID陣列的效能。

請注意:全面深入地介紹RAID 10及其他分割槽方案(以及不同尺寸的驅動器和檔案系統)的所有優缺點不在本文的探討範圍之內。

RAID 10陣列是如何工作的?

如果你需要實施一種支援輸入/輸出密集型操作(比如資料庫、電子郵件和網站伺服器)的儲存解決方案,RAID 10是正確的選擇。下面會介紹其中原委。不妨先看一看下圖。

映象1和映象2的條帶


設想一下某個檔案由上圖中的資料塊A、B、C、D和E組成。每個RAID 1映象集(比如映象1或映象2)將資料塊複製到兩個裝置中的每一個。由於這種配置,寫入效能有所下降,因為每個資料塊都要寫入兩次,每隻磁碟各寫入一次,而相比從單隻讀盤讀取資料,讀取效能依然沒有變化。優點在於,這種方案提供了冗餘性,因為除非每個映象中的多隻磁碟出現故障,否則可以維持正常的磁碟輸入/輸出操作。

RAID 0條帶的工作原理是,把資料劃分成多個數據塊,並將資料塊A寫入到映象1,同時將資料塊B寫入到映象2,依次類推,因而提高了總體的讀取和寫入效能。另一方面,沒有一個映象含有向主集提交的任何一部分資料的完整資訊。這意味著,如果其中一個映象出現故障,整個RAID 0元件(以及因而RAID 10集)就無法操作,資料出現無法恢復的丟失。

構建RAID 10陣列

RAID 10陣列有兩種可能的構建方案:複雜方案(只要一步就能構建),或巢狀方案(構建方法是,先構建兩個或多個RAID 1陣列,然後把它們用作RAID 0中的元件裝置)。在本教程中,我們將介紹構建複雜的RAID 10陣列,原因在於這種陣列讓我們可以使用數量為奇數或偶數的磁碟,並且可以作為單一RAID裝置來加以管理,而不是介紹巢狀方案(只允許數量為偶數的驅動器,必須作為巢狀裝置來加以管理, RAID 1和RAID 0分開來處理)。

假設你已安裝了mdadm,該後臺程式在你的系統上執行。想了解詳細內容,請參閱這篇教程:http://xmodulo.com/create-software-raid1-array-mdadm-linux.html。另外假設已在每隻磁碟上建立了主分割槽sd[bcdef]1。因而,ls -l /dev | grep sd[bcdef]的輸出應該是這樣:


接下來使用下面這個命令,構建一個RAID 10陣列:

# mdadm --create --verbose /dev/md0 --level=10 --raid-devices=4 /dev/sd[bcde]1 --spare-devices=1 /dev/sdf1


該陣列構建完畢後(構建過程應該用不了幾分鐘),# mdadm --detail /dev/md0的輸出應該是這樣:


在我們繼續下一步之前有幾點需要予以說明。

1. Used Dev Space表明了陣列所使用的每個成員裝置的容量。

2. Array Size是指陣列的總大小。就RAID 10陣列而言,這相當於(N*C)/M,其中N是指活動裝置的數量,C是指活動裝置的容量,M則指每個映象中的裝置數量。所以在這裡,(N*C)/M相當於(4*8GiB)/2 = 16GiB。

3. Layout指資料佈局的具體細節。可能的佈局值如下所示。

n(預設選項):意味著 near拷貝。一個數據塊的多個拷貝在不同的裝置中處於相似的偏移(offset)。這種佈局提供的讀取和寫入效能與RAID 0陣列的效能相似。


o表明offset拷貝。不是資料段在條帶裡面複製,而是整個條帶被複制,但由一個裝置輪轉,那樣重複資料塊分佈在不同的裝置上。因而,隨後的資料塊拷貝在下一個驅動器中,下移一個數據段。想讓你的RAID 10陣列使用這種佈局,將--layout=o2新增到用來構建陣列的命令。


f 表明far拷貝(偏移全然不同的多個拷貝)。這種佈局提供了較好的讀取效能,卻提供了較差的寫入效能。因而,這種方案最適合需要支援的讀取操作比寫入操作多得多的系統。想讓你的RAID 10陣列使用這種佈局,將--layout=f2新增到用來構建陣列的命令。


--layout選項中n、f和o後面所跟的數字表明瞭所需的每個資料塊的副本數量。預設值是2,但它可以是磁碟中裝置數量的2倍數。通過提供數量足夠的副本,你就能儘量減少單個驅動器的輸入/輸出影響。

4.Chunk Size,按照Linux RAID維基,資料段大小(chunk size)指寫入到裝置的最小單位的資料。最優化的資料段大小取決於輸入/輸出操作的速度以及相關檔案的大小。如果寫入大檔案,只要確保資料段相當大,有望看到較低的開銷,而主要儲存小檔案的陣列有望更加得益於較小的資料段。想為你的RAID 10陣列指定某個資料段大小,將--chunk=desired_chunk_size新增到用來構建陣列的命令。

遺憾的是,沒有一應俱全的方法可以提升效能。下面是值得考慮的幾個指導準則。

檔案系統:總的來說,XFS據說是最好的檔案系統,而EXT4仍然是個不錯的選擇。

最佳化佈局:far佈局提升了讀取效能,但降低了寫入效能。

副本數量:更多的副本儘量減小了輸入/輸出影響,但需要更多的磁碟時也增加了成本。

硬體:固態硬碟比傳統的旋轉磁碟更有可能顯示效能提升的優點(在同一環境下)。


使用DD測試RAID效能

下列基準測試可以用來核查我們的RAID 10陣列(/dev/md0)的效能。

1. 寫入操作

256MB大小的單個檔案被寫入到裝置上:

# dd if=/dev/zero of=/dev/md0 bs=256M count=1 oflag=dsync

512位元組被寫入1000次:

# 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(http://www.iozone.org)是一種檔案系統基準測試工具,讓我們可以測量的眾多磁碟輸入/輸出操作,包括隨機讀取/寫入、順序讀取/寫入和重新讀取/重新寫入。它可以將結果匯出到微軟Excel或LibreOffice Calc檔案。

將Iozone安裝到CentOS/RHEL 7上

啟用Repoforge軟體庫,然後執行下列命令:

# yum install iozone

將Iozone安裝到Debian 7上

# aptitude install iozone3

下面這個iozone命令將在RAID-10陣列中執行所有測試:

# iozone -Ra /dev/md0 -b /tmp/md0.xls

-R:生成與Excel相容的報告,併發送到標準輸出裝置。

-a:在全自動模式下執行iozone,涵蓋所有測試和可能的記錄/檔案大小。記錄大小:4k至16M,檔案大小:64k至512M。

-b /tmp/md0.xls:將測試結果儲存在某個指定的檔案。

但願本文有所幫助。如果您對於提升RAID 10的效能方面有何想法或高招,歡迎交流。

英文:http://xmodulo.com/setup-raid10-linux.html


轉載於:https://blog.51cto.com/lucifer119/1562499