作為一個(gè)面向服務(wù)器的網(wǎng)絡(luò )型操作系統,Linux對數據的安全和存取速度給予了高度重視,從2.4版內核開(kāi)始Linux就實(shí)現了對軟件RAID的支持(關(guān)于RAID的背景知識請見(jiàn)附文),這讓我們可以不必購買(mǎi)昂貴的硬件RAID設備,就能享受到增強的磁盤(pán)I/O性能和可靠性,進(jìn)一步降低了系統的總體擁有成本。下面就讓我們看一個(gè)Redhat Linux AS 4下的軟件RAID配置實(shí)例吧。
系統配置情況
假設某單位新上了一套使用Oracle數據庫的能量采集系統,該系統數據量極大并且讀寫(xiě)非常頻繁,實(shí)時(shí)性要求高,高峰時(shí)有近40名用戶(hù)在線(xiàn),對數據庫服務(wù)器的磁盤(pán)子系統提出了很高的要求。由于預算比較緊張,經(jīng)過(guò)多方比較,最終選擇了采用Linux系統做軟件RAID5的方案。
其配置情況如下:
● 操作系統為RedHat Linux AS 4;
● 內核版本為2.6.9-5.EL;
● 支持RAID0、RAID1、RAID4、RAID5、RAID6;
● 五塊36GB SCSI接口的磁盤(pán),其中RedHat AS 4安裝在第一塊磁盤(pán),其它四塊組成RAID 5用來(lái)存放Oracle數據庫。
在RedHat AS 4下實(shí)現軟件RAID是通過(guò)mdadm工具實(shí)現的,其版本為1.6.0,它是一個(gè)單一的程序,創(chuàng )建、管理RAID都非常方便,而且也很穩定。而在早期Linux下使用的raidtools,由于維護起來(lái)很困難,而且其性能有限,在RedHat AS 4下已經(jīng)不支持了。
實(shí)現過(guò)程
1.創(chuàng )建分區
五塊SCSI磁盤(pán)分別對應/dev/sda、/dev/sdb、/dev/sdc、/dev/sdd、/dev/sde。其中第一塊磁盤(pán)/dev/sda分兩個(gè)區,用于安裝RedHat AS 4和做交換分區,其他四塊磁盤(pán)每塊只分一個(gè)主分區,分別為/dev/sdb1、/dev/sdc1、/dev/sdd1、/dev/sde1,并且將分區類(lèi)型指定為“fd”,這將使Linux內核能將它們識別為RAID分區,且在每次引導時(shí)自動(dòng)被檢測并啟動(dòng)。創(chuàng )建分區使用fdisk命令。
# fdisk /dev/sdb
進(jìn)入fdisk命令行后,使用命令n創(chuàng )建分區,命令t改變分區類(lèi)型,命令w保存分區表并退出,命令m為幫助。
2.創(chuàng )建RAID 5
這里使用了/dev/sdb1、/dev/sdc1、/dev/sdd1、/dev/sde1四個(gè)設備創(chuàng )建RAID 5,其中/dev/sde1作為備份設備,其他為活動(dòng)設備。備份設備主要起備用作用,一旦某一設備損壞可以立即用備份設備替換,當然也可以不使用備份設備。命令格式如下:
# mdadm -Cv /dev/md0 -l5 -n3 -x1 -c128 /dev/sd[b,c,d,e]1
命令中各參數分別表示如下作用:“-C”指創(chuàng )建一個(gè)新的陣列;“/dev/md0”表示陣列設備名稱(chēng);“-l5”表示設置陣列模式,可以選擇0、1、4、5、6,它們分別對應于RAID0、RAID1、RAID4、RAID5、RAID6,這里設為RAID5模式;“-n3”指設置陣列中活動(dòng)設備的數目,該數目加上備用設備的數目應等于陣列中的總設備數; “-x1”設置陣列中備份設備的數目,當前陣列中含有1個(gè)備份設備;“-c128”指設置塊的尺寸為128KB,缺省為64KB;“/dev/sd[b,c,d,e]1”指當前陣列中包含的所有設備標識符,也可以分開(kāi)來(lái)寫(xiě),中間用空格分開(kāi),其中最后一個(gè)為備份設備。
3.查看陣列狀態(tài)
當創(chuàng )建一個(gè)新陣列或者陣列重構時(shí),設備需要進(jìn)行同步操作,這一過(guò)程需要一定時(shí)間,可以通過(guò)查看/proc/mdstat文件,來(lái)顯示陣列的當前狀態(tài)以及同步進(jìn)度、所需時(shí)間等。
# more /proc/mdstat
Personalities : [raid5]
md0 : active raid5 sdd1[3] sde1[4] sdc1[1] sdb1[0]
75469842 blocks level 5, 128k chunk, algorithm 2 [3/2] [UU_]
[>....................] recovery = 4.3% (1622601/37734912) finish=1.0min speed=15146K/sec
unused devices:
當新建或重構完成后,再次查看/proc/mdstat文件:
# more /proc/mdstat
Personalities : [raid5]
md0 : active raid5 sdd1[2] sde1[3] sdc1[1] sdb1[0]
75469842 blocks level 5, 128k chunk, algorithm 2 [3/3] [UUU]
unused devices:
通過(guò)以上內容,可以很清楚地看出當前陣列的狀態(tài),各部分所代表的意思如下:“[3/3]”中的第一位數表示陣列所包含的設備數,第二位數表示活動(dòng)的設備數,如果有一個(gè)設備損壞,則第二位數將減1;“[UUU]”標記當前陣列可以正常使用的設備情況,現假設/dev/sdb1出現故障,則該標記將變成[_UU],這時(shí)的陣列以降級模式運行,即該陣列仍然可用,但是不再具有任何冗余;“sdd1[2]”指陣列所包含的設備數為n,若方括號內的數值小于n,則表示該設備為活動(dòng)設備,若數值大于等于n,則該設備為備份設備,當一個(gè)設備出現故障的時(shí)候,相應設備的方括號后將被標以(F)。
4.生成配置文件
mdadm的缺省配置文件為/etc/mdadm.conf,它主要是為了方便陣列的日常管理而設置的,對于陣列而言不是必須的,但是為了減少日后管理中不必要的麻煩,還是應該堅
在mdadm.conf文件中要包含兩種類(lèi)型的行:一種是以DEVICE開(kāi)頭的行,它指明在陣列中的設備列表;另一種是以ARRAY開(kāi)頭的行,它詳細地說(shuō)明了陣列的名稱(chēng)、模式、陣列中活動(dòng)設備的數目以及設備的UUID號。格式如下:
DEVICE /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
ARRAY /dev/md0 level=raid5 num-devices=3 UUID=8f128343:715a42df: baece2a8: a5b878e0
以上的這些信息可以通過(guò)掃描系統的陣列來(lái)獲取,命令為:
# mdadm -Ds
ARRAY /dev/md0 level=raid5 num-devices=3 UUID=8f128343:715a42df: baece2a8: a5b878e0
devices=/dev/sdb1,/dev/sdc1,/dev/sdd1,/dev/sde1
使用vi命令,按照規定的格式編輯修改/etc/mdadm.conf文件
# vi /etc/mdadm.conf
5.創(chuàng )建文件系統并掛接(mount)使用
RAID5已經(jīng)啟動(dòng)并處于運行狀態(tài),現在要做的就是在其上創(chuàng )建一個(gè)文件系統,這里使用mkfs命令,文件系統類(lèi)型為ext3。命令如下:
# mkfs -t ext3 /dev/md0
當新的文件系統生成之后,就可以將/dev/md0掛接到指定的目錄了。命令如下:
# mount /dev/md0 /mnt/raid
為了讓系統在啟動(dòng)時(shí)自動(dòng)將/dev/md0掛接到/mnt/raid,還需要修改/etc/fstab文件,添加如下內容:
/dev/md0 /mnt/raid ext3 defaults 0 0
故障模擬
上面的實(shí)例,讓我們對Redhat Linux AS 4的軟件RAID功能有了一定的認識,并且通過(guò)詳細的步驟說(shuō)明了如何創(chuàng )建RAID5。有了RAID做保障,電腦里的數據看起來(lái)似乎已經(jīng)很安全了,然而現有的情況還是不能讓我們高枕無(wú)憂(yōu),想一想,萬(wàn)一磁盤(pán)出現故障怎么辦?下面我們模擬一個(gè)更換RAID5故障磁盤(pán)的完整過(guò)程,希望以此豐富大家處理RAID5故障的經(jīng)驗,提高管理和維護水平。
我們仍然沿用上面的RAID5配置,首先往陣列中拷貝一些數據,接下來(lái)開(kāi)始模擬/dev/sdb1設備故障。不過(guò),對于無(wú)備份設備的RAID5的模擬過(guò)程也要經(jīng)過(guò)如下三步,只是陣列重構和數據恢復是發(fā)生在新設備添加到陣列中之后,而不是設備損壞時(shí)。
1.將/dev/sdb1標記為已損壞的設備
# mdadm /dev/md0 -f /dev/sdb1
查看當前陣列狀態(tài)
# more /proc/mdstat
Personalities : [raid5]
md0 : active raid5 sdd1[2] sde1[3] sdc1[1] sdb1[4](F)
75469842 blocks level 5, 128k chunk, algorithm 2 [3/2] [_UU]
[=>...................] recovery = 8.9% (3358407/37734912) finish=1.6min speed=9382K/sec
unused devices:
因為有備份設備,所以當陣列中出現設備損壞時(shí),陣列能夠在短時(shí)間內實(shí)現重構和數據的恢復。從當前的狀態(tài)可以看出,陣列正在重構,且運行在降級模式,sdb1[4]的后面已經(jīng)標上了(F),活動(dòng)設備數也降為2個(gè)。
經(jīng)過(guò)幾分鐘后,再次查看當前陣列狀態(tài)。
# more /proc/mdstat
Personalities : [raid5]
md0 : active raid5 sdd1[2] sde1[0] sdc1[1] sdb1[3](F)
75469842 blocks level 5, 128k chunk, algorithm 2 [3/3] [UUU]
unused devices:
此時(shí)陣列重構已經(jīng)完成,數據恢復完畢,原有的備份設備sde1成為了活動(dòng)設備。
2.移除損壞的設備
# mdadm /dev/md0 -r /dev/sdb1
查看當前陣列的狀態(tài):
# more /proc/mdstat
Personalities : [raid5]
md0 : active raid5 sdd1[2] sde1[0] sdc1[1]
75469842 blocks level 5, 128k chunk, algorithm 2 [3/3] [UUU]
unused devices:
損壞的sdb1已經(jīng)從陣列中移掉。
3.將新設備添加到陣列中
因為是模擬操作,可以通過(guò)下面的命令再次將/dev/sdb1添加到陣列中。如果是實(shí)際操作則要注意兩點(diǎn):一是在添加之前要對新磁盤(pán)進(jìn)行正確的分區;二是添加時(shí)要用所添加設備的設備名替換/dev/sdb1。
# mdadm /dev/md0 -a /dev/sdb1
查看當前陣列的狀態(tài):
# more /proc/mdstat
Personalities : [raid5]
md0 : active raid5 sdb1[3] sdd1[2] sde1[0] sdc1[1]
75469842 blocks level 5, 128k chunk, algorithm 2 [3/3] [UUU]
unused devices:
這時(shí)sdb1作為備份設備再次出現在陣列中
常用陣列維護命令
1.啟動(dòng)陣列
# mdadm -As /dev/md0
該命令指啟動(dòng)/dev/md0陣列,其中“-A”指裝載一個(gè)已存在的陣列;“-s”指查找mdadm.conf文件中的配置信息,并以此為依據啟動(dòng)陣列。
#mdadm -As
該命令指啟動(dòng)mdadm.conf文件中的所有陣列。
#mdadm -A /dev/md0 /dev/sd[b,c,d,e]1
如果沒(méi)有創(chuàng )建mdadm.conf文件則可以采用上面這種啟動(dòng)方式。
2.停止陣列
# mdadm -S /dev/md0
3.顯示指定陣列的詳細信息
# mdadm -D /dev/md0
鏈接
RAID簡(jiǎn)介
RAID是冗余磁盤(pán)陣列(Redundant Array of Inexpensive Disk)的簡(jiǎn)稱(chēng)。它是把多個(gè)磁盤(pán)組成一個(gè)陣列,當作單一磁盤(pán)使用。它將數據以分段(striping)的方式分散存儲在不同的磁盤(pán)中,通過(guò)多個(gè)磁盤(pán)的同時(shí)讀寫(xiě),來(lái)減少數據的存取時(shí)間,并且可以利用不同的技術(shù)實(shí)現數據的冗余,即使有一個(gè)磁盤(pán)損壞,也可以從其他的磁盤(pán)中恢復所有的數據。簡(jiǎn)單地說(shuō),其好處就是:安全性高、速度快、數據容量大。
磁盤(pán)陣列根據其使用的技術(shù)不同而劃分了等級,稱(chēng)為RAID level,目前公認的標準是RAID 0~RAID 5。其中的level并不代表技術(shù)的高低,RAID 5并不高于RAID 4 ,RAID 0并不低于RAID 2 ,至于選擇哪一種RAID需視用戶(hù)的需求而定。下面分別對常用的RAID 0、RAID 1、RAID 5進(jìn)行簡(jiǎn)單的介紹。
1.RAID 0
特點(diǎn):它是將多個(gè)磁盤(pán)并列起來(lái),成為一個(gè)大硬盤(pán)。在存取數據時(shí),將數據按磁盤(pán)的個(gè)數來(lái)進(jìn)行分段,然后同時(shí)將這些數據寫(xiě)進(jìn)這些盤(pán)中。在所有的級別中,RAID 0的速度是最快的。但沒(méi)有數據冗余,陣列中任何一個(gè)磁盤(pán)壞掉,意味著(zhù)所有數據丟失。

磁盤(pán)利用數:n(假設有n個(gè)磁盤(pán))。
配置條件:最低兩塊磁盤(pán),且分區大小盡量相同。
應用領(lǐng)域:對高磁盤(pán)容量及高速磁盤(pán)存取有特殊需求,而又不計較其高故障率的工作。當然,如果你正在使用集群,RAID 0 無(wú)疑是提高磁盤(pán)I/O性能的最好方法,因為在這種情況下,你就不用擔心冗余的問(wèn)題了。
2.RAID 1
特點(diǎn):使用磁盤(pán)鏡像(disk mirroring)的技術(shù),在一個(gè)磁盤(pán)上存放數據的同時(shí)也在另一個(gè)磁盤(pán)上寫(xiě)一樣的數據。因為有了備份磁盤(pán),所以RAID 1的數據安全性在所有的RAID級別上來(lái)說(shuō)是最好的。盡管其寫(xiě)入數據的速度比較慢,但因其數據是以分段的方式作儲存,因而在讀取時(shí),它幾乎和RAID 0有同樣的性能。

磁盤(pán)利用數:n/2。
配置條件:最低兩塊磁盤(pán),且分區大小盡量相同。
應用領(lǐng)域:數據庫、金融系統等一些對數據有著(zhù)高可靠性要求的領(lǐng)域。再者就是系統中寫(xiě)數據量比較少,而讀數據量又比較多的情況下可以采用這一模式。
3.RAID 5
特點(diǎn):以數據的校驗位來(lái)保證數據的安全,但它不是以單獨硬盤(pán)來(lái)存放數據的校驗位,而是將數據段的校驗位交互存放于各個(gè)磁盤(pán)上。這樣,任何一個(gè)磁盤(pán)損壞,都可以根據其他磁盤(pán)上的校驗位來(lái)重建損壞的數據。并行讀寫(xiě)數據,性能也很高。

磁盤(pán)利用數:n-1。
配置條件:最低三塊硬盤(pán),且分區大小盡量相同。
應用領(lǐng)域:適合于事務(wù)處理環(huán)境,例如民航售票處、銷(xiāo)售系統等。
聯(lián)系客服