我遇到了使用Emulex(lpfc)configuration多path的问题。 尽pipe我没有检测到数据损坏,但SANpipe理员拥有一个工具,可以显示path每隔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]
多条path连接到同一个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
有人可以看到这个configuration有什么问题吗? 谢谢。
基于janneb的评论,我将multipath.conf中的configuration更改为:
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 ...)
设置是否错误? 我该如何debugging? 谢谢。
谢谢你janneb和zerolagtime的帮助。
这是如何变得复杂,我想我不需要解释这一切,我目前正在倾向于硬件设置混合。
实际上有两台服务器使用FC连接到相同的LUN。 在操作系统级别上,只有一台服务器可以访问文件系统(尽pipe同一个LUN都暴露给两者),因为它是ext3(不是集群文件系统)。 如果服务器1出现故障,服务器2将启动(linux-ha)并挂载文件系统。
服务器1(多path-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(多path-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暴露给两个服务器的方式是否错误? 我在想,硬件连接是不正确的,有什么可能是错的? 服务器1的path_checker是否会干扰server2的操作? 谢谢。
你的configuration看起来很奇怪, 通常情况下,您将有4条path到同一设备(即,每个多path设备4个/ dev / sdX设备)。 arrays控制器通常能够通知主机有关每条path的优先级,因此您有2条优先级更高的path,2条优先级更低。 然后,dm-multipath通过2个高优先级path(“select器”选项,默认rr_min_io = 100)复用IO。 现在,你有两个具有相同优先级的path组,所以也许dm-multipath在这两个path上扩展IO,这可能不是你的SANpipe理员希望你做的。 另一个奇怪的是,这些设备标有“undef”而不是“ready”。 还有一件奇怪的事情是,你的path编号看起来很奇怪(一切都沿着相同的path?)。 你真的确定一切正确的电缆连接在一起,妥善划分等?
“multipath -ll”的典型输出应该看起来像
sanarch3(3600508b4000683de0000c00000a20000)dm-6 HP,HSV200 [size = 2.0T] [features = 1 queue_if_no_path] [hwhandler = 0] [rw] \ _ round-robin 0 [prio = 100] [active] \ _ 0:0:0:5 sdc 8:32 [active] [ready] \ _ 1:0:0:5 sdk 8:160 [有效] [准备] \ _ round-robin 0 [prio = 20] [enabled] \ _ 0:0:1:5 sdg 8:96 [active] [ready] \ _ 1:0:1:5 sdo 8:224 [active] [ready]
在这里你可以看到4条path分为2个优先级组,IO通过设备sdc和sdk完成,而sdg和sdo是空闲的,仅在故障期间使用。
编辑所以,你应该看到4path的原因是,你有2个HBA端口,arrays有2个冗余控制器。 然后你有2个冗余networking,最后一个交换层提供跨networking连接。 因此两个HBA都看到两个控制器,因此每个LUN有4个path。 你可以看到,在我上面的SCSI ID编号的例子中,作为[主机控制器ID]:[通道ID]:[目标控制器ID]:[LUN ID]。 你可以在上面看到的是,活动path都在控制器#0上,因为在这种情况下,控制器#0碰巧“拥有”了LUN; IO可以通过另一个控制器来实现,但性能会受到影响,因为另一个控制器(取决于控制器的实现)需要将IO转发给拥有的控制器。 因此,控制器报告去#0控制器的path具有更高的优先级。
所以从你的问题中可以看出,根本没有其他控制器的path。 而且,如果你没有冗余的控制器和networking,为什么还要多path呢?
IBM SAN通常在他们的文档中有一个定义良好的multipath.conf示例,您是不是从那里开始的? 我将把这一部分作为练习留给读者 。 另外,您的SANpipe理员还需要您多一点支持。 一些快速点
像你所描述的path振荡通常是由于path检查器错过configuration,在你的两个迭代中,你从readsector0到none ,这可能是多径默认的制造和模型,可能tur (testing单元准备好)。
没有定义优先级检查器,没有优先级检查器,没有优先级。
可能需要硬件处理程序,在文档中已经定义好了。
我发现最好的IBM 1815战争故事是这样的 ,总结:
blacklist { devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*" devnode "^hd[az]" 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" } }
让我们知道结果如何。 祝你好运!
首先,你定义了多总线,你确定你的存储支持这个吗? 如果您的存储是真正的主动/主动存储,询问您的SANpipe理员,主动被动存储不允许随时从控制器切换,这会产生存储成本,并会给客户端带来问题。 在第一个configuration中,它没有在configuration中定义,这意味着你采取多path的默认configuration定义(检查/usr/share/doc/mulitpath.conf.anotted)或看看multipathd -k显示configuration的输出有一个更好的看法(无论如何,阿利斯审查与您的存储规格的默认configuration,因为它们并不总是最好的:我有一些问题与HDS et rhel)
第二件事,你说FS上没有完整性问题,你确定你的FS正在使用多path设备吗? 如果我假设你使用LVM,你是否检查lvm.conf中的Filter设置? 如果设置的不好,lvm会直接使用该设备而不是使用MPIO,这可能更多的是主动/被动存储的问题,因为lvm会强制使用控制器,可能不是最好的select。 ..我希望它有助于注意