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