iSCSI 多路径:multipath 提升存储可用性
通过两条独立链路配置 device-mapper multipath,理解路径策略、别名和故障切换。
单条 iSCSI 链路的可用性,取决于交换机、网线、网卡里最弱的一环。multipath 的价值不是「备份」,而是让存储这块盘的 IO 天然拥有多条路径:一条断了,另一条立刻顶上,应用层毫无感知。
#原理:device-mapper 把多条路径合并成一块盘
服务器上插两块网卡(eth1/eth2),分别连到存储的两个控制器/两块网卡,于是同一块 LUN 在系统里出现两次(sdb、sdc)。device-mapper multipath 把它们合并成一个多路径设备 /dev/mapper/mpatha,应用只看到这一块盘。路径之间是同一份数据,不是副本——冗余的是路径,不是数据。
#配置:让 multipath 接管
sudo dnf install -y device-mapper-multipath
sudo mpathconf --enable
sudo vi /etc/multipath.conf一份可以落地的配置:
defaults {
user_friendly_names yes
path_grouping_policy failover
path_selector "round-robin 0"
path_checker tur
failback immediate
no_path_retry 5
}
multipaths {
multipath {
wwid 36001405a1b2c3d4e5f60718293a4b5c6d
alias mpath_data
}
}path_grouping_policy failover:主备模式,一条路径活跃,另一条待命;数据库等对 IO 延迟敏感的场景常用。要两条路径同时分担流量,改成multipath(多路径组)。path_checker tur:用 Test Unit Ready 探测路径健康,兼容性好。no_path_retry 5:所有路径都断了之后,IO 重试 5 次再报错——给存储恢复留时间,也给应用留出优雅处理的机会。wwid是 LUN 的唯一标识:sudo multipath -l能看到,配置里用 wwid 而不是设备名,因为 sdb/sdc 的名字会漂移。
配置完重新加载:
sudo systemctl enable --now multipathd
sudo multipath -r
sudo multipath -llmultipath -ll 的输出里,active/pending 表示当前活跃路径,failed 表示故障路径。正常情况下应该看到两条路径,一条 active、一条 standby(failover 模式)。
#在 multipath 设备上建文件系统
关键点:一切操作都对着 /dev/mapper/mpath_data,永远不要碰 sdb/sdc。 分区、mkfs、LVM、fstab 全部用多路径设备:
sudo pvcreate /dev/mapper/mpath_data
sudo vgcreate vg_data /dev/mapper/mpath_data
sudo lvcreate -l 100%FREE -n data vg_data
sudo mkfs.xfs /dev/vg_data/datafstab 同样写 UUID。如果误在 sdb 上建了文件系统,multipath 合并后会出现「一个 LUN 两块盘、文件系统两处挂」的混乱,非常危险,务必只用 mapper 设备。
#故障演练:拔一根网线
这是必须做的验证,不做等于没配:
# 1. 记录当前状态
sudo multipath -ll
# 2. 断开其中一块网卡
sudo ip link set eth2 down
# 3. 观察切换
sudo multipath -ll # 应该立即切到另一条路径
dmesg | tail
# 4. 持续 IO 无中断
dd if=/dev/zero of=/data/test bs=1M count=1024 conv=fsync
# 5. 恢复网卡
sudo ip link set eth2 up
sudo multipath -ll # failback immediate 会自动切回真正的生产演练,建议同时观察:应用日志里有没有 IO 报错、数据库有没有告警、multipathd 日志(journalctl -u multipathd)里路径状态变化是否及时。
#常见翻车点
- WWID 写错/没写:alias 不生效,设备名变成系统生成的 mpathX,重启后漂移。一律用
multipath -ll里的 wwid。 - 只配了 multipath 没配会话超时:单条路径断了,multipath 能切,但如果会话本身被判定死亡,两条路径都会 failed。配合上一篇文章讲的
replacement_timeout,才能扛住 Target 侧故障。 - 把 iSCSI 盘直接写进 fstab 再叠 multipath:必须只挂 mapper 设备。
multipath 配好之后,它应该像不存在一样安静——只有当一条链路悄悄断了、而业务毫无察觉的时候,你才知道它值多少钱。
写于 2026 年 3 月 18 日
- 栏目
- 技术文章
- 约
- 3 分钟
- 字数
- 2.1K
- 阅读
- 128
本文为原创记录,转载请注明出处。如果这篇替你省了时间,欢迎留言说说你踩到的坑。
同题 · related
留言 · remarks
00 条还没有留言,来说点什么吧。