电竞比分网-中国电竞赛事及体育赛事平台

分享

RedHat官方文檔:RAID陣列

 _一往情深 2015-04-07
EX436第四章:RAID陣列

4.00 本章概述:

   -了解RedHat Linux下各種類型的RAID陣列;

   -學(xué)習(xí)如何管理高級的軟RAID;

   -學(xué)習(xí)如何優(yōu)化軟RAID陣列;

   -規(guī)劃和實(shí)現(xiàn)存儲陣列的增長;


4.01 獨(dú)立的磁盤冗余陣列(RAID):

     RAID是Redundant Array of Independent Disk的縮寫,中文翻譯過來就叫做“獨(dú)立的冗余磁盤陣列”。磁盤技術(shù)還沒發(fā)展到如今這樣強(qiáng)大的時(shí)候,磁盤的價(jià)格非常昂貴,尤其是大容量的磁盤,更是天價(jià)。為了滿足企業(yè)級的存儲需求,早期的RAID產(chǎn)生了,最初只是為了組合廉價(jià)的小容量磁盤,以代替昂貴的大容量磁盤,后來隨著數(shù)據(jù)存儲的發(fā)展,RAID才慢慢突出其在提高數(shù)據(jù)訪問速度、提高數(shù)據(jù)可用性上的特點(diǎn)。

     RAID可以將多個物理磁盤組合成一個邏輯單元,對于操作系統(tǒng)來說,它將RAID看成一個塊設(shè)備,而在RAID底層其實(shí)是由多個塊設(shè)備通過不同的冗余算法組合而成的邏輯設(shè)備。本章中講的RAID是圍繞軟件級RAID展開的,因?yàn)檐汻AID是由操作系統(tǒng)層提供,不需要RAID卡等硬件設(shè)備也能輕松做實(shí)驗(yàn),其次是軟件RAID比硬件RAID在類型上和功能上都要豐富,更利于我們充分深入地理解RAID陣列。

     軟RAID有以下幾種類型:

     RAID0,RAID1,RAID5,RAID6,RAID10等等,這些具有代表性的RAID我們會在下面幾節(jié)內(nèi)容中詳細(xì)講解。

     對于RAID的功能相信大家一定不陌生:首先是其冗余校驗(yàn)算法在保證數(shù)據(jù)完整性上的作用,同時(shí)也實(shí)現(xiàn)了容錯的功能,提高了陣列的吞吐率,最實(shí)在的是提高了存儲陣列的容量。

     很多朋友搞不清楚軟件RAID和硬件RAID的本質(zhì)區(qū)別,我這里做個講解。軟件級的RAID是基于操作系統(tǒng)層面的,它的RAID抽象層是由系統(tǒng)實(shí)現(xiàn)的,它的各磁盤之間的數(shù)據(jù)分布、校驗(yàn)碼運(yùn)算、陣列修復(fù)等都是由系統(tǒng)內(nèi)核及系統(tǒng)CPU提供的,只要操作系統(tǒng)出現(xiàn)了問題,這個RAID也將朝不保夕,所以軟件RAID的可靠性是完全達(dá)不到企業(yè)級要求的;硬件級的RAID則是將很多重要功能抽離出來,嵌入到硬件RAID卡上,最重要一點(diǎn)是硬件RAID卡自身帶有專門設(shè)計(jì)用于RAID算法運(yùn)算的CPU,這樣就不需要占用系統(tǒng)CPU的資源,解決了可能因系統(tǒng)CPU中斷調(diào)度阻塞而造成的數(shù)據(jù)瓶頸。

     在RadHat Linux下的軟件RAID工具是mdadm,通過這個工具我們可以創(chuàng)建各種RAID陣列,查看詳細(xì)RAID信息等等重要操作,后面我們會詳細(xì)說明使用方法。


4.02 RAID0條帶卷:

     RAID0又叫做Stripe,即條帶卷,是所有RAID級別中性能最好的陣列類型。RAID0之所以具有很高的性能,是因?yàn)镽AID0實(shí)現(xiàn)了帶區(qū)組,它將連續(xù)的數(shù)據(jù)分散地存儲到多個磁盤驅(qū)動器中。

     當(dāng)系統(tǒng)有數(shù)據(jù)請求時(shí),就可以同時(shí)由多個磁盤中并行讀取數(shù)據(jù)。這種數(shù)據(jù)上的并行操作充分地利用了總線的帶寬,所以數(shù)據(jù)吞吐率大大提高。同時(shí)磁盤驅(qū)動器也能相對地負(fù)載均衡,從而顯著地提高磁盤的整體存取性能。

     要實(shí)現(xiàn)RAID0起碼要兩個以上的磁盤驅(qū)動器,如果某次請求所需的數(shù)據(jù)剛好分布在不同的驅(qū)動器上時(shí),此時(shí)效率性能最佳,因?yàn)榇藭r(shí)可以進(jìn)行并行的讀?。蝗绻钄?shù)據(jù)恰好在同一個驅(qū)動器上,則無法并行讀取。

     雖然RAID0在存取性能上有優(yōu)勢,但是其弱點(diǎn)也相當(dāng)明顯。RAID0沒有數(shù)據(jù)的差錯控制,不能保證數(shù)據(jù)的完整性可靠性,當(dāng)陣列中某個驅(qū)動器損壞時(shí),將無法讀取正確的數(shù)據(jù)。但是RAID0應(yīng)用在一些對于數(shù)據(jù)可靠性要求不高的應(yīng)用上還是不錯的,例如電影存儲、圖片站存儲等等。

     RAID0配置實(shí)例:

     # mdadm --create /dev/md0 --level=0 --raid-devices=2 --chunk=64 /dev/sd[ab]1

     # mke2fs -j -b 4096 -E stride=16 /dev/md0

     在RAID中有block、chunk和stride這個3個重要參數(shù),它們描述了數(shù)據(jù)在底層的組織和分布。在創(chuàng)建RAID設(shè)備的階段首先要指定chunk的大小,如--chunk=64,chunk塊其實(shí)是RAID數(shù)據(jù)分布的基本單位,如上面創(chuàng)建的RAID0,數(shù)據(jù)是分散存儲在2個磁盤中的,如在第一塊盤寫入了一個chunk時(shí),就轉(zhuǎn)到第二塊盤繼續(xù)寫數(shù)據(jù),也就是以chunk為單位輪轉(zhuǎn)地在多塊磁盤上寫數(shù)據(jù)。

     而block和stride則是在格式化創(chuàng)建文件系統(tǒng)時(shí)指定的,block好理解,就是文件系統(tǒng)層面上劃分的基本塊,你可以針對你所要存儲的數(shù)據(jù)的特點(diǎn)來指定更為合適的Block Size;而stride也成為跨步數(shù),stride=chunk/block,就是說,當(dāng)你的chunk=64,block=4096時(shí),你在第一塊的文件系統(tǒng)上寫了16個Block(16個跨步)才達(dá)到一個Chunk,也就是在磁盤上進(jìn)行16個跨步的寫操作才輪轉(zhuǎn)到下一塊磁盤。


4.03 RAID1鏡像卷:

     RAID1又稱為鏡像卷,使用RAID1至少需要2塊以上的磁盤,當(dāng)數(shù)據(jù)寫入時(shí),會在兩塊盤中寫入完全相同的數(shù)據(jù),形成鏡像結(jié)構(gòu),當(dāng)一組盤出現(xiàn)問題時(shí),可以使用鏡像盤,以此提高存儲的容錯能力。

     RAID1的容錯策略是完全備份,同樣的數(shù)據(jù)在RAID1陣列中有兩份,這樣也使得讀性能有了很大的提高,因?yàn)樵谧x取數(shù)據(jù)時(shí)可以使主磁盤和鏡像盤兩個驅(qū)動器并行地進(jìn)行讀取。這樣使得RAID1具有極佳的讀性能。

     RAID1支持熱替換,即可以在在線的狀態(tài)下取下受損的磁盤,替換上新的磁盤,此時(shí)RAID將自動進(jìn)行鏡像修復(fù)。但是由于RAID1是完全備份的策略,且出錯校驗(yàn)較為嚴(yán)格,如果是軟件級的RAID1則將會大大影響服務(wù)器的性能,尤其是在服務(wù)器負(fù)載高峰期。

     RAID1配置實(shí)例:

     # mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sd[ab]1


4.04 RAID5奇偶校驗(yàn)卷:

     RAID5是帶有分布式奇偶校驗(yàn)位的塊級別條帶卷,需要3塊及以上個磁盤,RAID5具有很高的讀性能,但是寫性能則一般,因?yàn)樵跀?shù)據(jù)寫入的過程中要進(jìn)行奇偶校驗(yàn)運(yùn)算并將校驗(yàn)碼寫到磁盤中。

     RAID5在物理底層數(shù)據(jù)存儲是以“異或”運(yùn)算來實(shí)現(xiàn)校驗(yàn)的,如下表,該RAID5是由以下3塊磁盤組成的,數(shù)據(jù)的寫入都是分布式的,并沒有哪一塊盤是專門用于存放校驗(yàn)碼的。

Disk 1

Disk2

Disk3

1

1

0

1

0

1

0

1

1

     如第一行,假如1,2號盤寫入的是數(shù)據(jù),則第3塊盤則根據(jù)前兩個數(shù)據(jù)做“異或”運(yùn)算的結(jié)果存放起來,即 1 XOR 1 = 0,當(dāng)任一盤出現(xiàn)問題,例如Disk1損壞,則將Disk2和Disk3上的數(shù)據(jù)進(jìn)行“異或”運(yùn)算就能得出Disk1上的數(shù)據(jù),即 1 XOR 0 = 1。

     RAID5在檢測到某盤損壞時(shí)將自動進(jìn)入降級模式,限制讀寫速度以保證現(xiàn)有已損壞的陣列不會出現(xiàn)更大的問題;RAID5支持熱備盤,即當(dāng)檢測到某磁盤損壞時(shí),陣列會自動將熱備盤頂上,并自動進(jìn)行數(shù)據(jù)修復(fù)動作。

     RAID5的磁盤利用率:(N-1/N)*100% (N為磁盤數(shù))

     RAID5配置實(shí)例:

     # mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sd[abc]1


4.05 RAID5的校驗(yàn)和數(shù)據(jù)分布:

     如圖就是我上面提到過的底層數(shù)據(jù)分布,該RAID5陣列是由4個磁盤組成的,其中白色的框代表奇偶校驗(yàn)信息,可以看出數(shù)據(jù)的分布式存儲以及條帶的組成。以上數(shù)據(jù)分布模型采用的是“左對稱奇偶校驗(yàn)”策略,這在RHEL中是默認(rèn)使用的策略。


4.06 RAID5的數(shù)據(jù)排列算法:

     RAID陣列的數(shù)據(jù)分布有以下4種算法,分別是左對稱、右對稱、左非對稱、右非對稱,而RAID5默認(rèn)使用左對稱的數(shù)據(jù)分布算法。

 Left Asymmetric左非對稱              Right Asymmetric右非對稱

sda1 sdb1 sdc1 sde1                  sda1 sdb1 sdc1 sde1

 D0   D1   D2   P                    P    D0   D1   D2

 D3   D4   P    D5                    D3   P    D4   D5

 D6   P    D7   D8                    D6   D7   P    D8

 P    D9   D10  D11                   D9   D10  D11  P     

 D12  D13  D14  P                     P    D12  D13  D14

=================================================================

 Left Symmetric左對稱               Right Symmetric右對稱

sda1 sdb1 sdc1 sde1                sda1 sdb1 sdc1 sde1

 D0   D1   D2   P                  P    D0   D1   D2

 D4   D5   P    D3                 D5   P    D3   D4

 D8   P    D6   D7                 D7   D8   P    D6

 P    D9   D10  D11                D9   D10  D11  P

 D12  D13  D14  P                  P    D12  D13  D14

     在使用mdadm創(chuàng)建RAID陣列時(shí),可以使用--layout=<type>來指定數(shù)據(jù)和奇偶校驗(yàn)信息在陣列如何分布存儲,此處的<type>有如下4個參數(shù):

     Left-asymmetric:對照上面的左非對稱算法的數(shù)據(jù)分布實(shí)例,該算法描述的數(shù)據(jù)分布是,在陣列上從第一個陣列段到最后一個陣列段依次的存入數(shù)據(jù)塊,與此同時(shí),奇偶校驗(yàn)塊P也從最后一個陣列段到第一個陣列段依次寫入。

     Right-asymmetric:數(shù)據(jù)塊在陣列上從第一個陣列段到最后一個陣列段依次的存入數(shù)據(jù)塊,與此同時(shí),奇偶校驗(yàn)塊P也從第一個陣列段到最后一個陣列段依次寫入。

     Left-symmetric:這個是RAID5默認(rèn)的分布算法,也是對于讀請求性能最佳的數(shù)據(jù)分布機(jī)制。奇偶校驗(yàn)信息P從最后一個陣列段到第一個陣列段依次寫入。數(shù)據(jù)塊從左向右寫,且每行的數(shù)據(jù)塊都先在校驗(yàn)塊P后面開始寫,直到寫滿。

     Right-symmetric:奇偶校驗(yàn)信息P從第一個陣列段到最后一個陣列段依次寫入。數(shù)據(jù)塊從左向右寫,且每行的數(shù)據(jù)塊都先在校驗(yàn)塊P后面開始寫,直到寫滿。


4.07 RAID5數(shù)據(jù)更新的開銷:

     對于RAID5來說,每次數(shù)據(jù)更新需要如下4次I/O操作:

     -從磁盤上讀出需要更新的某個數(shù)據(jù);

     -更新該數(shù)據(jù),但是此時(shí)奇偶校驗(yàn)信息還沒更新過來;

     -讀出其他塊的數(shù)據(jù)并計(jì)算出校驗(yàn)信息;

     -寫回更新后的信息和校驗(yàn)信息;

     RAID5的數(shù)據(jù)更新開銷相對較大,以上4次I/O操作對于讀寫操作頻繁的應(yīng)用是致命,其性能的下降被操作系統(tǒng)層強(qiáng)大的cache所掩蓋了,對于性能的下降感覺不明顯。


4.08 RAID6雙份校驗(yàn)卷:

     RAID6即帶有雙份分布式奇偶校驗(yàn)信息的塊級別條帶卷。它與RAID5很相似,但是比RAID5多設(shè)了一個校驗(yàn)位,也就是存儲了兩份的校驗(yàn)信息。所以RAID6陣列最少需要4塊磁盤。

     由于RAID6在進(jìn)行寫操作時(shí)需要計(jì)算兩個校驗(yàn)碼,所以其寫性能較RAID5要差,但是容錯能力卻有了大大的提升。RAID6可以允許2塊以上的磁盤出現(xiàn)問題,當(dāng)磁盤損壞時(shí),陣列進(jìn)入降級模式,直到陣列修復(fù)后才會取消降級保護(hù)模式。

     RAID6的磁盤利用率:(1-2/N)*100% (N為磁盤數(shù))

     RAID6配置實(shí)例:

     # mdadm --create /dev/md0 --level=6 --raid-devices=4 /dev/sd[abcd]1


4.09 RAID6的校驗(yàn)和數(shù)據(jù)分布:


     上圖是RAID6的數(shù)據(jù)塊分布圖,了解RAID6的關(guān)鍵在于了解其如何在損壞2個以上的磁盤時(shí)依然保證數(shù)據(jù)的完整性。如圖Stripe1中,Device1和Divice2上保存了數(shù)據(jù)塊,Device3和Device4上則是校驗(yàn)信息。Device3的校驗(yàn)信息可以由Device1-3計(jì)算所得,Device4的校驗(yàn)信息可以由Device2-4計(jì)算所得。

     當(dāng)Device1和Device2損壞時(shí),Device4上的校驗(yàn)信息就可以結(jié)合Device3和Device4來計(jì)算出Device2上的數(shù)據(jù),Device1則利用Device2和3來計(jì)算,實(shí)現(xiàn)數(shù)據(jù)的冗余校驗(yàn),保證數(shù)據(jù)的完整性。


4.10 RAID10陣列卷:

     RAID10是一種嵌套的RAID陣列,結(jié)合了RAID1和RAID0的特點(diǎn),既有RAID1的高容錯能力,也具有RAID0的高性能。RAID10需要4塊及以上個磁盤。

     RAID10磁盤利用率:(1/N)*100% (N為磁盤數(shù))

     以下是一個RAID10配置實(shí)例:

     磁盤sda1和sdb1創(chuàng)建成RAID1陣列,設(shè)備為/dev/md0;磁盤sdc1和sdd1創(chuàng)建成RAID1陣列,設(shè)備為/dev/md1;再將兩個RAID1陣列組合成一個RAID0陣列:

     # mdadm -C /dev/md0 --level=1 --raid-devices=2 /dev/sd[ab]1

     # mdadm -C /dev/md1 -a yes --level=1 --raid-devices=2 /dev/sda[cd]1

     # mdadm -C /dev/md2 -a yes --level=10 --raid-devices=2 /dev/md[01]

     查看RAID設(shè)備的詳細(xì)信息:

     # mdadm -D /dev/md2


4.11 條帶陣列的參數(shù):

     調(diào)整條帶卷的參數(shù)對于優(yōu)化陣列的性能是相當(dāng)重要的。對于RAID0、RAID5、RAID6陣列主要有Chunk Size和Stride兩個重要參數(shù)。

     Chunk Size是指陣列中在每個物理磁盤上分布的數(shù)據(jù)塊的大小,通常默認(rèn)為64K,可以根據(jù)所提供服務(wù)的需求來進(jìn)行適當(dāng)?shù)膬?yōu)化。Stride即跨步數(shù),是在為陣列創(chuàng)建文件系統(tǒng)時(shí)可以指定的參數(shù),由Chunk Size / Block Size計(jì)算所得。

     減小Chunk Size的大小意味著文件在存儲陣列中被分得更小,增大Chunk Size則可以使得文件保存在一個Chunk中,雖然設(shè)置大的Chunk有利于寫操作,但是過大的Chunk會使得RAID的讀性能不能很好地發(fā)揮,所以,盲目地加大Chunk Size有時(shí)會有反效果。


4.12 RAID狀態(tài)信息/proc/mdstat:

     /proc/mdstat中保存了當(dāng)前所有RAID陣列的詳細(xì)信息,我們可以通過查看該文件來獲取RAID的狀態(tài)信息??梢酝ㄟ^下面這條命令做實(shí)時(shí)監(jiān)控:

     # watch -n .5 'cat /proc/mdstat' (每隔0.5秒查看一次)

     以下是各種狀態(tài)信息的實(shí)例:

Initial sync'ing of a RAID1 (mirror):

Personalities : [raid1]

md0 : active raid1 sda5[1] sdb5[0]

      987840 blocks [2/2] [UU]

      [=======>.............]  resync = 35.7% (354112/987840) finish=0.9min (RAID1修復(fù)中。。。)

speed=10743K/sec

-----------------------------------------------------------------

Active functioning RAID1:

# cat /proc/mdstat

Personalities : [raid1]

md0 : active raid1 sda5[1] sdb5[0]

      987840 blocks [2/2] [UU]

unused devices: <none>

-----------------------------------------------------------------

Failed half of a RAID1:

# cat /proc/mdstat

Personalities : [raid1]

md0 : active raid1 sda5[1](F) sdb5[0]

      987840 blocks [2/1] [U_] (該RAID1損壞了一個磁盤)

unused devices: <none>


4.13 詳細(xì)的RAID狀態(tài)信息:

     要想獲取詳細(xì)的RAID信息,可以使用如下命令:

     # mdadm --detail /dev/md0 (--detail可以簡寫為-D)

/dev/md0:

        Version : 00.90.03

  Creation Time : Tue Mar 13 14:20:58 2007

     Raid Level : raid1

     Array Size : 987840 (964.85 MiB 1011.55 MB)

    Device Size : 987840 (964.85 MiB 1011.55 MB)

   Raid Devices : 2

  Total Devices : 2

Preferred Minor : 0

    Persistence : Superblock is persistent


    Update Time : Tue Mar 13 14:25:34 2007

          State : clean, degraded, recovering

 Active Devices : 1

Working Devices : 2

 Failed Devices : 0

  Spare Devices : 1


 Rebuild Status : 60% complete


           UUID : 1ad0a27b:b5d6d1d7:296539b4:f69e34ed

         Events : 0.6


    Number   Major   Minor   RaidDevice State

       0       3        5        0      active sync   /dev/sda5

       1       3        6        1      spare rebuilding   /dev/sdb5

     由以上的RAID信息,我們可以看出,這是一個由兩個磁盤組成的RAID1陣列,該RAID1狀態(tài)為Clean、degraded、recovering,即表示陣列數(shù)據(jù)沒有遭到污染,目前進(jìn)入降級保護(hù)模式,且正在處于修復(fù)RAID過程中,目前已修復(fù)完成60%。

     磁盤/dev/sda5處于活躍狀態(tài),而/dev/sdb5則正在參與修復(fù),一旦修復(fù)完成,RAID將取消降級模式,恢復(fù)原有的RAID性能。

4.14 SYSFS接口:

     SYSFS即為/sys,是在系統(tǒng)啟動后根據(jù)系統(tǒng)信息實(shí)時(shí)更新的文件信息庫,這些信息只能查看,不能隨意修改,否則可能導(dǎo)致塊設(shè)備損壞。我們可以通過查看RAID在SYSFS上的信息來更加全面地了解RAID陣列。

     # cat /sys/block/mdX/md

     通過以上命令可以查看到該陣列保存了以下信息:

      Level:指定了RAID陣列的級別;

      raid_disks:該陣列所組成的磁盤;

      chunk_size (RAID0,5,6,10):對于RAID0,5,6,10則有指定Chunk Size;

      component_size:本參數(shù)是針對鏡像卷的,指定各盤統(tǒng)一的可用容量大??;

      new_dev:可寫的文件,里面可以用“major:minor”這樣的字段來描述要添加到陣列中的新磁盤;

      safe_mode_delay:文件內(nèi)容是一個時(shí)間參數(shù),默認(rèn)是200ms,如果經(jīng)過了200ms時(shí)間沒有對陣列有寫請求,則該陣列將會被認(rèn)定為clean狀態(tài);

      sync_speed_{min,max}:當(dāng)陣列損壞,進(jìn)入修復(fù)模式的時(shí)候,該文件內(nèi)顯示當(dāng)前陣列修復(fù)的速度。單位為kiB/s。

      sync_action:用于監(jiān)控和控制陣列修復(fù)重建的過程。里面可以設(shè)置為resync、recover、idle、check、repair 5項(xiàng)中的任一項(xiàng)。

      Stripe_cache_size:用于為所有的讀寫操作做同步。增加這個數(shù)值可以提升該陣列的讀寫性能,但是將消耗較多的系統(tǒng)內(nèi)存。

     在陣列信息目錄,即/sys/block/mdX/目錄中,以上陣列信息保存在以它們命名的文件中,可以如此查看:

     # cat /sys/block/mdX/level


4.15 RAID的配置文件:

     對于軟件級RAID來說,其在操作系統(tǒng)層最重要的配置文件就是/etc/mdadm.conf。這個配置文件用來簡化配置RAID陣列的架構(gòu),可以使得多個RAID陣列可以共享熱備盤,可以通過以下命令創(chuàng)建一個已經(jīng)存在的陣列的信息:

# mdadm --verbose --examine --scan

     配置文件示例:

DEVICE partitions

ARRAY /dev/md0 level=raid1 num-devices=2 UUID=c5dac4d3:2d6b9861:ab54c1f6:27c15a12

        devices=/dev/sda2,/dev/sdc2

ARRAY /dev/md1 level=raid0 num-devices=2 UUID=4ed6e3cc:f12c94b1:a2044461:19e09821

        devices=/dev/sda1,/dev/sdc1

     每個RAID陣列在配置文件中都是以ARRAY開頭指定,每個陣列信息包括以下幾個參數(shù)信息:uuid、super-minor、name、devices、level、num-devices、spares、spare-group、auto、bitmap、metadata等。


4.16 監(jiān)控RAID:

     RAID陣列提供了事件的通知功能,其實(shí)就是對RAID陣列狀態(tài)的監(jiān)控,在設(shè)置對某個RAID陣列做監(jiān)控之前,首先應(yīng)確定本機(jī)的郵件功能是否可以正常工作。

     設(shè)置郵件做事件的通知需要在/etc/mdadm.conf中加入相應(yīng)的參數(shù),如下3個參數(shù):

     MAILADDR root@example.com

     MAILFROM root@node1.example.com

     PROGRAM /usr/sbin/script.sh

     其中的PROGRAM參數(shù)指的是當(dāng)事件發(fā)生時(shí)將執(zhí)行script.sh這個腳本,如果該陣列中有某部分?jǐn)?shù)據(jù)非常重要,那么當(dāng)磁盤損壞的時(shí)候,可以使用這個參數(shù)執(zhí)行腳本,自動地備份重要的數(shù)據(jù)。

     可以通過以下命令測試設(shè)置:

# mdadm --monitor --scan --oneshot --test

     為了設(shè)置的監(jiān)控生效,必須保證mdmonitor進(jìn)程正確地運(yùn)行:

# chkconfig mdmonitor on ; service mdmonitor start


4.17 重新條帶化/重塑RAID設(shè)備:

     重新條帶化或重塑RAID陣列其實(shí)就是將原來陣列中的數(shù)據(jù)重新以新的層次排列成新的陣列。當(dāng)開始重新條帶化的時(shí)候,陣列的關(guān)鍵信息所在的關(guān)鍵區(qū)(Critical Section)將會被重新寫入新陣列的架構(gòu)信息,但是在重寫關(guān)鍵區(qū)的過程中,一旦遇到系統(tǒng)崩潰或者掉電的情況,原本陣列的關(guān)鍵區(qū)信息將會被損毀,導(dǎo)致陣列無法使用。

     為了避免關(guān)鍵區(qū)數(shù)據(jù)的丟失,mdadm有以下措施:

     1. 關(guān)閉對陣列關(guān)鍵區(qū)的寫操作;

     2. 在重新條帶化之前備份關(guān)鍵區(qū)的信息;

     3. 若發(fā)生掉電等情況時(shí),可以繼續(xù)之前的重新條帶化;

     4. 最后作廢備份的關(guān)鍵區(qū)信息,回復(fù)對關(guān)鍵區(qū)的寫操作;

     Mdadm提供了一個機(jī)制用于對重新條帶化過程中發(fā)生了中斷的陣列恢復(fù)關(guān)鍵區(qū)。

     例如為RAID5增加磁盤這樣的動作就需要重新條帶化,重新條帶化和重塑是不一樣的概念,重新條帶化需要改變關(guān)鍵區(qū)的信息,因?yàn)檎麄€RAID陣列的底層數(shù)據(jù)分布和架構(gòu)都發(fā)生了改變,但是重塑卻不同,它不會改變陣列的大?。ɡ鏑hunk Size等),不會改變關(guān)鍵區(qū)信息,重塑發(fā)生在磁盤的扇區(qū)上,用于對陣列中的磁盤的數(shù)據(jù)分布進(jìn)行調(diào)整。


4.18 在線拉伸RAID5:

     本小節(jié)主要講如何在線拉伸RAID5陣列,即在線地為RAID5增加磁盤數(shù),以實(shí)現(xiàn)RAID陣列的容量增長。

     在2.6.17和更新的linux內(nèi)核中,軟件級RAID5才能在文件系統(tǒng)在線的情況下為陣列增加磁盤。在增加磁盤之前需要為原陣列中的數(shù)據(jù)做重塑(Reshaping),RAID5的重塑過程將比較慢,可以通過以下的內(nèi)核參數(shù)優(yōu)化重塑的速度,這是RAID數(shù)據(jù)傳輸?shù)淖钚≈迪拗?,默認(rèn)是1000:

     # echo 25000 > /proc/sys/dev/raid/speed_limit_min

     首先先向RAID5陣列添加一塊新的磁盤:

     # mdadm --add /dev/md0 /dev/hda8

     重塑RAID5陣列:

     # mdadm --grow /dev/md0 --raid-devices=4

     監(jiān)控重塑的過程和估算重塑完成的時(shí)間:

     # watch -n 1 'cat /proc/mdstat'

     拉伸RAID陣列上的文件系統(tǒng):

     # resize2fs /dev/md0


4.19 關(guān)鍵扇區(qū)備份:

     重塑操作的第一階段就是對震了關(guān)鍵區(qū)的備份,默認(rèn)地,關(guān)鍵區(qū)將備份到陣列的空閑磁盤上,如果沒有空閑磁盤則會備份到內(nèi)存中,但是關(guān)鍵區(qū)備份在內(nèi)存是不夠安全的,一旦發(fā)生斷電,內(nèi)存中的關(guān)鍵區(qū)備份也將損毀。

     可以用以下命令在重塑陣列的過程中將關(guān)鍵區(qū)備份到一個文件中:

     # mdadm --grow /dev/md0 --raid-devices=4 --backup-file=/tmp/md0.tmp

     當(dāng)磁盤重新條帶化完成時(shí),mdadm將自動刪除該關(guān)鍵區(qū)備份文件。

     若在重新條帶化對關(guān)鍵區(qū)進(jìn)行操作的時(shí)候發(fā)生了系統(tǒng)崩潰或掉電的情況,則可以利用關(guān)鍵區(qū)備份文件進(jìn)行恢復(fù),命令如下:

     # mdadm --assemble /dev/md0 --backup-file=/tmp/md0.tmp /dev/sd[a-d]


4.20 在RAID5中拉伸磁盤的大?。?

     本小節(jié)要講的是如何將一個RAID5陣列中的每一個磁盤都替換成更大的磁盤,或者更換老化的磁盤,做這樣的拓展的操作思路是這樣的,首先在陣列中停用某塊磁盤,然后把磁盤拆下來,換上一個更大容量的新磁盤,將新磁盤添加到陣列中,此時(shí)將進(jìn)行RAID的修復(fù)動作,等到修復(fù)完成時(shí),再用以上的方法替換掉其余兩塊磁盤,至此,RAID陣列中的全部磁盤都換成了大容量的新磁盤。下一步是拉伸RAID陣列,之后是拉伸RAID上的文件系統(tǒng)。

     值得注意的時(shí),在新磁盤還沒有完成數(shù)據(jù)修復(fù)之前,千萬不要急著停用下一塊磁盤,我們知道,RAID5陣列壞了2個磁盤便徹底損壞了。

     停用RAID5陣列中的/dev/vg0/disk1:

     # mdadm --manage /dev/md0 --fail /dev/vg0/disk1 --remove /dev/vg0/disk1

     將新磁盤添加到RAID5陣列:

     # mdadm --manage /dev/md0 --add /dev/vg0/disk2

     監(jiān)控?cái)?shù)據(jù)修復(fù)的過程:

     # watch -n 1 'cat /proc/mdstat'

     當(dāng)RAID5陣列中的全部磁盤都被替換成了新磁盤,此時(shí)可以將RAID陣列空間拉伸到最大:

     # mdadm --grow /dev/md0 --size=max

     拉伸RAID5上的文件系統(tǒng):

     # resize2fs /dev/md0


4.21 在RAID設(shè)備中共享熱備盤:

     共享熱備盤應(yīng)用挺廣泛的,硬件級的RAID也提供了這樣的功能,共享熱備盤就是指多個RAID陣列可以共享一塊熱備盤,而不需要為每個陣列都分配熱備盤,這樣可以節(jié)省成本,又不會影響RAID的使用。

     在企業(yè)級應(yīng)用中,你的熱備盤數(shù)量應(yīng)該大于等于你陣列的數(shù)量,才能保證足夠的可靠性。

     首先應(yīng)該將當(dāng)前的RAID信息刷新到配置文件中:

     # mdadm --verbose --examine --scan >> /etc/mdadm.conf

     選擇一個共享熱備盤組的名字(例如share1)。

     在需要加入共享熱備盤的陣列的陣列信息后加入如下參數(shù):

     Spare-group=share1

     添加了熱備盤之后,就可以通過停用某塊磁盤來測試熱備盤是否成功設(shè)置:

     # mdadm /dev/md0 --fail /dev/sda1 --remove /dev/sda1

     當(dāng)停用并移除了/dev/sda1時(shí),熱備盤自動地加入到該陣列并自動地開始陣列的修復(fù)工作。

     熱備盤的設(shè)置也可以在RAID震了創(chuàng)建的時(shí)候設(shè)置:

     # mdadm -C /dev/md0 -l 5 -n 4 -x 1 -c 64 spare-group=share1 /dev/sd[a-e]1

     其中,-x指定了熱備盤的數(shù)量,spare-group=share1指定了加入到的共享熱備盤組。


4.22 重命名RAID陣列:

     當(dāng)我們需要把本系統(tǒng)中的RAID陣列移植到另一個系統(tǒng)中,但是該系統(tǒng)中已經(jīng)存在了同名的RAID陣列時(shí),我們就需要先對本系統(tǒng)的RAID進(jìn)行重命名。

     以下我們將把/dev/md0重命名為/dev/md3。

     首先我們要了解RAID由哪些磁盤組成:

     # mdadm -D /dev/md0

     停止RAID陣列:

     # mdadm --stop /dev/md0

     將該RAID陣列重新組裝:

     # mdadm --assemble /dev/md3 --super-minor=0 --update=super-minor /dev/sda5 /dev/sdb5

     此處的--super-minor=0是指定了原來的命名信息(參照/dev/md0),--update=super-minor則是指更新陣列中的超級快信息。


4.23 RAID的Write-intent位圖:

     RAID的位圖功能是用來記錄哪個RAID的區(qū)域自從上一次同步之后發(fā)生了改變,RAID陣列會周期性地將這些信息寫入到位圖中。

     當(dāng)RAID陣列在做同步的時(shí)候發(fā)生了掉電,那么在重新啟動陣列時(shí)將需要一次完全的數(shù)據(jù)同步,如果設(shè)置了Write-intent位圖,則可以知道哪些是沒有同步的,就不需要完全的數(shù)據(jù)同步,就可以極大地減少修復(fù)的時(shí)間。

     如果將一個RAID陣列中的某塊磁盤停用移除,再重新添加到該RAID陣列時(shí),RAID陣列將重新為其做數(shù)據(jù)同步,但是如果該陣列設(shè)置了Write-intent位圖,重新添加進(jìn)去后則只需要簡單的同步便實(shí)現(xiàn)了修復(fù)。


4.24 在RAID1開啟Write-intent位圖功能:

     位圖文件在創(chuàng)建它之前是沒有存在的。Internal bitmap是存放在陣列的metadata中的,External bitmap是存放在磁盤上的位圖文件,該文件必須保存在除自身RAID陣列以外的介質(zhì)上。

     在為RAID陣列開啟Write-intent位圖功能之前,首先要保證陣列已經(jīng)同步了的且superblock超級塊信息是完好的。

     保證RAID陣列處于良好的狀態(tài):

     # mdadm --detail /dev/mdX

     添加一個Internal bitmap位圖:

     # mdadm /dev/md0 --grow --bitmap=internal

     監(jiān)控位圖的狀態(tài):

     #watch -n 1 'cat /proc/mdstat'

     關(guān)閉位圖功能:

     # mdadm /dev/md0 --grow --bitmap=none


4.25 在RAID1開啟Write-behind位圖功能:

     該位圖功能默認(rèn)是--write-behind=256,即每當(dāng)有256個對陣列的寫請求時(shí)才進(jìn)行RAID陣列的同步寫操作。

     該功能對于利用RAID1實(shí)現(xiàn)異地備份是非常有效的,RAID1的異地備份常常是通過光纖或高速以太網(wǎng)來使本地和異地的磁盤形成RAID1鏡像備份,但是因?yàn)榫W(wǎng)絡(luò)的延時(shí),若每次寫入數(shù)據(jù)時(shí)都要進(jìn)行數(shù)據(jù)的同步則大大影響了寫入的性能,設(shè)置了這個位圖功能則可以使得達(dá)到一定的寫請求時(shí)再進(jìn)行同步操作,可以提高陣列的寫性能。

     # mdadm /dev/md0 --grow --write-behind=512


4.26 RAID的錯誤處理和數(shù)據(jù)一致性檢查:

     RAID陣列總是被動地檢查壞道,RAID的檢查可以修復(fù)邏輯層的壞道,但卻不能修復(fù)物理壞道。

     可以通過以下命令開始壞道的檢查:

     # echo check >> /sys/block/mdX/md/sync_action

     監(jiān)控?cái)?shù)據(jù)一致性檢查的過程:

     # watch -n 1 'cat /proc/mdstat'


    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多