在Ubuntu服务器上配置multipath多路径存储,核心就是通过安装multipath-tools软件包,让系统自动识别多条物理路径并将其聚合为一个逻辑设备,从而实现存储的高可用和负载均衡。简单来说,当你的服务器通过多块HBA卡或者双口网卡连接到SAN存储或共享磁盘阵列时,操作系统默认会看到多个独立的磁盘设备(如/dev/sda、/dev/sdb),而multipath的作用就是把这些设备合并成一个统一的/dev/mapper/mpathX设备,任何一条路径断了,IO会自动切换到其他路径,业务不中断。

下面我从环境准备、安装配置、路径检测、策略调优到故障排查,把整个流程完整讲透。

一、为什么需要multipath多路径

企业级存储环境中,服务器通常通过光纤通道(FC)或iSCSI连接到存储阵列。为了避免单点故障,一般会配置两条甚至多条物理链路。如果不做multipath,每条链路在系统里都是一块独立磁盘,你只能手动选择用哪一块,一旦某条链路断了,对应的磁盘就不可用,数据读写直接失败。

multipath的价值在于三点:第一,故障自动切换,路径失效时IO无缝转移;第二,带宽聚合,多条路径可以并行传输数据提升吞吐量;第三,统一管理,上层应用只需要看到一个设备名,不用关心底层物理拓扑。

二、环境准备和软件安装

在Ubuntu 18.04、20.04、22.04等主流版本上,multipath的配置流程基本一致。首先确认你的存储已经正确连接,系统能识别到多块磁盘。用以下命令查看:

lsblk
fdisk -l

如果你看到类似sda、sdb、sdc等多块大小相同的磁盘,说明多路径硬件层面已经就绪。接下来安装multipath-tools:

sudo apt update
sudo apt install multipath-tools -y

安装完成后,默认情况下multipath服务是禁用的,需要手动启动并设置开机自启:

sudo systemctl enable multipathd
sudo systemctl start multipathd

启动后用以下命令查看当前multipath设备状态:

sudo multipath -ll

如果输出为空,说明系统还没有检测到多路径设备,需要继续往下排查。

三、配置multipath核心文件

Ubuntu的multipath有两个关键配置文件。第一个是/etc/multipath.conf,这是主配置文件,控制multipath的行为策略;第二个是/etc/multipath/bindings,定义设备名和WWID的映射关系。

对于大多数场景,你不需要修改/etc/multipath.conf,默认配置就够用。但有几个参数值得关注。打开配置文件:

sudo vi /etc/multipath.conf

重点看以下几个配置段:

defaults段:这里定义全局默认行为。user_friendly_names设为yes时,设备名会用mpatha、mpathb这种易读格式,而不是一长串WWID。polling_interval控制路径检测间隔,默认5秒,生产环境建议设为10-15秒减少开销。

defaults {
    user_friendly_names yes
    polling_interval 10
    path_grouping_policy multibus
    path_selector "round-robin 0"
    failback immediate
}

blacklist段:排除不需要做多路径的本地磁盘。通常把sda、sdb这种系统盘加进去,避免误处理:

blacklist {
    devnode "^sda"
    devnode "^sdb"
    devnode "^sr"
}

devices段:针对特定存储阵列做定制配置。如果你用的是EMC、NetApp、华为等品牌存储,可以根据vendor和product字段加特定策略。例如:

devices {
    device {
        vendor "DELL"
        product "MD*"
        path_grouping_policy multibus
        path_checker tur
        prio "const"
    }
}

修改完配置后必须重启multipathd服务才能生效:

sudo systemctl restart multipathd

四、路径检测和设备发现

配置好之后,系统需要重新扫描才能发现多路径设备。执行以下命令:

sudo multipath -r
sudo multipath -ll

正常情况下你会看到类似这样的输出:

mpatha (3600507680280e5a00000000000000001) dm-2 DELL,MD36xx
size=500G features='1 queue_if_no_path' hwhandler='1 alua' wp=rw
|-+- policy='round-robin 0' prio=1 status=active
| |- 0:0:0:0 sda 8:0 active ready running
| `- 1:0:0:0 sdb 8:16 active ready running
`-+- policy='round-robin 0' prio=1 status=enabled
  |- 2:0:0:0 sdc 8:32 active ready running
  `- 3:0:0:0 sdd 8:48 active ready running

这个输出说明mpatha设备由四条物理路径组成(sda、sdb、sdc、sdd),当前两条active两条enabled,策略是round-robin负载均衡。如果某条路径状态变成failed或ghost,说明该路径有问题。

如果扫描后仍然没有设备,用以下命令排查:

sudo multipath -v3
dmesg | grep -i multipath

常见原因包括:存储端没有正确配置LUN映射、HBA驱动未加载、或者WWID被blacklist误拦截。

五、路径选择策略详解

multipath支持多种路径选择策略,不同策略适用于不同场景,选错了会影响性能甚至可用性。

round-robin(轮询):IO在所有active路径间轮流发送,适合带宽聚合场景,是最常用的策略。但要注意,某些存储对round-robin支持不好,可能导致数据错乱。

queue-length(队列长度):IO发给队列最短的路径,适合路径性能差异大的环境。

service-time(服务时间):优先选择响应最快的路径,适合延迟敏感型业务。

修改策略可以在/etc/multipath.conf的defaults段中设置path_selector参数,也可以针对单个设备在devices段单独指定。建议生产环境先在测试机验证再上线。

六、创建文件系统和挂载使用

multipath设备创建好之后,就像普通块设备一样使用。创建文件系统:

sudo mkfs.ext4 /dev/mapper/mpatha
sudo mkdir /mnt/data
sudo mount /dev/mapper/mpatha /mnt/data

如果需要开机自动挂载,编辑/etc/fstab,用设备名或UUID挂载:

sudo blkid /dev/mapper/mpatha

拿到UUID后写入fstab:

UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /mnt/data ext4 defaults 0 2

注意:一定要用/dev/mapper/mpathX或者UUID,不要用/dev/sdX,因为sdX的编号在重启后可能变化,而multipath设备名是稳定的。

七、日常运维和故障排查

日常运维中,定期检查路径状态是必须的。以下几个命令要熟记:

sudo multipath -ll          # 查看所有多路径设备和路径状态
sudo multipath -r           # 重新扫描设备
sudo multipath -F           # 清除所有多路径设备(慎用)
sudo multipathd show paths  # 查看所有路径详细信息

常见故障场景:某条路径突然变成failed状态。先检查物理链路(光纤、网线、HBA卡),再检查存储端对应端口是否正常。如果是偶发的路径抖动,可以在配置中加大path_checker的检测间隔,或者启用alua(Asymmetric Logical Unit Access)让存储主动通知路径状态变化。

另一个常见问题是多路径设备名不稳定。确保user_friendly_names设为yes,并且/etc/multipath/bindings文件没有被手动修改。如果设备名变了,检查WWID是否一致,WWID是存储设备的唯一标识,不会变。

八、性能调优建议

生产环境中,multipath的默认配置不一定最优。几个实用调优点:第一,把polling_interval从默认5秒改成10-20秒,减少CPU开销;第二,对于大IO场景,把path_grouping_policy设为failover而不是multibus,避免跨组负载导致延迟;第三,如果存储支持ALUA,把path_checker设为tur(Test Unit Ready),比直接IO检测更轻量;第四,在/etc/udev/rules.d中添加规则,确保multipath设备权限正确。

# /etc/udev/rules.d/99-multipath.rules
ACTION=="add|change", SUBSYSTEM=="block", ENV{ID_WWN}!="", \
ENV{ID_PATH}!="", SYMLINK+="mpath/%k"

最后提醒一点,multipath不是万能的。它解决的是存储访问层面的高可用,数据本身的安全还需要配合RAID、快照、备份等手段。在做任何multipath配置变更之前,务必在测试环境充分验证,生产环境操作前做好快照。

九、总结

Ubuntu上配置multipath多路径存储,流程就是:装软件、改配置、扫设备、建文件系统、挂载使用。核心文件是/etc/multipath.conf,关键命令是multipath -ll和multipath -r。掌握路径策略选择、故障排查方法和性能调优技巧,就能在企业级存储环境中稳定运行。多路径不是复杂的东西,但细节决定稳定性,每一步都值得认真对待。