0

0

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

冷漠man

冷漠man

发布时间:2026-01-18 19:42:32

|

144人浏览过

|

来源于php中文网

原创

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。

MakeSong
MakeSong

AI音乐生成,生成高质量音乐,仅需30秒的时间

下载
  • 验证 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 内无遗漏端口

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

840

2023.08.22

counta和count的区别
counta和count的区别

Count函数用于计算指定范围内数字的个数,而CountA函数用于计算指定范围内非空单元格的个数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

203

2023.11.20

length函数用法
length函数用法

length函数用于返回指定字符串的字符数或字节数。可以用于计算字符串的长度,以便在查询和处理字符串数据时进行操作和判断。 需要注意的是length函数计算的是字符串的字符数,而不是字节数。对于多字节字符集,一个字符可能由多个字节组成。因此,length函数在计算字符串长度时会将多字节字符作为一个字符来计算。更多关于length函数的用法,大家可以阅读本专题下面的文章。

953

2023.09.19

css3transition
css3transition

css3transition属性用于指定如何从一个CSS样式过渡到另一个CSS样式,本专题为大家提供transition相关的文章、相关下载和相关课程,大家可以免费体验。

261

2023.06.27

vb中怎么连接access数据库
vb中怎么连接access数据库

vb中连接access数据库的步骤包括引用必要的命名空间、创建连接字符串、创建连接对象、打开连接、执行SQL语句和关闭连接。本专题为大家提供连接access数据库相关的文章、下载、课程内容,供大家免费下载体验。

329

2023.10.09

vb连接access数据库的方法
vb连接access数据库的方法

vb连接access数据库方法:1、使用ADO连接,首先导入System.Data.OleDb模块,然后定义一个连接字符串,接着创建一个OleDbConnection对象并使用Open() 方法打开连接;2、使用DAO连接,首先导入 Microsoft.Jet.OLEDB模块,然后定义一个连接字符串,接着创建一个JetConnection对象并使用Open()方法打开连接即可。

463

2023.10.16

asp连接access数据库的方法
asp连接access数据库的方法

连接的方法:1、使用ADO连接数据库;2、使用DSN连接数据库;3、使用连接字符串连接数据库。想了解更详细的asp连接access数据库的方法,可以阅读本专题下面的文章。

123

2023.10.18

access和trunk端口的区别
access和trunk端口的区别

access和trunk端口的区别是Access端口用于连接终端设备,提供单个VLAN的接入,而Trunk端口用于连接交换机之间,提供多个VLAN的传输;Access端口只传输属于指定VLAN的数据,而Trunk端口可以传输多个VLAN的数据,并使用VLAN标签进行区分。想了解更多access和trunk端口相关内容,可以阅读本专题下面的文章。

336

2023.10.31

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

4

2026.03.05

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Java 教程
Java 教程

共578课时 | 77.6万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号