技术文章2026 年 3 月 18 日约 3 分钟

iSCSI 多路径:multipath 提升存储可用性

通过两条独立链路配置 device-mapper multipath,理解路径策略、别名和故障切换。

单条 iSCSI 链路的可用性,取决于交换机、网线、网卡里最弱的一环。multipath 的价值不是「备份」,而是让存储这块盘的 IO 天然拥有多条路径:一条断了,另一条立刻顶上,应用层毫无感知。

#原理:device-mapper 把多条路径合并成一块盘

服务器上插两块网卡(eth1/eth2),分别连到存储的两个控制器/两块网卡,于是同一块 LUN 在系统里出现两次(sdb、sdc)。device-mapper multipath 把它们合并成一个多路径设备 /dev/mapper/mpatha,应用只看到这一块盘。路径之间是同一份数据,不是副本——冗余的是路径,不是数据。

#配置:让 multipath 接管

bash
sudo dnf install -y device-mapper-multipath
sudo mpathconf --enable
sudo vi /etc/multipath.conf

一份可以落地的配置:

text
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 的名字会漂移。

配置完重新加载:

bash
sudo systemctl enable --now multipathd
sudo multipath -r
sudo multipath -ll

multipath -ll 的输出里,active/pending 表示当前活跃路径,failed 表示故障路径。正常情况下应该看到两条路径,一条 active、一条 standby(failover 模式)。

#在 multipath 设备上建文件系统

关键点:一切操作都对着 /dev/mapper/mpath_data,永远不要碰 sdb/sdc。 分区、mkfs、LVM、fstab 全部用多路径设备:

bash
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/data

fstab 同样写 UUID。如果误在 sdb 上建了文件系统,multipath 合并后会出现「一个 LUN 两块盘、文件系统两处挂」的混乱,非常危险,务必只用 mapper 设备。

#故障演练:拔一根网线

这是必须做的验证,不做等于没配:

bash
# 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 条

还没有留言,来说点什么吧。

iSCSI 多路径:multipath 提升存储可用性 · LXH·BLOG