测试目的:
测试在 OpenPower环境下,通过红旗DC5.0连接上EMC CX存储,并使用系统自带device-mapper-multipath软件来测试多路径的冗余和负载均衡功能,以保证用户数据的高可用性和高可靠性。

测试方法:
为了保证用户数据的可用性和可靠性,测试方法如下:
1.可用性测试:OpenPower通过光纤交换机与EMC存储正确连接,并能在OpenPower上的红旗Linux正确识别,正确读写数据。
2. 可靠性测试:通过MPIO(MultiPath IO,即多路径IO),对EMC 存储进行数据读写,以获取相关IO传输状态的数据。并且,在数据读写过程中,分别拔掉光纤线和连接EMC 存储的当前活动控制器的光纤线,造成路径失败,以考察路径切换性能,随后再重新接入光纤线,以考察路径“愈合”性能。

测试结果
通过一天紧张的测试,达到本次测试预期目标,测试成功。

在OpenPower机型上,使用红旗Linux系统,能够做到:
1.正确访问EMC CX存储。
2.通过使用系统自带的device-mapper-multipath软件,能够以负载均衡的方案访问EMC CX存储。
3.当一条光纤或者EMC CX存储的单个控制器失效时,系统自动切换路径,并能持续读写存储设备,保证数据的可靠性。

测试环境:
服务器:OpenPower 710 (1CPU/1G Mem/73.4G)
光纤卡: Emulex lp10000 HBA卡两块
交换机:Brocade 2400 一台,McData 140M一台
存储: EMC CX500 Realease 19 (双控制器)
操作系统:RedFlag DC 5.0 for IBM pSeries


测试步骤
1.部署测试环境,主机上两块Emulex光线卡连接到光纤交换机,通过光纤交换机再连接到EMC CX存储,形成SAN拓扑结构。并划分1个100G的LUN分配给主机。

2.主机安装操作系统(测试前准备),安装最新版的device-mapper-multipath软件包。
通过device-mapper-multipath用户工具来验证多路径的负载均衡及路径失效切换功能:
使用fdisk命令能看到系统识别出来的4个磁盘设备,这是多条路径得到的设备名,实际上指向存储上的同一个LUN,这说明红旗操作系统已经正确识别到了EMC CX存储划分出来的LUN,并为下一步多路径管理作准备。命令及输出如下:

#fdisk -l
Disk /dev/sdf: 103 GB, 107374182400 bytes
64 heads, 32 sectors/track, 102400 cylinders
Units = cylinders of 2048 0* 512 = 107374182400 bytes

Disk /dev/sdf doesn't contain a valid partition table

Disk /dev/sdh: 103 GB, 107374182400 bytes

64 heads, 32 sectors/track, 102400 cylinders
Units = cylinders of 2048 0* 512 = 107374182400 bytes

Disk /dev/sdh doesn't contain a valid partition table

Disk /dev/sdj: 103 GB, 107374182400 bytes
64 heads, 32 sectors/track, 102400 cylinders
Units = cylinders of 2048 0* 512 = 107374182400 bytes

Disk /dev/sdj doesn't contain a valid partition table

Disk /dev/sdl: 103 GB, 107374182400 bytes
64 heads, 32 sectors/track, 102400 cylinders
Units = cylinders of 2048 0* 512 = 107374182400 bytes

Disk /dev/sdl doesn't contain a valid partition table


实际上这4个设备对应的是一个LUN,只是通过不同的路径看到的。

3.启动多路径管理软件

# modprobe dm-multipath (加载dm-multipath内核模块)


说明:系统启动时缺省地不加载这个模块。如果应用部署需要,可以在系统启动时定制。

# /etc/init.d/multipathd start (启动multipath daemon服务)
# multipath –v3 (装配多路径设备)
# multipath -ll (显示当前多路径拓扑结构)
3600601604b991100f4e5b5c83ef5da11
[size=100 GB][features="1 queue_if_no_path"][hwhandler="1 emc"]
\_ round-robin 0 [active]
\_ 1:0:2:1 sdf 8:80 [ready ][active]
\_ 2:0:1:1 sdl 8:176 [ready ][active]
\_ round-robin 0 [enabled]
\_ 1:0:3:1 sdh 8:112 [ready ][active]
\_ 2:0:0:1 sdj 8:144 [ready ][active]


这里的设备被分成了两组,实际上就是通过两个控制器看到的设备,其中一组的状态为[active],表示这是当前的活动控制器。接下来的对设备的读写都会通过该控制器下的/dev/sdf和/dev/sdl来进行操作。而只有当[active]控制器发生了故障或者执行了Tresspass后才会启用目前处于[enabled]状态的控制器下面的设备/dev/sdh,/dev/sdj。后面的测试会来证实这点。
4.在EMC CX存储上创建测试需要的分区


#pvcreate /dev/dm-0 ( 创建物理卷)
#vgcreate vgtest /dev/dm-0 (创建一个卷组)
Volume group "vgtest" successfully created
#lvcreate -L+50G -n lvtest1 vgtest
Logical volume "lvtest1" created


5.负载均衡测试
使用dd命令来对设备进行写操作,并同时通过iostat来查看I/0状态,命令及输出如下:


#dd if=/dev/zero of=/dev/vgtest/lvtest1
avg-cpu: %user %nice %sys %iowait %idle
0.50 0.00 3.47 48.51 47.52

Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 0.00 0.00 0.00 0 0
sdf 756.57 6044.44 0.00 5984 0
sdh 0.00 0.00 0.00 0 0
sdj 0.00 0.00 0.00 0 0
sdl 334.34 2682.83 0.00 2656 0


通过上述输出,我们看到,在对/dev/vgtest/lvtest1读写时,实际上是通过对/dev/md-0包含的当前active的所有设备,即/dev/sdf,/dev/sdl这2条路径来完成对实际的LUN的写过程。

6.路径切换测试
首先,我们拔掉服务器上A口的光纤线,经过不到10秒,我们看到:MPIO成功地从上述“失败”的路径/dev/sdl切换到了另外一条路径/dev/sdf上。其输出样本如下:


#iostat 1
avg-cpu: %user %nice %sys %iowait %idle
0.50 0.00 6.47 46.77 46.27

Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 0.98 0.00 7.84 0 8
sdf 1709.80 13678.43 0.00 13952 0
sdh 0.00 0.00 0.00 0 0
sdj 0.00 0.00 0.00 0 0
sdl 0.00 0.00 0.00 0 0

接着,我们重新接入光纤线,这次也是不到10秒(此值可以设置),验证了路径“愈合”。其输出样本如下:


#iostat 1
avg-cpu: %user %nice %sys %iowait %idle
0.50 0.00 3.48 48.76 47.26

Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 0.00 0.00 0.00 0 0
sdf 504.00 4024.00 0.00 4024 0
sdh 0.00 0.00 0.00 0 0
sdj 0.00 0.00 0.00 0 0
sdl 594.00 4760.00 0.00 4760 0


同样的测试结果可以在服务器上另外一块光纤卡上重现。

7.控制器切换测试
使用同样的方法,拔掉目前处于Active的EMC CX存储控制器上的一根光纤线,能够看到下面的输出:


#iostat 1
avg-cpu: %user %nice %sys %iowait %idle
0.50 0.00 6.47 46.77 46.27

Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 0.98 0.00 7.84 0 8
sdf 1609.80 13670.2 0.00 14972 0
sdh 0.00 0.00 0.00 0 0
sdj 0.00 0.00 0.00 0 0
sdl 0.00 0.00 0.00 0 0


从输出结果能够看出,路径也从失效的/dev/sdl切换到了/dev/sdf,和把掉一根连接到服务器上的光纤线上是同样的效果。
接下来,我们重新插入光纤,不到10秒种,我们可以看到下面的输出信息

#iostat 1
avg-cpu: %user %nice %sys %iowait %idle
0.50 0.00 3.48 48.76 47.26
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 0.00 0.00 0.00 0 0
sdf 504.00 4024.00 0.00 4024 0
sdh 0.00 0.00 0.00 0 0
sdj 0.00 0.00 0.00 0 0
sdl 594.00 4760.00 0.00 4760 0


这表明路径已经成功的愈合了。
最后,我们同时拔掉目前处于active状态的控制器连接的光纤。大约10秒钟后,输出的信息如下:

#iostat 1
avg-cpu: %user %nice %sys %iowait %idle
0.50 0.00 7.50 46.00 46.00
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 0.00 0.00 0.00 0 0
sdf 0.00 0.00 0.00 0 0
sdh 1910.00 15264.00 1552.00 15264 1552
sdj 149.00 976.00 15024.00 976 15024
sdl 0.00 0.00 0.00 0 0


同时查看CX300的信息,发现CX300已经成功的执行了Tresspass,而这个功能的实现是通过系统自带的dm-emc.ko内核模块来触发CX300来执行的,这点和EMC的PowerPath软件达到的目的基本一致。
同样的测试结果可以在第二个控制器上重现。
测试结论
根据以上的测试步骤和输出信息,能够得到以下结论:

在OpenPower机型上,安装红旗Linux DC 5.0 系统,连接EMC CX存储,可以保证以下几点:

1.红旗Linux操作系统能够正确访问EMC CX存储设备,并能正确使用。
2.通过使用红旗Linux系统自带的device-mapper-multipath软件,能够以负载均衡的MPIO方案访问EMC CX存储设备。
3.当一条光纤或者EMC CX存储的单个控制器失效时,系统自动切换路径,并能持续读写存储设备,保证数据的可靠性。