IO性能測(cè)試-關(guān)于RAID不可不知的那些事兒
測(cè)試RAID卡的必要性
RAID卡用來顯示服務(wù)器硬盤的RAID卡以及插在上面的硬盤配置信息??偟膩碚fRAID卡是插在服務(wù)器上的一塊PCIE板卡,提供接口接入多塊硬盤,負(fù)責(zé)處理RAID所需要的運(yùn)算,保存RAID信息,驅(qū)動(dòng)硬盤(如多塊硬盤依次延時(shí)啟動(dòng)、管理硬盤SMART信息)等任務(wù)。用主板也可完成實(shí)驗(yàn)性的RAID功能,由主板芯片組負(fù)責(zé)處理RAID,CPU承擔(dān)運(yùn)算任務(wù),實(shí)際性能和穩(wěn)定性很差,無法達(dá)到穩(wěn)定使用的RAID目的。
作為測(cè)試,在進(jìn)行IO密集的性能測(cè)試時(shí),需要關(guān)注服務(wù)器的RAID配置是否和預(yù)期使用的機(jī)器一致。從硬件(RAID卡)到軟件(如RAID配置方式)都可能存在差異。例如,同樣是4塊硬盤的服務(wù)器上跑一個(gè)應(yīng)用,RAID 5下跑出來的性能跟RAID 10下跑出來的可能就差距很大。
另外,在使用單塊接在RAID卡上的硬盤測(cè)試時(shí),也可能遇到需要分辨硬盤型號(hào)的需要。SSD比機(jī)械硬盤快了一個(gè)數(shù)量級(jí),若硬件有差異,跑出來的性能顯然是沒有可比性的。
RAID控制器的實(shí)際連接關(guān)系
常見的RAID級(jí)別
- RAID 0:兩塊以上硬盤組成,一份數(shù)據(jù)會(huì)分配給組內(nèi)所有硬盤分開去讀寫,因此性能基本是以硬盤數(shù)翻倍,容量是所有硬盤容量加起來。缺點(diǎn)是如果一塊硬盤損壞,整個(gè)組的全部數(shù)據(jù)都不可讀。
- RAID 1:兩塊以上硬盤組成,通常是兩塊硬盤,在寫入的時(shí)候是鏡像,因此會(huì)損失一半容量,優(yōu)點(diǎn)是數(shù)據(jù)安全程度***。
- RAID 5:三塊以上硬盤組成,數(shù)據(jù)分散放在RAID組的每塊硬盤上,除此以外還會(huì)放置這個(gè)數(shù)據(jù)的奇偶校驗(yàn)信息,因此當(dāng)任意一塊硬盤損壞時(shí),可根據(jù)其他盤數(shù)據(jù)重建這塊盤的數(shù)據(jù)。優(yōu)點(diǎn)是在RAID 0 和 1 兩個(gè)模式中取折中,是一個(gè)用起來比較普遍的方案。缺點(diǎn)是IO都需要進(jìn)行奇偶校驗(yàn),會(huì)給CPU帶來額外負(fù)擔(dān),通常由RAID卡上自帶處理器來解決。重建過程相對(duì)RAID 1 來說比較慢。缺點(diǎn)是需要占用一塊硬盤的容量,實(shí)際容納量是(N-1)塊。此外硬盤的速度和容量***一致,否則很可能是短板決定整組RAID的性能。
- RAID 6:四塊以上硬盤組成,相當(dāng)于RAID 5再添加一塊盤的校驗(yàn)數(shù)據(jù),用于比較多硬盤的組。
- RAID 10:通常為四塊硬盤,也可更多。相當(dāng)于兩組RAID 1再組成RAID 0,降低RAID 0帶來的風(fēng)險(xiǎn)。優(yōu)勢(shì)是不像RAID 5那樣需要額外的運(yùn)算,相對(duì)來說恢復(fù)處理不如RAID 5靈活。RAID 01則是反過來先組成兩份RAID 0,再以RAID 1的方式組成鏡像。
硬盤損壞
當(dāng)硬盤掛了的時(shí)候,RAID卡負(fù)責(zé)顯示它的狀態(tài),同時(shí)標(biāo)記對(duì)應(yīng)的RAID組在降級(jí)運(yùn)行(Degraded)或損壞。例如RAID 5有一塊盤掛了就會(huì)降級(jí),此時(shí)需要熱插拔更換硬盤并執(zhí)行rebuild,重建這塊盤的數(shù)據(jù)。
獲取信息
MegaCli64為LSI出的RAID卡對(duì)應(yīng)的命令行工具(64表示64位),現(xiàn)在大多服務(wù)器上用的都是他家的OEM。
我們主要目的是觀察機(jī)器上安裝了哪些硬盤,它們的RAID分布方式如何,以及如何對(duì)應(yīng)到我們的linux機(jī)器上的硬盤。
通常MegaCli裝在/opt下面
1. RAID卡本身的信息:MegaCli64 -AdpAllInfo -aALL
Product Name 為RAID卡本身的型號(hào)。
Device Present 項(xiàng)目下,分別顯示了RAID組數(shù)和實(shí)際連接的硬盤數(shù)。對(duì)RAID來說Virtual Drives為一組硬盤組成的RAID,對(duì)于操作系統(tǒng)則呈現(xiàn)為1塊硬盤。
Physical Devices下的Disk則是實(shí)際連了多少真實(shí)的硬盤。對(duì)操作系統(tǒng)來說是不可見的。
2. 虛擬盤(RAID組)的詳細(xì)情況:MegaCli64 -LDInfo -Lall -aALL
Size很好理解,關(guān)于RAID方式的問題要稍微復(fù)雜一些
Primary-5, Secondary-0, RAID Level Qualifier-3
在 RAID Level這一組里標(biāo)示了RAID的級(jí)別,其中這三項(xiàng)里除了主RAID級(jí)別以外,另外的兩項(xiàng)涉及實(shí)際RAID更詳細(xì)的配置,例如具體數(shù)據(jù)塊(Block)在硬盤上的儲(chǔ)存方式。具體可參考下面文檔相關(guān)的定義,pdf中對(duì)每個(gè)方式有詳盡的解釋加圖,利于理解實(shí)際構(gòu)成。我們首先關(guān)注是否組成方式跟預(yù)期上線方式完全一致即可。
3. 物理硬盤的詳細(xì)情況:MegaCli64 -PDList -aALL
每個(gè)硬盤會(huì)有兩段信息,在這兩部分能明確看到硬盤類型和具體型號(hào)。
機(jī)械盤:
- Media Type: Hard Disk Device
- Inquiry Data: SEAGATE ST300MM0006
SSD:
- Media Type: Solid State Device
- Inquiry Data: xxxxxxxxx INTEL SSDSA2CW300G3
4. RAID組分布情況:MegaCli64-cfgdsply -aALL
這里會(huì)以 DISK GROUP 的方式分別顯示物理硬盤分組,ID對(duì)應(yīng)LDInfo里看到的ID。具體硬盤的狀態(tài)和PDList看到的基本相同,可以判斷哪個(gè)硬盤組里是什么樣的硬盤。
linux下硬盤盤符和RAID組的對(duì)應(yīng)關(guān)系
我們已經(jīng)知道如何查看RAID卡的配置和上面的硬盤狀態(tài),還有一個(gè)問題需要解決,就是運(yùn)維做好的系統(tǒng)里,到底哪個(gè)盤符對(duì)應(yīng)著哪一組RAID?簡單來說我們可以通過容量判斷,但也可能遇到多組RAID容量相近,實(shí)際硬盤組成不同的情況。
通過yum安裝lshw,可以用這個(gè)工具來幫助我們確定。具體如下:
lshw -class disk
它的輸出方式類似下面這樣:
其中disk:X里的X對(duì)應(yīng)LDInfo里的Target Id。有了這層關(guān)系,就可以把logical name的盤符跟實(shí)際對(duì)應(yīng)起來了。
- *-disk:3
- description: SCSI Disk
- product: MR9260-8i
- vendor: LSI
- physical id: 2.3.0
- bus info: scsi@0:2.3.0
- logical name: /dev/sdd
- version: 2.13
- serial:00651b56e8fc7bc41e4037150ab00506
- size: 557GiB (599GB)
- capabilities: partitionedpartitioned:dos
- configuration: ansiversion=5logicalsectorsize=512 sectorsize=512 signature=000eb99d
通過上面的教程,我們?cè)谟蒙婕暗叫聶C(jī)器測(cè)試,或者涉及硬盤敏感的測(cè)試項(xiàng)目時(shí),可以先確定測(cè)試環(huán)境是否符合預(yù)期,硬盤配置一致。對(duì)于RAID不了解的同學(xué),也可以先補(bǔ)充一點(diǎn)營養(yǎng),了解RAID的初步知識(shí),對(duì)不同RAID方式的性能有一個(gè)大致的預(yù)期,以此來輔助檢查測(cè)試結(jié)果是否合理。