IO性能测试-关于RAID不可不知的那些事儿

存储 存储设备
RAID卡用来显示服务器硬盘的RAID卡以及插在上面的硬盘配置信息。总的来说RAID卡是插在服务器上的一块PCIE板卡,提供接口接入多块硬盘,负责处理RAID所需要的运算,保存RAID信息,驱动硬盘(如多块硬盘依次延时启动、管理硬盘SMART信息)等任务。

测试RAID卡的必要性

RAID卡用来显示服务器硬盘的RAID卡以及插在上面的硬盘配置信息。总的来说RAID卡是插在服务器上的一块PCIE板卡,提供接口接入多块硬盘,负责处理RAID所需要的运算,保存RAID信息,驱动硬盘(如多块硬盘依次延时启动、管理硬盘SMART信息)等任务。用主板也可完成实验性的RAID功能,由主板芯片组负责处理RAID,CPU承担运算任务,实际性能和稳定性很差,无法达到稳定使用的RAID目的。

作为测试,在进行IO密集的性能测试时,需要关注服务器的RAID配置是否和预期使用的机器一致。从硬件(RAID卡)到软件(如RAID配置方式)都可能存在差异。例如,同样是4块硬盘的服务器上跑一个应用,RAID 5下跑出来的性能跟RAID 10下跑出来的可能就差距很大。

[[211747]]

另外,在使用单块接在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

每个硬盘会有两段信息,在这两部分能明确看到硬盘类型和具体型号。

机械盘:

  1. Media Type: Hard Disk Device 
  2. Inquiry Data: SEAGATE ST300MM0006 

SSD:

  1. Media Type: Solid State Device 
  2.       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的盘符跟实际对应起来了。

  1. *-disk:3 
  2. description: SCSI Disk 
  3. product: MR9260-8i 
  4. vendor: LSI 
  5. physical id: 2.3.0 
  6. bus info: scsi@0:2.3.0 
  7. logical name: /dev/sdd 
  8. version: 2.13 
  9. serial:00651b56e8fc7bc41e4037150ab00506 
  10. size: 557GiB (599GB) 
  11. capabilities: partitionedpartitioned:dos 
  12. configuration: ansiversion=5logicalsectorsize=512 sectorsize=512 signature=000eb99d 

通过上面的教程,我们在用涉及到新机器测试,或者涉及硬盘敏感的测试项目时,可以先确定测试环境是否符合预期,硬盘配置一致。对于RAID不了解的同学,也可以先补充一点营养,了解RAID的初步知识,对不同RAID方式的性能有一个大致的预期,以此来辅助检查测试结果是否合理。

 

责任编辑:武晓燕 来源: 房汇智
相关推荐

2014-06-20 14:35:48

浪潮数据

2020-01-17 06:12:10

物联网IOT技术

2015-05-21 10:03:04

应用标题ASO

2010-06-11 14:46:38

可路由协议

2015-07-28 16:48:04

云计算性能测试云服务

2014-02-19 16:28:39

零售业趋势联网商店

2015-01-15 09:34:28

2020-11-30 13:12:04

Linux文本命令

2021-01-28 10:17:54

人工智能AI机器学习

2011-04-25 09:45:09

C#委托

2015-03-04 14:54:47

DockerIT管理基础设施

2010-04-16 17:09:18

Oracle查看锁

2018-06-12 11:05:33

2014-06-09 13:21:27

2020-11-11 21:27:55

缓冲文件调用

2019-12-02 14:14:20

缓冲系统调用函数

2021-01-27 09:45:17

负载均衡

2010-10-27 10:39:44

求职

2024-03-21 08:57:39

语言软件开发

2015-07-30 17:30:43

Linux命令
点赞
收藏

51CTO技术栈公众号