快捷搜索:

DS4000做LVM Mirror时的IO暂停时间探讨

在平日的高靠得住性要求下,一台DS4000的全冗余设计和RAID保护可以达到客户的要求。跟着越来越多的客户对数据的安然性注重程度的加深和对营业继续性的要求的赓续提升,客户必要一种全冗余的存储价格设计。例如,同时应用两台互换机,两个Fabric,任何一个呈现故障IO都可用经由过程备份路径进行;同时应用两台DS4000,经由过程AIX操作系统的LVM Mirror来镜像两台DS4000中的数据,当任何一台DS4000掉效后,利用仍旧可以造访镜像盘;同时应用两台主机做HACMP,当一台主机运行的利用毁坏后别的一台主机可以接收该利用。这个规划是名符着实的全冗余设计。以下是一个范例的连接拓普图:

如图示的拓普布局中,任何一台DS4000,互换机或主机光纤卡,主机掉效,对利用都是透明的。然则假如利用的超时参数设置的异常短,就无法实现设计这个全冗余设计的初衷。以是利用的超时设计应该综合斟酌所有部分的延时。本文将对整体延时的一部分——AIX的LVM Mirror的IO停息光阴进行评论争论和阐发。

本文将在单主机的环境下开展评论争论。

评论争论一:

任何一台DS4000存储办事器内的一个阵列(Array)掉效,例如RAID5阵列中的两块硬盘同时离线。阵列处于不能造访状态。

在这种情况下,AIX的LVM Mirror经由过程与DS4000存储办事器的节制器进行通讯懂得到阵列掉效的环境,几秒钟后IO就继承与镜像的PV进行了。

留意:在创建Mirror VG的时刻,Keep Quorum Checking On 参数应该设为no。而且Mirror VG建成今后应该从新varyoff,varyon这个VG来使这个设置生效。这个参数为yes时的意思是强制Mirror VG的成员老是同步,假如这样设置,那么一个当LVM 检测到一个PV毁坏,就会挂起全部VG,IO将不会继承。

评论争论二:

假如做LVM Mirror的主机有两块HBA卡,每块卡看到一台DS4000的两个节制器(拓普图如下),此中任何一块HBA毁坏的时刻,有哪些设置可以削减LVM Mirror停息的光阴呢?

在如图示的情况中,变动以下表格所列的设备的参数将有效的缩短LVM Mirror IO停息的光阴。

留意:在正常的利用情况中变动此参数对机能和稳定性没有影响。

设备

参数

默认属性

变动为

参数的含义

备注

dar

switch_retries

5

0

重试与互换机连接的次数

变动为0将掉去在线进级DS4000 节制器微码的功能

hdisk

rw_timeout

30

10

每个读写操作超时的时长,单位是秒

每个pending的IO都必要等到超时才能看护LVM

hdisk

reassign_to

120

30

发明丢包后多长光阴看护主机,单位是秒

容许的范围为0到1000秒留意:在创建Mirror VG的时刻,Keep Quorum Checking On 参数应该设为no。缘故原由拜见评论争论一。

评论争论三:

假如任何一台DS4000的电源整个毁坏或主机端到光纤互换机的连接整个断掉落,有哪些设置可以削减LVM Mirror IO停息的光阴呢?

在这个情形下,LVM Mirror IO停息的光阴将比前面两种评论争论中的场景都有长:评论争论一中LVM可以跟DS4000的节制器通讯,以是它清楚地知道PV坏,顿时就可以做出只写镜像的PV的抉择;评论争论二中,LVM只要等到系统设备超时的申报就可以做出只写镜像的PV的抉择;而评论争论三的情形下,主机与DS4000之间有光纤互换机相隔,光纤互换机为确认端口设备变更而设置了重试次数和超韶光阴,以是IO停息的光阴相对前两种较长。

变动fscsi设备的参数将缩短LVM Mirror IO停息的光阴。

留意:此参数在一个DS4000节制器或一条通路掉效的环境下也能削减切换光阴。它必要互换机的支持,IBM的光纤互换机都支持这一设置,在2006年4月份的测试中,我们发明Qlogic SAN Box 5200不支持这一功能。将fscsi参数设为fast_fail对系统的机能和稳定性没有影响。

设备

参数

默认属性

变动为

参数的含义

备注

fscsi

fc_err_recov

delay_fail

fast_fail

当互换机发明DS4000不在fabric上时,会看护主机的光纤接口卡,fast_fail的意思是当主机接到这个看护后顿时fail掉落所有对这个设备的IO

这个设置在一个它DS4000节制器掉效,而另一个节制器没有掉效的情况下,对削减IO从新路由必要的光阴有伟大年夜的赞助

与评论争论二相同的是主机真个参数设置应为:

设备

参数

默认属性

变动为

参数的含义

备注

dar

switch_retries

5

0

重试与互换机连接的次数

变动为0将掉去在线进级DS4000 节制器微码的功能

hdisk

rw_timeout

30

10

每个读写操作超时的时长,单位是秒

每个pending的IO都必要等到超时才能看护LVM

hdisk

reassign_to

120

30

发明丢包后多长光阴看护主机,单位是秒

容许的范围为0到1000秒

留意:在创建Mirror VG的时刻,Keep Quorum Checking On 参数应该设为no。缘故原由拜见评论争论一。

实例:

硬件情况:

pSeries 630, DS4500, DS4300Turbo 和2109-F16

软件情况:

AIX 5.2 ML6

devices.fcp.disk.array.rte 5.2.0.60

DS4500微码 06.12.03.00

DS4300Turbo微码 06.12.03.00

光纤互换机微码 v3.2.0

1. 每个互换机做两个Zone,连接图如下。

F16-1 zone 如下:

P630_fcs0_DS4500_CtlA1

P630_fcs0_DS4500_CtlB1

F16-2 zone 如下:

P630_fcs1_DS4300T_CtlA1

P630_fcs1_DS4300T_CtlB1

2. 在AIX中删除所有原有光纤设备,从新扫描cfgmgr,反省设备

lspv

fget_config -vA

看到dar0对付dac0/dac1,dar1对付dac2/dac3

3. 变动设备属性

chdev -l fscsi0 -a fc_err_recov=fast_fail -P

chdev -l fscsi1 -a fc_err_recov=fast_fail -P

chdev -l dar0 -a switch_retries=0

chdev -l dar1 -a switch_retries=0

chdev -l hdisk2 -a rw_timeout=10 --例如LUN_1为hdisk2

chdev -l hdisk2 -a reassign_to=30

chdev -l hdisk3 -a rw_timeout=10 --例如LUN_2为hdisk3

chdev -l hdisk3 -a reassign_to=30

留意:假如fscsi设备的属性无法设置,可以将它的子设备都置为define状态

rmdev - l hdisk2

rmdev - l hdisk3

rmdev - l dar0

rmdev - l dar1

rmdev - l dac0

rmdev - l dac1

rmdev - l dac2

rmdev - l dac3

然后运行:

chdev -l fscsi0 -a fc_err_recov=fast_fail -P

chdev -l fscsi1 -a fc_err_recov=fast_fail - P

着末运行:

cfgmgr

反省设备属性可以用敕令:

lsattr - El device_name

4. 创建vg,lv,增添另一个lun到vg, 镜像vg,变动quorum属性, varyoffvg,varyonvg 来使quorum设置生效。

mkvg - y vg_name pv_name

mklv - y lv_name vg_name

extendvg - y vg_name new_pv_name

mirrorvg vg_name new_pv_name

chvg - Qn vg_name

varyoffvg vg_name

varyonvg vg_name

5. 用dd来测试一下对lv的读写,用iostat来监视到DS4000的IO。

写:

time dd if=/dev/zero of=/dev/rlv_name bs=1m count=2000 --写2GB的数据

iostat - a 1|grep fcs --假如fcs0和fcs1都稀有据阐明mirror成功

读:

time dd if=/dev/ rlv_name of=/dev/null bs=1m count=2000 --读2GB的数据

iostat - a 1|grep fcs --假如fcs0和fcs1都稀有据阐明mirror成功

6. 测试评论争论一中的环境,Fail一个array

以读为例:

time dd if=/dev/ rlv_name of=/dev/null bs=1m count=2000 --读2GB的数据

iostat - a 1|grep fcs>scenario_1.txt --将IO环境输出到文件

当义务没有完成前在DS4000的Storage Manager中将一个Array中的两个HDD经由过程菜单设为advance→maintenance→fail drive

lsvg - p vg_name --查看一个PV的状态为missing

等到time dd…敕令履行完成,用ctrl+c竣事iostat,用vi打开scenario_1.txt文件,删掉落有IO的行,仅保留IO停息时的记录,数出行数并除以二。获得IO停息的秒数。

7. 在DS4000的Storage Manager中将一个Array中的两个HDD 经由过程菜单advance→maintenance→revive drive 设为在线。

lsdev - Cc disk     -- 反省响应的hdisk直到available

varyoffvg vg_name

varyonvg vg_name  -- syncvg

lsvg - l vg_name    -- 查看lv的状态是否是closed/sync

8. 测试评论争论二中的环境,主机卡掉效。

以读为例:

time dd if=/dev/ rlv_name of=/dev/null bs=1m count=2000 --读2GB的数据

iostat - a 1|grep fcs>scenario_2.txt --将IO环境输出到文件

当义务没有完成前将互换机上一个主机的接口disable或者拔这根光纤线,模拟主机卡掉效。

lsvg - p vg_name --查看一个PV的状态为missing

等到time dd…敕令履行完成,用ctrl+c竣事iostat,用vi打开scenario_2.txt文件,删掉落有IO的行,仅保留IO停息时的记录,数出行数并除以二。获得IO停息的秒数。

9. Enable互换机上disable的主机接口或者插上这根光纤线,模拟主机卡规复康健。

lsdev - Cc disk       -- 反省响应的hdisk直到available

varyoffvg vg_name

varyonvg vg_name    -- syncvg

lsvg - l vg_name      -- 查看lv的状态是否是closed/sync

10. 测试评论争论三中的环境,一台DS4000掉效。

以读为例:

time dd if=/dev/ rlv_name of=/dev/null bs=1m count=2000 --读2GB的数据

iostat - a 1|grep fcs>scenario_3.txt --将IO环境输出到文件

当义务没有完成前将互换机上所有这台DS4000的主机接口disable或者拔这些光纤线,模拟DS4000掉效;也可以关掉落DS4000的电源。

lsvg - p vg_name --查看一个PV的状态为missing

等到time dd…敕令履行完成,用ctrl+c竣事iostat,用vi打开scenario_3.txt文件,删掉落有IO的行,仅保留IO停息时的记录,数出行数并除以二。获得IO停息的秒数。

11. Enable互换机上disable的DS4000的主机接口或者插上所有拔掉落的光纤线,或是打开DS4000电源开关,模拟DS4000规复康健。

lsdev - Cc disk        -- 反省响应的hdisk直到available

varyoffvg vg_name

varyonvg vg_name      -- syncvg

lsvg - l vg_name       -- 查看lv的状态是否是closed/sync

您可能还会对下面的文章感兴趣: