测试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方式的性能有一个大致的预期,以此来辅助检查测试结果是否合理。