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