我在使用 Emulex (lpfc) 配置多路径时遇到问题。虽然我没有检测到数据损坏,但 SAN 管理员有一个工具显示路径每 20 秒左右切换一次。以下是详细信息:
# multipath -l
san01 (3600a0b80002a042200002cb44a9a29ca) dm-2 IBM ,1815 FASt
[size=100G][features=0][hwhandler=0]
\_ round-robin 0 [prio=0][active]
\_ 3:0:0:0 sdb 8:16 [active][undef]
\_ round-robin 0 [prio=0][enabled]
\_ 4:0:0:0 sdc 8:32 [active][undef]
多条路径连接到同一个LUN。
# /lib/udev/scsi_id -g -u -d /dev/sdb
3600a0b80002a042200002cb44a9a29ca
# /lib/udev/scsi_id -g -u -d /dev/sdc
3600a0b80002a042200002cb44a9a29ca
这是 /etc/multipath.conf
defaults {
udev_dir /dev
polling_interval 5
selector "round-robin 0"
path_grouping_policy failover
getuid_callout "/lib/udev/scsi_id -g -u -d /dev/%n"
path_checker readsector
failback immediate
user_friendly_names yes
}
multipaths {
multipath {
wwid 3600a0b80002a042200002cb44a9a29ca
alias san01
}
}
fdisk -l
Disk /dev/sdb: 107.3 GB, 107374182400 bytes
255 heads, 63 sectors/track, 13054 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x61b4bf95
Device Boot Start End Blocks Id System
/dev/sdb1 1 13054 104856223+ 83 Linux
Disk /dev/sdc: 107.3 GB, 107374182400 bytes
255 heads, 63 sectors/track, 13054 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x61b4bf95
Device Boot Start End Blocks Id System
/dev/sdc1 1 13054 104856223+ 83 Linux
我增加了 lpfc 的详细程度,现在我在 dmesg 上得到了以下内容:
[ 2519.241119] lpfc 0000:07:00.0: 1:0336 Rsp Ring 0 error: IOCB Data: xff000018 x37a120c0 x0 x0 xeb x0 x1b108db xa29b16
[ 2519.241124] lpfc 0000:07:00.0: 1:(0):0729 FCP cmd x12 failed <0/0> status: x1 result: xeb Data: x1b1 x8db
[ 2519.241127] lpfc 0000:07:00.0: 1:(0):0730 FCP command x12 failed: x0 SNS x0 x0 Data: x8 xeb x0 x0 x0
[ 2519.241130] lpfc 0000:07:00.0: 1:(0):0716 FCP Read Underrun, expected 254, residual 235 Data: xeb x12 x0
[ 2519.241275] lpfc 0000:07:00.0: 1:0336 Rsp Ring 0 error: IOCB Data: xff000018 x37a14c48 x0 x0 xd2 x0 x1b208e6 xa29b16
[ 2519.241279] lpfc 0000:07:00.0: 1:(0):0729 FCP cmd x12 failed <0/0> status: x1 result: xd2 Data: x1b2 x8e6
[ 2519.241283] lpfc 0000:07:00.0: 1:(0):0730 FCP command x12 failed: x0 SNS x0 x0 Data: x8 xd2 x0 x0 x0
[ 2519.241286] lpfc 0000:07:00.0: 1:(0):0716 FCP Read Underrun, expected 254, residual 210 Data: xd2 x12 x0
有人能看出这个配置有什么问题吗?谢谢。
根据 janneb 的评论,我将 multipath.conf 中的配置更改为:
defaults {
udev_dir /dev
polling_interval 5
selector "round-robin 0"
path_grouping_policy multibus
getuid_callout "/lib/udev/scsi_id -g -u -d /dev/%n"
failback immediate
user_friendly_names yes
}
现在给出:
san01 (3600a0b80002a042200002cb44a9a29ca) dm-2 IBM ,1815 FASt
[size=100G][features=0][hwhandler=0]
\_ round-robin 0 [prio=2][active]
\_ 3:0:0:0 sdb 8:16 [active][ready]
\_ 4:0:0:0 sdc 8:32 [active][ready]
但过了一会儿它仍然处于 [active][undef] 状态,然后又回到 [ready] 状态。
哦,我刚刚注意到一些事情,当我运行“multipath -l”时,我得到了 [undef],但是如果我运行“multipath -ll”我得到了 [ready]。
-l show the current multipath topology from information fetched in sysfs and the device mapper
-ll show the current multipath topology from all available information (sysfs, the device mapper, path checkers ...)
设置错误吗?我该如何调试?谢谢。
感谢 janneb 和 zerolagtime 的帮助。
这就是事情变得复杂的原因,我想我不需要解释这一切,而我目前倾向于硬件设置混合。
实际上有两台服务器使用 FC 连接到同一个 LUN。在操作系统级别,只有一台服务器可以访问文件系统(尽管同一 LUN 暴露给两台服务器),因为它是 ext3(不是集群文件系统)。如果服务器 1 发生故障,服务器 2 将启动(linux-ha)并挂载文件系统。
服务器 1 (多路径 -ll):
san01 (3600a0b80002a042200002cb44a9a29ca) dm-2 IBM ,1815 FASt
[size=100G][features=0][hwhandler=0]
\_ round-robin 0 [prio=2][active]
\_ 3:0:0:0 sdb 8:16 [active][ready]
\_ 4:0:0:0 sdc 8:32 [active][ready]
服务器 2 (多路径 -ll):
san01 (3600a0b80002a042200002cb44a9a29ca) dm-2 IBM ,1815 FASt
[size=100G][features=0][hwhandler=0]
\_ round-robin 0 [prio=2][active]
\_ 3:0:0:0 sdb 8:16 [active][ready]
\_ 4:0:0:0 sdc 8:32 [active][ready
服务器 1 端口名称:
# cat /sys/class/fc_host/host3/port_name
0x10000000c96c5fdb
# cat /sys/class/fc_host/host4/port_name
0x10000000c96c5df5
root@web-db-1:~#
服务器2端口名称:
#cat /sys/class/fc_host/host3/port_name
0x10000000c97b0917
# cat /sys/class/fc_host/host4/port_name
0x10000000c980a2d8
这个设置有错吗?LUN 暴露给两台服务器的方式有错吗?我在想硬件连接不正确,可能是什么问题?server1 path_checker 会干扰 server2 的操作吗?谢谢。
答案1
您的配置看起来很奇怪;通常您会有 4 条路径通向同一设备(即每个多路径设备有 4 个 /dev/sdX 设备)。阵列控制器通常能够通知主机每条路径的优先级,因此您有 2 条优先级较高的路径和 2 条优先级较低的路径。然后 dm-multipath 将 IO 多路复用到 2 条高优先级路径上(“selector”选项默认为 rr_min_io=100)。现在,您有 2 个优先级相同的路径组,因此 dm-multipath 可能会将 IO 分散到它们两个上,这可能不是您的 SAN 管理员希望您做的。另一个奇怪的事情是设备标记为“undef”而不是“ready”。还有一件奇怪的事情是您的路径编号看起来很奇怪(一切都沿着相同的路径?)。您真的确定一切都正确连接在一起、正确分区等吗?
“multipath -ll”的典型输出应如下所示
sanarch3 (3600508b4000683de0000c00000a20000) dm-6 HP,HSV200 [大小=2.0T][特征=1 个queue_if_no_path][硬件处理程序=0][读写] \_ 循环 0 [优先级=100][活跃] \_ 0:0:0:5 sdc 8:32 [活动][就绪] \_ 1:0:0:5 sdk 8:160 [活动][就绪] \_ 循环 0 [优先级=20][已启用] \_ 0:0:1:5 sdg 8:96 [活动][准备就绪] \_ 1:0:1:5 sdo 8:224 [活动][就绪]
您可以看到 4 条路径分为 2 个优先级组,并且 IO 通过设备 sdc 和 sdk 完成,而 sdg 和 sdo 处于空闲状态并且仅在发生故障时使用。
编辑因此,您之所以会看到 4 条路径,是因为您有 2 个 HBA 端口,并且阵列有 2 个冗余控制器。然后,您有 2 个冗余网络,最后一个交换机层提供跨网络连接。因此,两个 HBA 都可以看到两个控制器,因此每个 LUN 有 4 条路径。您可以在上面的 SCSI ID 编号示例中看到这一点,其格式为 [主机控制器 ID]:[通道 ID]:[目标控制器 ID]:[LUN ID]。然后,您可以在上面看到,活动路径都在控制器 #0 上,因为在这种情况下,控制器 #0 恰好“拥有”该 LUN;可以通过另一个控制器进行 IO,但性能会受到影响,因为另一个控制器(取决于控制器实现)需要将 IO 转发到拥有该 LUN 的控制器。因此,控制器报告指向控制器 #0 的路径具有更高的优先级。
因此,从您的问题可以看出,根本没有通往其他控制器的路径。而且,如果您没有冗余控制器和网络,为什么还要费心使用多路径呢?
答案2
IBM SAN 的文档中通常有一个定义良好的 multipath.conf 示例,你不是从那里开始的吗?我将保留该部分给读者一个练习。此外,您的 SAN 管理员还欠您一点支持。一些要点
像你所描述的路径振荡通常是由于路径检查器配置错误造成的,在你的两次迭代中,你从读取扇区0到没有任何,可能采用该品牌和型号的多路径默认值,很可能图尔(测试单元准备就绪)。
没有定义优先级检查器,没有优先级检查器,没有优先级。
可能需要硬件处理程序,该硬件处理程序在文档中有明确定义。
我发现的最佳 IBM 1815 战争故事这是, 概括:
- 安装 rdac 驱动程序,modprobe scsi_dh_rdac并将其添加到你的 initrd
- 使用以下 multipath.conf:
blacklist {
devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
devnode "^hd[a-z]"
devnode "^sda"
device {
vendor "Maxtor*"
product "OneTouch*"
}
}
blacklist_exceptions {
device {
vendor "IBM"
product "1815*"
}
}
defaults {
failback immediate
no_path_retry queue
user_friendly_names no
path_grouping_policy failover
}
devices {
device {
vendor "IBM"
product "1815*"
failback manual
hardware_handler "1 rdac"
path_checker rdac
prio_callout "/sbin/mpath_prio_rdac /dev/%n"
}
}
让我们知道结果如何。祝你好运!
答案3
首先,您定义多总线,您确定您的存储支持这一点吗?询问您的 SAN 管理员您的存储是否是真正的主动/主动存储,主动被动存储不允许一直从控制器切换,这会给存储带来成本,也会给您的客户端带来问题。在第一个配置中,它未在配置中定义,这意味着您采用多路径中定义的默认配置(检查 /usr/share/doc/mulitpath.conf.anotted)或查看 multipathd -k show config 的输出以获得更好的视图。(无论如何,请根据您的存储规格检查默认配置,因为它们并不总是最好的:我在使用 HDS 和 rhel 时遇到了一些问题)
第二件事,您说 FS 上没有完整性问题,您确定 FS 正在使用多路径设备吗?如果我假设您使用 LVM,您是否检查过 lvm.conf 中的过滤器设置?如果设置不当,lvm 将直接使用该设备而不是使用 MPIO,这对于主动/被动存储来说可能是一个更大的问题,因为 lvm 将强制使用可能不是首选的控制器....我希望它能有所帮助。