未解决
此帖子已超过 5 年
42 消息
0
9038
powerpath多路径切换疑问
RHEL5.4,powerpath 5.3环境
主机块HBA卡连至两个交换机,两个交换机都连接了CX存储的SPA和SPB的前端口
做的zone:
交换机A:
HBA1 SPA0
HBA1 SPB0
交换机B:
HBA2 SPA1
HBA2 SPB1
当交换机主机至交换机B的链路突然断掉,当前由HBA2往SPA1和SPB1发送的IO肯定都失败了。
现在我想知道的是:多长时间以后,失败的后会failover至HBA1的两条路径上去?
都有哪些设置会影响到这个failover的过程呢?
我知道的有HBA卡驱动有一个判断loop down的timeout 设置,不是的还有其他timeout相关的东西吗?比如powerpath的?HBA卡物理设置等等?
xulei1
42 消息
0
2012年7月3日 00:00
我有一台服务器:
RHEL5.4环境下,内核自带驱动,以下这个参数是不是判断loop down的timeout设置?
[root@pcfaildb-5 /root]
# cat /sys/module/qla2xxx/parameters/ql2xlogintimeout
20
有次由于HBA1至交换机链路问题,出现这个报错,注意到timeout out command, waited 30s,这个30s又是哪里来的呢?
Jun 16 16:49:56 pcfaildb-5 kernel: qla2xxx 0000:0b:00.0: scsi(1:2:1): Abort command issued -- 1 f6fb4ff 2002.
Jun 16 16:49:56 pcfaildb-5 kernel: sd 1:0:2:1: timing out command, waited 30s
Jun 16 16:49:56 pcfaildb-5 kernel: Error:Mpx:Path Bus 1 Tgt 2 Lun 1 to CK200071300285 is dead.
Jun 16 16:49:56 pcfaildb-5 kernel: Error:Mpx:Killing bus 1 to Clariion CK200071300285 port SP B1.
Asadeer
290 消息
0
2012年7月3日 00:00
正如你提到的,HBA卡驱动判断loop down的timeout设置决定了failover的时间。如果主机连接的是磁盘设备的话,Timeout参数一般设置在30秒-1分钟。如果连接的是磁带设备的话,这个参数就要相应调长。
Powerpath上没有timeout相关的设置,事实上,Powerpath正是在HBA驱动timeout之后才确定某个Path断掉的。希望这个回答对你有帮助:)
Celia_Lee
106 消息
0
2012年7月3日 08:00
推荐 最好使用emulex或是qlogic网站上, 指定存储厂家匹配的HBA卡firmware和驱动. 并根据存储厂家的配置文档的说明,修改HBA卡的配置参数, 这样可以使得HBA卡以最好的状态来工作.
powerpath链路切换的原理就是在发现了某条链路有响应失败的时候, 标记该链路故障, 而把IO重定向到工作正常的链路上去. 并且每5分钟对失败的链路检查一下是不是恢复正常了. 检测到链路恢复后, 就恢复对该链路的IO传送.
Asadeer
290 消息
0
2012年7月3日 08:00
Logintimeout是HBA端口的Login超时设置,我觉得Loop Down的timeout设置很大程度上取决于主机多久能探测端口Down(参数为Port Down Retry Count) 和在发现端口Down之后多久能确定Path Dead(参数为Link Down Timeout)。
Log里的Waited 30s是Link Down Timeout时间,即在主机已经探测到端口Down后,会再等待一段时间(例如30s)才断定路径Path Dead并且停止发送IO。在某些情况下链路若只是短暂的抖动很快恢复,这个机制可以避免不必要的trespass。可以修改这个参数qllink_down_timeout调整Link Down Timeout设置 。
Asadeer
290 消息
0
2012年7月3日 19:00
EMC推荐的Qlogic HBA的配置参数如下:
更多信息建议参考文档EMC Host Connectivity with QLogic Fibre Channel and iSCSI Host Bus Adapters(HBAs)。从Powerlink下载路径为
Home > Support > Technical Documentation and Advisories > Host Connectivity/HBAs > Installation/Configuration
xulei1
42 消息
0
2012年7月4日 02:00
qllink_down_timeout这个参数哪里可以看到,是怎样设置的呢?
powerpath内部的failover有没有时间的限制,比如最少需要多少多少秒的?
Asadeer
290 消息
0
2012年7月5日 01:00
上面表格里提到的参数Port Down Retry Count和Link Down Timeout都可以用SANsurfer CLI在NVRAM里编辑修改。
Main Menu
1: General Information
2: HBA Information
3: HBA Parameters
4: Target/LUN List
5: Boot Device
6: Utilities
7: Beacon
8: Diagnostics
9: FCoE
10: Help
11: Exit
选择1可以查看上面表格中的参数值,选择3可以修改这些参数。详细步骤请参考Qlogic 关于SANsurfer CLI的官方文档http://filedownloads.qlogic.com/files/Manual/72911/Users_Guide_-_SANsurfer_FC_HBA_CLI_%5BK%5D.pdf
Powerpath的failover没有时间限制的,Powerpath何时标记链路故障并重定向IO,完全取决于HBA的驱动返回的结果。
Alex_Ye
109 消息
0
2012年7月5日 02:00
Powerpath工作在HBA以及SCSI驱动的上层,由于下层的驱动通常都有重试和超时机制,Powerpath本身在遇到I/O错误的情况下,就会尝试使用不同的通道发送I/O,而不再重试。
当然Powerpath对于通道状态以及I/O请求的完成结果,仍然来源于下层驱动的返回。因此直到HBA驱动判定一个I/O请求超时之前,Powerpath都不会进行转发。
Powerpath本身也有路径检测机制,每个一段时间会根据自身的逻辑检测部分io通道,这样即使在应用发送I/O请求之前就可能提前发现通道故障,避免浪费一个超时的时间。
xulei1
42 消息
0
2012年7月5日 09:00
非常感谢,慢慢有眉目了。
之前您有一段话没有明白:
Loop Down的timeout设置很大程度上取决于主机多久能探测端口Down(参数为Port Down Retry Count) 和在发现端口Down之后多久能确定Path Dead(参数为Link Down Timeout)。
Port Down Retry Count这个参数怎么理解?
和Link Down Timeout参数有何种关系?
确定port down了再retry?还是retry了以后才确定down了?
retry又是怎么计数的呢?
还有,之前提到的,waited 30s不是port down的设置,我的port down timeout设置为8s。
Jul 6 01:39:57 temdb33 kernel: scsi(1): ABORT status detected 0x5-0x0.
Jul 6 01:39:57 temdb33 kernel: qla2xxx 0000:0b:00.0: scsi(1:7:19): Abort command issued -- 1 4995756 2002.
Jul 6 01:40:07 temdb33 kernel: qla2xxx_eh_abort(1): aborting sp ffff810fb2a46740 from RISC. pid=77158235.
Jul 6 01:40:07 temdb33 kernel: scsi(1): ABORT status detected 0x5-0x0.
Jul 6 01:40:07 temdb33 kernel: qla2xxx 0000:0b:00.0: scsi(1:7:19): Abort command issued -- 1 499575b 2002.
Jul 6 01:40:14 temdb33 kernel: qla2xxx 0000:0b:00.0: scsi(1:6:19): DEVICE RESET ISSUED.
Jul 6 01:40:14 temdb33 kernel: qla2x00_wait_for_hba_online return_status=0
Jul 6 01:40:36 temdb33 kernel: qla2xxx 0000:0b:00.0: scsi(1:6:19): DEVICE RESET SUCCEEDED.
Jul 6 01:40:36 temdb33 kernel: qla2xxx 0000:0b:00.0: scsi(1:7:19): DEVICE RESET ISSUED.
Jul 6 01:40:36 temdb33 kernel: qla2x00_wait_for_hba_online return_status=0
Jul 6 01:40:36 temdb33 kernel: qla2xxx 0000:0b:00.0: scsi(1:7:19): DEVICE RESET SUCCEEDED.
Jul 6 01:40:36 temdb33 kernel: sd 1:0:6:19: timing out command, waited 30s
Jul 6 01:40:36 temdb33 kernel: sd 1:0:7:19: timing out command, waited 30s
Jul 6 01:40:36 temdb33 kernel: sd 1:0:6:19: timing out command, waited 30s
Jul 6 01:40:36 temdb33 kernel: sd 1:0:7:19: timing out command, waited 30s
Jul 6 01:40:36 temdb33 kernel: sd 1:0:7:19: timing out command, waited 30s
Celia_Lee
106 消息
0
2012年7月5日 19:00
一般故障检测机制是发生了timeout以后,去做retry, retry N次之后,标记fail.
发生了timeout就会在底层日志里报错了.
xulei1
42 消息
0
2012年7月5日 21:00
据我自己做的测试,交换机端disable掉主机hba卡连的端口,无论我的port down timeout设置成多少,message日志马上会打印这条日志:
Jul 6 11:10:13 temdb33 kernel: qla2xxx 0000:0e:00.0: LOOP DOWN detected (2 6 0).
然后会做retry:
Jul 6 00:59:20 temdb33 kernel: scsi(0): fcport-4 - port retry count: 15 remaining
Jul 6 00:59:20 temdb33 kernel: scsi(0): fcport-5 - port retry count: 15 remaining
Jul 6 00:59:20 temdb33 kernel: scsi(0): fcport-6 - port retry count: 15 remaining
Jul 6 00:59:20 temdb33 kernel: scsi(0): fcport-7 - port retry count: 15 remaining
每秒一次,retry了Port Down Retry Count这么多次以后,就报path dead。看起来这时候powerpath才做failover。
这样看的话,port down timeout这个参数完全没有任何用处。
Alex_Ye
109 消息
0
2012年7月6日 15:00
看上去这个参数没有生效。
内核模块参数修改之后需要重新加载一下内核,请确认一下是否执行了这步操作。
重启服务器或者
modprobe -r ; modprobe #这个过程会unload驱动,因此必须确保设备不在使用。
xulei1
42 消息
0
2012年7月7日 00:00
我是通过qlogic的SANsurfer CLI工具改的HBA卡参数,改的应该是hba卡的NVRAM里的数据吧?
这个能及时生效吗?
Alex_Ye
109 消息
0
2012年7月8日 22:00
nvram里面的修改应该也不是即时生效的,参数生效是在驱动初始化/内核模块加载的时候。
这个参数的重载级别应该是 用户指定的参数 > 驱动定义的默认参数 > NVRAM配置。
因此我建议修改modprobe.conf,然后重新加载内核模块来尝试一下。
Asadeer
290 消息
0
2012年7月9日 01:00
根据楼上的几位讨论,小结一下,欢迎补充:)
下层HBA驱动有重试和超时机制,当HBA确定超时后会返回结果给Powerpath。之后Powerpath标志原路径故障并用不同的路径转发IO。
这样看来Failover的时间取决于HBA重试和超时的机制,其中最重要的参数是Port Retry Count的时间。这个参数在NVRAM配置中为Port Down Retry Count,在内核模块modprobe.conf配置中为ql_port_down_retry。参数的具体配置请参考HBA的厂家解释。
正如Alex所说,Modprobo.conf级别较高会覆盖 NVRAM的配置,建议在Modprobo.conf中改参数配置。