通常情況下人們在服務(wù)器端采用各種冗余磁盤陣列(RAID)技術(shù)來保護(hù)數(shù)據(jù),中高檔的服務(wù)器一般都提供了昂貴的硬件RAID控制器。對于資金實(shí)力有限的中小企業(yè)來講,在Linux下通過軟件來實(shí)現(xiàn)硬件的RAID功能,這樣既節(jié)省了投資,又能達(dá)到很好的效果。何樂而不為呢?
作為一個面向服務(wù)器的網(wǎng)絡(luò)型操作系統(tǒng),Linux對數(shù)據(jù)的安全和存取速度給予了高度重視,從2.4版內(nèi)核開始Linux就實(shí)現(xiàn)了對軟件RAID的支持(關(guān)于RAID的背景知識請見附文),這讓我們可以不必購買昂貴的硬件RAID設(shè)備,就能享受到增強(qiáng)的磁盤I/O性能和可靠性,進(jìn)一步降低了系統(tǒng)的總體擁有成本。下面就讓我們看一個Redhat Linux AS 4下的軟件RAID配置實(shí)例吧。
系統(tǒng)配置情況
假設(shè)某單位新上了一套使用Oracle數(shù)據(jù)庫的能量采集系統(tǒng),該系統(tǒng)數(shù)據(jù)量極大并且讀寫非常頻繁,實(shí)時(shí)性要求高,高峰時(shí)有近40名用戶在線,對數(shù)據(jù)庫服務(wù)器的磁盤子系統(tǒng)提出了很高的要求。由于預(yù)算比較緊張,經(jīng)過多方比較,最終選擇了采用Linux系統(tǒng)做軟件RAID5的方案。
其配置情況如下:
◆操作系統(tǒng)為RedHat Linux AS 4;
◆內(nèi)核版本為2.6.9-5.EL;
◆ 支持RAID0、RAID1、RAID4、RAID5、RAID6;
◆五塊36GB SCSI接口的磁盤,其中RedHat AS 4安裝在第一塊磁盤,其它四塊組成RAID 5用來存放Oracle數(shù)據(jù)庫。
在RedHat AS 4下實(shí)現(xiàn)軟件RAID是通過mdadm工具實(shí)現(xiàn)的,其版本為1.6.0,它是一個單一的程序,創(chuàng)建、管理RAID都非常方便,而且也很穩(wěn)定。而在早期Linux下使用的raidtools,由于維護(hù)起來很困難,而且其性能有限,在RedHat AS 4下已經(jīng)不支持了。
實(shí)現(xiàn)過程
1.創(chuàng)建分區(qū)
五塊SCSI磁盤分別對應(yīng)/dev/sda、/dev/sdb、/dev/sdc、/dev/sdd、/dev/sde。其中第一塊磁盤/dev/sda分兩個區(qū),用于安裝RedHat AS 4和做交換分區(qū),其他四塊磁盤每塊只分一個主分區(qū),分別為/dev/sdb1、/dev/sdc1、/dev/sdd1、/dev/sde1,并且將分區(qū)類型指定為“fd”,這將使Linux內(nèi)核能將它們識別為RAID分區(qū),且在每次引導(dǎo)時(shí)自動被檢測并啟動。創(chuàng)建分區(qū)使用fdisk命令。
進(jìn)入fdisk命令行后,使用命令n創(chuàng)建分區(qū),命令t改變分區(qū)類型,命令w保存分區(qū)表并退出,命令m為幫助。
2.創(chuàng)建RAID 5
這里使用了/dev/sdb1、/dev/sdc1、/dev/sdd1、/dev/sde1四個設(shè)備創(chuàng)建RAID 5,其中/dev/sde1作為備份設(shè)備,其他為活動設(shè)備。備份設(shè)備主要起備用作用,一旦某一設(shè)備損壞可以立即用備份設(shè)備替換,當(dāng)然也可以不使用備份設(shè)備。命令格式如下:
# mdadm -Cv /dev/md0 -l5 -n3 -x1 -c128 /dev/sd[b,c,d,e]1
|
命令中各參數(shù)分別表示如下作用:“-C”指創(chuàng)建一個新的陣列;“/dev/md0”表示陣列設(shè)備名稱;“-l5”表示設(shè)置陣列模式,可以選擇0、1、4、5、6,它們分別對應(yīng)于RAID0、RAID1、RAID4、RAID5、RAID6,這里設(shè)為RAID5模式;“-n3”指設(shè)置陣列中活動設(shè)備的數(shù)目,該數(shù)目加上備用設(shè)備的數(shù)目應(yīng)等于陣列中的總設(shè)備數(shù); “-x1”設(shè)置陣列中備份設(shè)備的數(shù)目,當(dāng)前陣列中含有1個備份設(shè)備;“-c128”指設(shè)置塊的尺寸為128KB,缺省為64KB;“/dev/sd[b,c,d,e]1”指當(dāng)前陣列中包含的所有設(shè)備標(biāo)識符,也可以分開來寫,中間用空格分開,其中最后一個為備份設(shè)備。
3.查看陣列狀態(tài)
當(dāng)創(chuàng)建一個新陣列或者陣列重構(gòu)時(shí),設(shè)備需要進(jìn)行同步操作,這一過程需要一定時(shí)間,可以通過查看/proc/mdstat文件,來顯示陣列的當(dāng)前狀態(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:
|
當(dāng)新建或重構(gòu)完成后,再次查看/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:
|
通過以上內(nèi)容,可以很清楚地看出當(dāng)前陣列的狀態(tài),各部分所代表的意思如下:“[3/3]”中的第一位數(shù)表示陣列所包含的設(shè)備數(shù),第二位數(shù)表示活動的設(shè)備數(shù),如果有一個設(shè)備損壞,則第二位數(shù)將減1;“[UUU]”標(biāo)記當(dāng)前陣列可以正常使用的設(shè)備情況,現(xiàn)假設(shè)/dev/sdb1出現(xiàn)故障,則該標(biāo)記將變成[_UU],這時(shí)的陣列以降級模式運(yùn)行,即該陣列仍然可用,但是不再具有任何冗余;“sdd1[2]”指陣列所包含的設(shè)備數(shù)為n,若方括號內(nèi)的數(shù)值小于n,則表示該設(shè)備為活動設(shè)備,若數(shù)值大于等于n,則該設(shè)備為備份設(shè)備,當(dāng)一個設(shè)備出現(xiàn)故障的時(shí)候,相應(yīng)設(shè)備的方括號后將被標(biāo)以(F)。
4.生成配置文件
mdadm的缺省配置文件為/etc/mdadm.conf,它主要是為了方便陣列的日常管理而設(shè)置的,對于陣列而言不是必須的,但是為了減少日后管理中不必要的麻煩,還是應(yīng)該堅(jiān)持把這一步做完。
在mdadm.conf文件中要包含兩種類型的行:一種是以DEVICE開頭的行,它指明在陣列中的設(shè)備列表;另一種是以ARRAY開頭的行,它詳細(xì)地說明了陣列的名稱、模式、陣列中活動設(shè)備的數(shù)目以及設(shè)備的UUID號。格式如下:
DEVICE /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
ARRAY /dev/md0 level=raid5 num-devices=3 UUID=8f128343:715a42df: baece2a8: a5b878e0
|
以上的這些信息可以通過掃描系統(tǒng)的陣列來獲取,命令為:
# 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命令,按照規(guī)定的格式編輯修改/etc/mdadm.conf文件