要让Linux多路径存储故障切换更快更稳,关键在于正确配置ALUA策略、收紧超时参数(fast_io_fail_tmo 5、dev_loss_tmo infinity、no_path_retry queue)、启用failback immediate回切,并通过iostat+fio实测验证切换耗时。

要让Linux多路径存储在故障时切换得更快、更稳,关键不是堆参数,而是让系统“听懂”存储的真实状态,并减少不必要的等待和误判。
用对ALUA策略,让路径状态识别更准
NetApp、HP 3PAR等主流存储都支持ALUA(Asymmetric Logical Unit Access),它会主动告诉主机每条路径是Active/Optimized、Active/Non-Optimized还是Standby。如果multipath没配对策略,就可能把非优化路径当主力用,或者等太久才切。
- 配置prio "ontap"(NetApp)或prio "alua"(通用),确保multipath能读取存储上报的优先级
- 确认detect_prio yes已启用,否则ALUA信息会被忽略
- 运行multipath -ll检查路径状态是否显示为active/optimized或active/non-optimized,而不是全标成unknown
调紧超时参数,避免I/O卡在“犹豫期”
默认的路径检测和失败响应时间偏保守,适合容错但拖慢切换。生产环境建议收紧以下三项:
- fast_io_fail_tmo 5:路径确认不可达后5秒内返回I/O错误,防止应用长时间挂起
- dev_loss_tmo "infinity":配合fast_io_fail_tmo使用,避免光纤瞬断被误判为设备丢失
- no_path_retry queue:路径全断时不立即报错,而是排队等待恢复——这对短暂抖动更友好,比设成fail更稳妥
启用立即回切,主路径恢复不“躺平”
很多配置默认failback manual,主路径修好了也不会自动切回来,导致长期跑在次优路径上。性能和稳定性都会打折扣。
- 设为failback immediate,主路径(如Active/Optimized)一恢复,I/O立刻回归最优路径
- 注意:需确保存储侧ALUA状态同步及时,否则可能因状态延迟造成误切
验证切换真实耗时,别只看日志
配置完不能只信multipath -ll输出,得实测。推荐方法:
- 用iostat -x 1持续监控目标LUN的%util和await,人工拔插HBA或禁用交换机端口,观察I/O中断时长
- 记录从path down到reinstated再到I/O恢复稳定的全过程,重点看await是否在5秒内回落
- 避免在高负载下测试——压力大会掩盖真实切换延迟,建议用轻量fio随机读写压测


















