不均衡的表现与来源
路径不均衡的典型表现是:同一 LUN 的多条路径里只有一条在跑满、吞吐上不去、某条 ISL 或某个前端端口先到瓶颈。根因分布在不同层:多路径策略是轮询还是按队列长度、ALUA 优先级是否只选了优化路径、各路径端口速率与队列深度是否一致、fabric 内 ISL 是否对称、以及应用自身并发度是否太低(单队列下轮询无从谈起)。因此定位顺序应从应用往下走,而不是先怀疑存储。
基本信息
| 排查层次 | 应用 → 主机多路径 → HBA → fabric → 阵列前端端口 → 后端 |
|---|---|
| 常用工具 | iostat -x、sar、multipathd show paths、交换机 portperfshow 与 porterrshow |
| 判断基准 | 各路径 IOPS/带宽偏差是否超出预期;单路径是否先于其他路径饱和 |
| 常见参数 | path_selector、rr_min_io_rq、queue_depth、ALUA prio |
| 权限要求 | 主机 root/管理员、交换机与阵列只读账号 |
典型使用场景
- 应用反馈延迟高但存储侧指标正常,需要确认流量是否集中在单条路径
- 扩容后前端端口带宽增加,实际吞吐却没有提升
- 交换机某条 ISL 利用率异常高,需要追溯是哪台主机造成
- 双控制器阵列上只有一个控制器的前端端口繁忙
- 调整多路径策略或队列深度前后的效果对比
逐层取证
逐层取证
# 1) 主机侧:逐设备利用率与队列深度,找出忙碌的 sd 设备
iostat -x 5 3
# 2) 多路径侧:路径所属 HBA 通道、状态与优先级
multipathd show paths raw format '%d %w %t %s %p'
# 3) HBA 侧:确认端口速率与队列深度是否一致
cat /sys/class/fc_host/host*/port_name /sys/class/fc_host/host*/speed
# 4) fabric 侧:查看端口与 ISL 的实时吞吐
portperfshow 2
# 5) 阵列侧:核对前端端口利用率与映射关系
# 以阵列管理界面或 CLI 的前端端口性能视图为准逐层判读要点
| 层次 | 观察对象 | 不均衡信号 |
|---|---|---|
| 应用 | 并发线程数、iodepth | 单队列应用使轮询策略无法分散流量 |
| 主机 | 各 sdX 的 %util、aqu-sz | 只有一条路径忙,其余接近空闲 |
| HBA | 端口速率、队列深度 | 两路速率不同或队列深度配置不一致 |
| fabric | 端口与 ISL 利用率、BB credit zero | 单条 ISL 或单端口先饱和,出现信用耗尽 |
| 阵列 | 前端端口负载、ALUA 状态 | 流量集中在一个控制器端口组 |
完全不均衡不一定是故障:ALUA 阵列有意把流量导到优化路径,此时非优化路径空闲属于正常状态,判断标准应改为「优化路径是否被充分使用」而不是「每条路径是否都一样忙」。
调整策略(如从 failover 切换到 round-robin 或 queue-length)属于影响面较大的变更,建议先在单台主机验证,并记录改动前后的路径占用与延迟数据。