Linux multipath路径切换异常主因是配置不匹配:priority未对齐ALUA权重、pgpolicy与failback策略冲突、path_checker误判、ALUA状态同步延迟、WWID绑定冲突;需启用alua插件、设group_by_prio+failback 30、用tur检测、清bindings并校验WWID。

Linux 下 multipath 多路径设备路径频繁切换或 active 路径不对称,通常不是硬件故障,而是配置不匹配或策略未对齐导致的。核心问题往往出在 路径优先级(priority)、路径组策略(pgpolicy)、failover 模式、以及底层存储侧的 ALUA 状态识别 上。
priority 设置未对齐存储真实路径权重
multipath 默认使用 const 优先级,所有路径权重相同,无法反映存储侧主备路径差异。若存储阵列(如 Dell EMC、HPE 3PAR、NetApp)已通过 ALUA 标明了 optimized/non-optimized 路径,但 multipath 未启用对应 priority 插件(如 alua 或 emc),就会导致路径权重恒定,负载无法自动倾向最优路径,甚至因探测抖动触发误切换。
- 确认存储是否支持 ALUA:
sg_inq -p 0x83 /dev/sdX查看 device identifier,再用sg_rtpg /dev/sdX观察 TPID 和状态 - 在
/etc/multipath.conf中为对应 vendor/product 启用插件:
defaults {
user_friendly_names yes
find_multipaths yes
}
devices {
device {
vendor "DGC"
product ".*"
path_grouping_policy multibus
getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
features "2 pg_init_retries 50"
hardware_handler "1 alua"
path_checker tur
priority alua
failback immediate
rr_weight priorities
}
} - 重启服务并重载配置:
systemctl restart multipathd && multipath -r
pgpolicy 与 failback 不匹配引发路径震荡
使用 multibus 策略但 failback 设为 manual,会导致某条路径恢复后不会自动切回 preferred group;而设为 immediate 又可能在链路瞬断时反复切换 active group,尤其当底层 HBA 或交换机启用了快速链路检测(如 FCoE FIP keepalive 或 FC E_D_TOV 超时过短)时更明显。
- 生产环境推荐组合:
–path_grouping_policy group_by_prio(按 priority 自动分组)
–failback 30(30 秒延迟回切,避免瞬断干扰)
–rr_min_io_rq 1(避免 IO 聚集在单路径) - 禁用无意义的 path_checker:例如对 ALUA 存储使用
tur是合适的,但若用readsector0,在 LUN mask 变更或 ACL 切换时易返回 false negative,触发误 down 路径
底层路径状态未同步(ALUA state stale)
multipathd 默认每 30 秒轮询一次 ALUA 状态,但某些存储固件在 LUN 所属控制器切换后,ALUA target port group state 更新延迟或未广播,导致 multipath 仍认为原路径是 optimized,继续发 IO,直到 timeout 后才 failover —— 此过程表现为“active 路径长期不对称”且无日志报错。
- 手动刷新 ALUA 状态:
multipathd -k"switch group"或multipathd -k"reconfigure" - 缩短探测间隔(谨慎):
defaults { polling_interval 10 },但不宜低于 5 秒,否则增加 SCSI 总线压力 - 检查存储端是否开启 ALUA implicit transition:部分阵列需显式启用该模式,否则只响应 explicit 命令,multipath 的
alua插件无法感知动态变化
udev 规则或 WWID 冲突干扰路径识别
当主机曾连接过同型号但不同 LUN 的存储,或更换 HBA 卡后未清理旧路径,/var/lib/multipath/bindings 中残留的 WWID 映射可能导致新设备被错误分配别名(如 mpatha → mpathz),进而使 dm-multipath 表项与实际路径拓扑脱节,表现为 “active 路径数正确但 I/O 全走某两个物理路径”。
- 清空绑定缓存:
rm /var/lib/multipath/bindings && systemctl restart multipathd - 验证 WWID 唯一性:
scsi_id --whitelisted --device=/dev/sdX对每条路径执行,确保同一 LUN 下所有路径返回相同 WWID - 禁用自动生成别名(可选):
user_friendly_names no,直接用 WWID 命名(如mpath-3600a09803830455a0000000000000000),排除命名混淆

