Linux multipathd 的 SAN 存储多路径配置与 failover 测试模板

1次阅读

需先确认 multipathd 服务运行、路径 active、设备被识别为 multipath;/etc/multipath.conf 必须显式配置 path_grouping_policy、failback、no_path_retry 及 devices 厂商匹配;验证需 dd+iostat 实时监控并 down hba 端口,同时确保存储启用 alua、hba 驱动达标、挂载使用 /dev/mapper/ 设备。

Linux multipathd 的 SAN 存储多路径配置与 failover 测试模板

怎么确认 multipathd 服务和路径状态是否正常

不看 multipath -ll 输出就动手配 failover,八成会踩坑。它只显示当前路径拓扑,不反映实际 IO 路径健康度。

真正要查的是三件事:服务是否运行、路径是否 active、底层设备是否被识别为 multipath 设备。

  • systemctl status multipathd 必须是 active (running);如果卡在 activating,大概率是 /etc/multipath.conf 语法错误或设备未就绪
  • multipath -ll 中每条路径应有 active ready running 状态,出现 failedghost 表示链路不通或 WWN 不匹配
  • lsblklsscsi 确认后端 LUN 没被直接暴露为 sdb/sdc 等单路径设备——否则 multipath 会绕过它们,导致后续测试失效

为什么 /etc/multipath.conf 的 defaults 和 devices 段必须显式配置

默认配置对大多数 SAN(尤其是 Dell EMC PowerStore、HPE Alletra)不友好。不改就用系统默认值,failover 可能永远不触发。

关键参数不是“可选”,而是决定路径切换时机的核心开关:

  • path_grouping_policy multibusfailover:前者允许多路径并发 IO(需存储支持 ALUA),后者强制主备模式,更易测出切换行为
  • failback immediate:避免路径恢复后延迟回切,干扰 failover 观察;若设为 failback 30,你手动拔线后等 30 秒才切,容易误判失败
  • no_path_retry queue:IO 阻塞时持续重试而非立即报错,否则 dd 测试会秒退,看不出路径是否自动转移

漏掉 devices 块匹配厂商型号(如 vendor "DellEMC"),multipathd 就不会加载对应硬件策略,ALUA 状态解析可能出错。

如何用 dd + iostat 实时验证 failover 是否生效

光看 multipath -ll 状态变化没用,得让 IO 真正在跑,再断路径,看业务是否中断。

推荐组合:后台 dd 写入 + iostat 监控 + 手动 down HBA 端口(非拔光纤),这样可控且可复现:

  • 起一个持续写入:dd if=/dev/zero of=/mnt/san/testfile bs=1M count=10000 oflag=direct,nonblock & —— oflag=direct 绕过 page cache,nonblock 避免因路径抖动阻塞进程
  • 另开窗口跑:iostat -x 1 /dev/mapper/mpatha,盯住 %utilawait:切换瞬间 await 会飙升(>1000ms),但不应出现 input/output Error
  • 触发 failover:echo offline > /sys/class/fc_host/hostX/device/port_state(X 是对应 HBA 编号),比拔线更干净,也方便恢复

注意:如果 dd 进程退出或报错,说明 failover 失败或超时;如果 iostat 显示某条路径 svctm 归零但另一条接上,才是成功。

常见 failover 失败的三个硬伤点

很多问题不是配置不对,而是底层条件没满足,查三天才发现是存储侧没开 ALUA 或主机未注册。

  • 存储未启用 ALUA(Asymmetric Logical Unit Assignment):multipath -ll 中看不到 alua 字样,或全是 active/optimizedstandby 混乱,此时 multipathd 无法判断优先路径,failover 逻辑瘫痪
  • HBA 驱动版本太老:比如 Emulex LPe32000 需要驱动 ≥ 12.8.276.25,旧版不支持 SCSI REPORT TARGET PORT GROUPS 命令,ALUA 信息拿不到
  • 多路径设备被 mount 时用了底层路径(如 /dev/sdb):即使 multipath 正常,IO 也不走多路径,自然测不出切换效果;检查 mount | grep san,确保挂载点指向 /dev/mapper/mpatha 类设备

这些点不解决,调再多 multipath.conf 参数都没意义——路径切换不是软件单方面能决定的事。

text=ZqhQzanResources