需配置multipath多路径软件实现路径聚合与设备名固化:一、安装启用服务;二、黑名单过滤系统盘;三、WWID绑定持久化别名;四、iSCSI双路径专用配置;五、动态刷新与故障验证。

如果您在Linux主机上挂载SAN存储时发现同一LUN通过多条光纤路径识别为多个/dev/sd*设备,且重启后设备名频繁变动、无法稳定挂载或ASM无法识别持久化磁盘,则需配置multipath多路径软件实现路径聚合与设备名固化。以下是多种可独立实施的配置方法:
一、基础安装与服务启用
该方法适用于最小化安装系统,确保multipath核心组件就位并启动守护进程。multipathd服务是路径监控与故障切换的核心运行实体,必须处于活动状态才能响应路径变化。
1、检查是否已安装device-mapper-multipath包:rpm -qa | grep device-mapper-multipath
2、若无输出,执行安装命令:yum -y install device-mapper-multipath
3、初始化multipath配置文件(生成默认模板):mpathconf --enable --with_multipathd y
4、启动并设为开机自启:systemctl start multipathd && systemctl enable multipathd
二、黑名单精准过滤与系统盘保护
默认配置将所有块设备纳入黑名单,必须显式排除本地磁盘(如sda),否则multipath会错误聚合系统盘导致启动失败或数据错乱。通过devnode和wwid双重过滤可提升安全性。
1、编辑配置文件:vi /etc/multipath.conf
2、在blacklist段内添加以下内容(保留原有注释结构):devnode "^sda"\ndevnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"\ndevnode "^hd[a-z]"\nwwid "36005076b08164f4011ae88b23efb95fe"
3、确认defaults段启用友好名称:defaults { user_friendly_names yes }
4、重载配置并验证黑名单生效:multipath -t | grep -A 10 "blacklist"
三、基于WWID的持久化别名绑定
为关键LUN分配固定别名(如mpath_oradata),可彻底解决设备名漂移问题,使Oracle ASM、LVM等依赖稳定设备路径的组件免于配置失效。该方式通过/var/lib/multipath/bindings文件实现WWID到别名的硬映射。
1、获取目标LUN的WWID:scsi_id -g -u -s /block/sdb(替换sdb为实际路径)
2、手动编辑绑定文件:vi /var/lib/multipath/bindings
3、追加一行格式为:mpath_oradata 3600508b4000c3af700008000002d0000(左侧为自定义别名,右侧为上步获取的WWID)
4、刷新multipath并强制重建映射:multipath -F && multipath -v2
四、iSCSI双路径模拟环境专用配置
在无真实FC-SAN环境下,可通过iSCSI Target绑定双IP模拟双路径。此时需关闭iSCSI客户端的路径自动发现机制,强制multipath接管所有路径,避免iscsid与multipathd冲突。
1、停用iSCSI服务防止干扰:systemctl stop iscsid && systemctl disable iscsid
2、修改multipath.conf,在defaults段添加:find_multipaths yes\npath_grouping_policy multibus
3、在devices段为iSCSI设备指定策略:devices {\n device {\n vendor "IET"\n product "VIRTUAL-DISK"\n path_grouping_policy "multibus"\n features "1 queue_if_no_path"\n no_path_retry 15\n }\n}
4、重新扫描并列出拓扑:iscsiadm -m discovery -t st -p 192.168.1.100\nmultipath -v2 && multipath -ll
五、动态路径刷新与故障注入验证
生产环境中需验证multipath对单路径中断的实时响应能力。通过主动删除路径并观察设备状态变化,可确认failover机制是否正常工作,避免配置存在隐性缺陷。
1、查看当前活跃路径:multipath -ll | grep -A 5 "active"
2、模拟某条路径断开(以sdb为例):echo 1 > /sys/block/sdb/device/delete
3、等待5秒后检查路径状态:multipath -ll | grep -E "(status|failed|ready)"
4、恢复路径并验证reinstate:echo "- - -" > /sys/class/scsi_host/host*/scan\nmultipath -r

















