multipath -ll 显示 active 但实际 IO 走单路径的常见配置错误

11次阅读

multipath -ll 显示路径 active 不代表真正负载均衡或冗余生效,常见因 pgpolicy 为 failover、ALUA 未启用、udev/内核参数干扰或存储侧 zoning/LUN masking 不完整导致实际 I/O 仍走单路径。

multipath -ll 显示 active 但实际 IO 走单路径的常见配置错误

运行 multipath -ll 显示路径状态为 active,不代表 I/O 真正负载均衡或冗余生效——常见问题出在底层配置未对齐,导致内核仍走单一路径。

路径组策略(pgpolicy)与选择器(selector)不匹配

即使所有路径都显示 active,若 pgpolicy 配置为 failover(默认值),系统只会启用一个优先路径,其余仅作备用。此时 multipath -ll 仍显示所有路径为 active,但实际 I/O 全部走第一组中的第一个路径。

  • 检查方式:multipath -t | grep -A5 "policy" 或查看 /etc/multipath.confdefaultsdevices 段的 path_grouping_policy
  • 建议:如需负载分担,显式设为 multibusgroup_by_prio,并确保配套使用 service-timequeue-Length selector
  • 注意:group_by_prio 需配合存储端 ALUA 的优先级标记(如 0x80 表示 active/optimized),否则可能退化为 failover

ALUA 状态未正确识别或未启用

多数企业存储(如 Dell EMC, Netapp, HPE 3PAR)依赖 ALUA(Asymmetric Logical Unit access)通告路径服务状态。若 multipathd 无法读取或解析 ALUA 信息,会将所有路径视为同级,但实际底层驱动或固件可能只响应某条路径的 I/O。

  • 验证 ALUA 是否生效:sg_rtpg -d /dev/sdX(需安装 sg3_utils),观察返回中是否含 implicit transitionexplicit transition 及各 target port 的 state(如 Active/optimized
  • 常见错误:未在 /etc/multipath.conf 中启用 hardware_handler "1 alua",或设备未列入已知 ALUA 支持列表(vendor/product 匹配失败)
  • 补救:添加对应 device 段,明确指定 hardware_handler "1 alua"path_selector "service-time 0"

udev 规则或内核参数干扰路径发现

某些 udev 规则(如强制设置 scsi_id 格式)或内核启动参数(如 rd.multipath=0scsi_mod.use_blk_mq=0)可能导致 multipathd 启动时路径初始化异常,表现为“假 active”——路径可见但未真正加入 mpath 设备的请求队列。

  • 排查:执行 systemctl status multipathd 查看是否有 warning(如 “path already in use”、“failed to get path priority”)
  • 检查 /run/multipathd/bindings 是否存在对应 WWID 条目;对比 lsblk 中 mpathN 下挂载的 sdX 设备数是否与 multipath -ll 列出路径数一致
  • 关键点:确认 /sys/block/mpathN/device/holders/ 下是否存在多个 sdX 目录——若只有一个,说明仅一条路径被真正绑定到该 mpath 设备

存储侧 zoning 或 LUN masking 配置不完整

主机侧 multipath 看似正常,但存储交换机 zone 或存储控制器 LUN mask 仅对部分 HBA 口放行了读写权限(例如只允许 Active Path 对应的 WWPN 有 write 权限),其余路径虽能登录(login)、查询 INQUIRY,却在 SCSI WRITE 命令阶段被拒绝(返回 CHECK CONDITION + ASC 0x2A),导致上层重试后始终 fallback 到单路径。

  • 证据:用 dd if=/dev/zero of=/dev/mapper/mpathN bs=4k count=100 oflag=direct 测试时,iostat -xm 1 显示仅一个 sdX 有持续 r/w,其余路径无 IO
  • 定位方法:开启 multipathd debug 日志(echo 2 > /sys/kernel/debug/multipathd/log_level),观察路径切换日志是否频繁出现 path failedchecker failed
  • 协同排查:联系存储管理员确认所有 HBA WWPN 均被正确映射至同一 LUN,且 zone 内无遗漏端口
text=ZqhQzanResources