Linux怎么优化多路径的path_grouping_policy故障切换策略

星萱小哥_8710

星萱小哥_8710

2026-10-15

559人浏览

原创

根本原因是alua状态未被正确识别或multipathd未读取到,导致路径全标为failed/ghost而fallback至multibus;需确认ontap端lun启用alua、配置中启用hardware_handler "1 alua"和path_checker tur,并用multipath -v3 -d验证alua state。

linux怎么优化多路径的path_grouping_policy故障切换策略

path_grouping_policy 设为 failover 时,为什么故障切换不生效

根本原因不是策略本身错,而是存储端 ALUA 状态没被正确识别或 multipathd 没读到。比如 NetApp ONTAP 启用了 ALUA,但 path_grouping_policy failover 要求所有路径必须明确区分 “Active/Optimized” 和 “Standby”,如果 path_checker tur 返回超时或拒绝(常见于某些 LUN 未启用 ALUA),multipathd 就会把所有路径都标为 failed 或 ghost,导致 fallback 到默认的 multibus 行为,看起来像“切换失效”。

实操建议:

Zynq Linux Hardware Debug
Zynq Linux Hardware Debug

Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。

下载
  • 先用 multipath -v3 -d 查看 debug 输出里每条路径的 ALUA state 是否识别为 active/optimized、active/non-optimized 或 standby
  • 确认 /etc/multipath.conf 中对应 vendor section 启用了 ALUA 支持:hardware_handler "1 alua" 和 path_checker tur(不能用 readsector0)
  • 对 NetApp 存储,必须确保 ONTAP 端 LUN 已启用 ALUA:lun show -vserver <vs> -fields alua</vs> 返回 enabled
  • 避免在 defaults 块中全局设 path_grouping_policy failover,应只在 devices 块中针对具体厂商(如 vendor "NETAPP")设置

multibus 和 group_by_prio 混用时 I/O 卡顿的真相

multibus 看似“全路径都可用”,但实际会把所有路径归入同一 priority group;而 group_by_prio 依赖 prio 插件返回的数值做分组——如果插件没配或返回全 0,所有路径仍挤在一个组里,I/O 还是轮询发到所有路径,包括那些非优化路径。结果就是:本该走 Active/Optimized 的请求,被发到了 Standby 路径上,ONTAP 强制重定向,引入额外延迟甚至超时。

实操建议:

  • NetApp 环境下优先用 path_grouping_policy group_by_prio + prio alua,而非 multibus
  • 确认 prio alua 插件已加载:ls /usr/libexec/multipath/prio_alua 存在且可执行
  • 检查 multipath -ll 输出中各路径的 prio 值是否分层(如 Active/Optimized 显示 50,Active/Non-Optimized 显示 10,Standby 显示 0)
  • 若 prio 全为 0,说明 alua 插件未生效,回退检查 hardware_handler "1 alua" 和存储端 ALUA 配置

failback immediate 导致路径震荡的典型场景

当设了 failback immediate,只要某条原故障路径恢复(哪怕只是短暂闪断后重连),multipathd 就立刻把它加回 active 组并重新分配 I/O。但如果该路径物理不稳定(例如光纤模块老化、交换机端口 CRC 错误高),就会反复“上线→收 I/O→出错→下线→再上线”,造成 I/O 延迟毛刺甚至应用报 Input/output error。

实操建议:

  • 生产环境一律禁用 failback immediate,改用 failback manual 或 failback 60(单位秒)
  • 配合 rr_min_io_rq 1(而非默认的 rr_min_io 1000)降低单次轮询粒度,让负载更平滑
  • 用 watch -n1 'multipath -ll | grep -E "(status|prio)"' 实时观察路径状态变化节奏,确认无高频抖动
  • 对关键业务路径,可在 devices 块中单独设 no_path_retry queue 防止路径全断时直接报错

为什么 reload multipathd.service 后配置没生效

systemctl reload multipathd.service 只重载配置文件,但不会刷新已存在的多路径设备树。旧设备仍按启动时的策略运行,新策略只对后续发现的路径生效——这在存储扩容或路径增删后特别容易踩坑。

实操建议:

  • 修改 /etc/multipath.conf 后,必须执行:multipath -F && multipath -v2 清空并重建设备树
  • 确认 multipath -ll 输出中设备名(如 mpatha)后的括号里显示的是最新策略,例如 [active][ready] 而非 [undef][ready]
  • 若设备已被 LVM 或文件系统使用,multipath -F 会失败,需先 dmsetup remove_all(谨慎!确保无活跃 I/O)
  • 不要依赖 systemctl restart multipathd,它会中断正在运行的路径监控线程,可能引发瞬时 I/O hang
真正起作用的从来不是 policy 字面意思,而是 multipathd 解析 ALUA 状态 + prio 插件输出 + 内核 dm-mpath 驱动三者协同的结果。任何一个环节断开,策略就只剩空壳。

相关专题

更多
磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

4010

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3433

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2593

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

6330

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

5962

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

3473

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

2965

4

linux查看cpu使用率
linux查看cpu使用率

在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。本专题为大家带来了linux查看cpu使用率的相关文章,感兴趣的朋友千万不要错过了。

2023.07.25

3199

6

linux查找文件命令
linux查找文件命令

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.31

297

3

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习