在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。掌握路径策略选择、故障排查方法和性能调优技巧,就能在企业级存储环境中稳定运行。多路径不是复杂的东西,但细节决定稳定性,每一步都值得认真对待。
