我正在尝试在后端使用 EMC VMAX3 的同一数据中心的两台服务器之间复制(使用 rsync 复制约 7TB 的数据)
复制约 30-40GB 数据后,多路径启动失败
Dec 15 01:57:53 test.example.com multipathd: 360000970000196801239533037303434: Recovered to normal mode
Dec 15 01:57:53 test.example.com multipathd: 360000970000196801239533037303434: remaining active paths: 1
Dec 15 01:57:53 test.example.com kernel: sd 1:0:2:20: [sdeu] Result: hostbyte=DID_ERROR driverbyte=DRIVER_OK
[root@test log]# multipath -ll |grep -i fail
|- 1:0:0:15 sdq 65:0 failed ready running
- 3:0:0:15 sdai 66:32 failed ready running
我们使用默认的 multipath.conf
HBA driver version 8.07.00.26.06.8-k
HBA model QLogic Corp. ISP8324-based 16Gb Fibre Channel to PCI Express Adapter
OS: CentOS 64-bit/2.6.32-642.6.2.el6.x86_64
Hardware:Intel/HP ProLiant DL380 Gen9
已验证此解决方案,并与 EMC 核实一切正常https://access.redhat.com/solutions/438403
更多信息
- 网络侧无丢包/错包。
- 文件系统使用 noatime、nodiratime 挂载
- 文件系统 ext4(已经尝试过 xfs 但出现同样的错误)
- LVM 处于条带模式(以线性选项启动,然后转换为条带)
已经禁用 THP
回显从不> / sys / kernel / mm / redhat_transparent_hugepage / enabled
- 每当多路径启动失败进程进入 D 状态时
- 系统固件升级
- 尝试使用最新版本的 qlogic 驱动程序
- 尝试使用不同的调度程序(noop、deadline、cfq)
- 尝试使用不同的调整配置文件(企业存储)
发行期间收集的 Vmcore
我可以在问题发生时收集 vmcore
KERNEL: /usr/lib/debug/lib/modules/2.6.32-642.6.2.el6.x86_64/vmlinux
DUMPFILE: vmcore [PARTIAL DUMP]
CPUS: 36
DATE: Fri Dec 16 00:11:26 2016
UPTIME: 01:48:57
LOAD AVERAGE: 0.41, 0.49, 0.60
TASKS: 1238
NODENAME: test.example.com
RELEASE: 2.6.32-642.6.2.el6.x86_64
VERSION: #1 SMP Wed Oct 26 06:52:09 UTC 2016
MACHINE: x86_64 (2297 Mhz)
MEMORY: 511.9 GB
PANIC: "BUG: unable to handle kernel NULL pointer dereference at 0000000000000018"
PID: 15840
COMMAND: "kjournald"
TASK: ffff884023446ab0 [THREAD_INFO: ffff88103def4000]
CPU: 2
STATE: TASK_RUNNING (PANIC)
在 qlogic sid 上启用调试模式后
qla2xxx [0000:0b:00.0]-3822:5: FCP command status: 0x2-0x0 (0x70000) nexus=5:1:0 portid=1f0160 oxid=0x800 cdb=2a200996238000038000 len=0x70000 rsp_info=0x0 resid=0x0 fw_resid=0x0 sp=ffff882189d42580 cp=ffff88276d249480.
qla2xxx [0000:84:00.0]-3822:7: FCP command status: 0x2-0x0 (0x70000) nexus=7:0:3 portid=450000 oxid=0x4de cdb=2a20098a5b0000010000 len=0x20000 rsp_info=0x0 resid=0x0 fw_resid=0x0 sp=ffff882189d421c0 cp=ffff8880237e0880.
答案1
这是一HP ProLiant DL380 Gen9服务器。相当标准的企业级服务器。
您能给我提供有关服务器固件版本的信息吗?
EMC PowerPath 是否真的安装了?如果安装了,点击此处。
您是否安装了 HP Management Agents?如果安装了,您是否可以发布 的输出hplog -v
。
您在 ILO4 日志中看到过什么吗?ILO 可以访问吗?
您能描述一下系统插槽中安装的所有 PCIe 卡吗?
对于 RHEL6 特定的调整,我强烈建议使用 XFS,运行tuned-adm profile enterprise-storage
并确保您的文件系统已挂载nobarrier
(调整后的配置文件应该可以处理这个问题)。
对于卷,请确保您使用的是dm
(多路径)设备而不是/dev/sdX
。请参阅:https://access.redhat.com/solutions/1212233
看看你目前提供的内容和列出的支票Redhat 的支持网站(以及描述在这里),我不能排除 HBA 故障或 PCIe 转接卡问题的可能性。此外,VMAX 方面也有可能出现问题。
您可以更换 PCIe 插槽并重试吗?您可以更换卡并重试吗?
HBA 上的固件是最新的吗?以下是来自2016 年 12 月。
固件 6.07.02 BIOS 3.21
DID_ERROR 通常表示驱动程序软件通过 HBA 返回的数据中的异常检测到某种类型的硬件错误。
存储子系统内存在硬件或基于 SAN 的问题,从而导致收到的光纤通道响应帧包含驱动程序无法使用或协调的无效或冲突的信息。
请检查系统硬件、交换机错误计数器等,看看是否有任何迹象表明问题可能出在哪里。最有可能的是 HBA 本身。
答案2
在我看来,这就像您的一个 SFP 出现软故障...在进行大量复制时,请查看存储交换机中是否存在端口错误。
我最近遇到了类似的问题,一切看起来都很好。服务器供应商认可了他们的产品,存储供应商说他们的东西看起来不错,发誓 SFP 都没问题……SFP 仍然显示为正常运行,直到大量数据通过 MPIO 接口发送,并且存储交换机端口上的大量错误开始被记录下来。
我必须用新的光纤电缆替换所有光纤电缆,然后用我手头的备件切换 SFP,以向供应商证明 SFP 坏了,即使它看上去没什么问题。
答案3
我知道如果你改变在 /etc/sysconfig/mkinitrd/multipath 中 多路径=不在 MULTIPATH=是的以及文件 /etc/multipath.conf- 接下来评论:
黑名单 {devnode"*"}
开启自动加载:
chkconfig multipathd 开启
开启模块下载:
modprobe dm-多路径
modprobe dm-循环
在 autocfg 上:
多路径-v2
重新加载服务器,一切都进行:
lsmod | grep dm_
观察多路径:
多路径-ll
答案4
问题终于解决了
错误:技术预览:DIF/DIX 支持可能未得到完全支持。
问题发生时,我经常在 dmesg 中看到此消息,并一直忽略此消息
经过进一步调试,我发现内核处于污染状态
cat /proc/sys/kernel/tainted **So it's a combination of TAINT_TECH_PREVIEW and TAINT_WARN**
536871424
lsmod |egrep -i "dif|dix"
crc_t10dif 1209 1 sd_mod
modinfo crc_t10dif
filename: /lib/modules/2.6.32-642.6.2.el6.x86_64/kernel/lib/crc-t10dif.ko
softdep: pre: crct10dif
license: GPL
description: T10 DIF CRC calculation
srcversion: 52BC47DEA6DD58B87A2D9C1
depends:
vermagic: 2.6.32-642.6.2.el6.x86_64 SMP mod_unload modversions
根据 RedHat
DIF 是最近添加到 SCSI 标准的新功能。它将常用的 512 字节磁盘块的大小从 512 字节增加到 520 字节。额外的字节构成了数据完整性字段 (DIF)。基本思想是 HBA 将在写入时计算数据块的校验和值,并将其存储在 DIF 中。存储设备将在接收时确认校验和,并存储数据和校验和。在读取时,存储设备和接收 HBA 将检查校验和。
数据完整性扩展 (DIX) 允许此检查向上移动堆栈:应用程序计算校验和并将其传递给 HBA,以附加到 512 字节数据块。这提供了完整的端到端数据完整性检查
一些供应商采用了“保护信息 (PI)”这个名称来指代 DIF/DIX 功能。Linux 上的 DIF/DIX 存在一个难题 - 内存管理系统可能会在数据缓冲区排队等待写入时更改数据缓冲区。如果这样做,则内存管理系统必须记住在 I/O 成功后将该页面标记为脏页。如果内存管理系统在计算校验和之后但在写入完成之前更改缓冲区中的数据,则校验和测试将失败,写入将失败,文件系统将变为只读,或者将发生类似的故障。
因此,Red Hat Enterprise Linux 6 的用户应注意以下事项:DIF/DIX 硬件校验和功能只能用于专门发出 O_DIRECT I/O 的应用程序。这些应用程序可能使用原始块设备,或 O_DIRECT 模式下的 XFS 文件系统。(XFS 是唯一在执行某些分配操作时不会回退到缓冲 IO 的文件系统)。只有专为使用 O_DIRECT I/O 和 DIF/DIX 硬件而设计的应用程序才应启用此功能。
DIF/DIX 是 RHEL 6.0 中的技术预览版。目前只有两种驱动程序/hba 组合支持此功能:Emulex lpfc 和 LSI mpt2sas。只有少数存储供应商支持此功能:Netapp Engenio FC RAID 阵列和某些 Hitachi SAS 磁盘。我们预计未来会有更多存储供应商支持此功能。
由于我们使用的是 EMC,所以我们决定禁用此功能,这样就成功了
cat /etc/modprobe.d/qla2xxx.conf
options qla2xxx ql2xenabledif=0 ql2xenablehba_err_chk=0
Back up existing initramfs: cp /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak
Rebuild initramfs: dracut -f -v
Verify that /etc/modprobe.d/qla2xxx.conf is the same as the one in initramfs (time and size should be the same): lsinitrd | grep qla2xxx.conf; ls -al /etc/modprobe.d/qla2xxx.conf