多路徑將伺服器至存儲的多條物理路徑聚合為單一邏輯裝置(/dev/mapper/mpathX),提供路徑容錯、負載均衡與頻寬聚合。本文以 RHEL/CentOS 5/6/7 為例,涵蓋 device-mapper-multipath 套件安裝、multipath.conf 關鍵配置、服務啟動與 multipath -ll 驗證的完整流程。

# RHEL/CentOS 5/6 (rpm)
rpm -ivh device-mapper-1.02.67-2.el5.x86_64.rpm
rpm -ivh device-mapper-event-1.02.67-2.el5.x86_64.rpm
rpm -ivh device-mapper-multipath-0.4.7-48.el5.x86_64.rpm
# RHEL/CentOS 7/8/9 (yum/dnf)
yum install device-mapper-multipath -y
chkconfig --level 345 multipathd on # CentOS 5/6
systemctl enable multipathd # CentOS 7+
lsmod | grep dm_multipath
# 輸出應含 dm_multipath、scsi_dh、dm_mod
/etc/multipath.conf 關鍵區塊defaults {
udev_dir /dev
polling_interval 10
selector "round-robin 0"
path_grouping_policy multibus
getuid_callout "/sbin/scsi_id -g -u -s /block/%n"
prio_callout none
path_checker readsector0
rr_min_io 100
max_fds 8192
rr_weight priorities
failback immediate
no_path_retry fail
user_friendly_names yes
}
blacklist {
wwid 26353900f02796769
devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
devnode "^hd[a-z]"
}
# 註解掉預設黑名單(否則所有裝置皆被忽略)
# blacklist {
# devnode "*"
# }
# defaults {
# user_friendly_names yes
# }
| 參數 | 推薦值 | 用途 |
|---|---|---|
path_grouping_policy | multibus | 所有有效路徑歸為同一優先組(主動-主動) |
path_checker | readsector0 | 讀取 Sector 0 檢查路徑存活(通用性最佳) |
failback | immediate | 故障路徑恢復即立即納入負載 |
no_path_retry | fail | 所有路徑失敗時快速報錯(避免應用無限掛起) |
user_friendly_names | yes | 邏輯裝置命名為 mpath0、mpath1 而非 WWID |
modprobe dm-multipath
multipath -F # 清除現有多路徑對應
multipath -v2 # 詳細掃描並建立對應
service multipathd restart
# 或 systemctl restart multipathd
multipath -ll
# 輸出範例
mpath1 (3600d02310000011b16a5d57c6a1bd99a) dm-0 TOYOU,NetStor_iSUM510
[size=3.3T][features=0][hwhandler=0][rw]
\_ round-robin 0 [prio=2][enabled]
\_ 1:0:0:0 sdb 8:16 [failed][ready]
\_ 1:0:1:0 sdc 8:32 [failed][ready]
mpath1:邏輯裝置名(user_friendly_names=yes)3600d023...:WWID(全域唯一識別碼)dm-0:device-mapper 分配的次裝置號round-robin 0:負載均衡策略[failed][ready]:路徑狀態(檢查器判定失敗但裝置就緒,可能為暫時性)| 操作 | 指令 |
|---|---|
| 查看狀態 | multipath -ll |
| 手動觸發路徑檢查 | multipathd -k"check path sdb" |
| 顯示拓撲圖 | multipathd -k"show topology" |
| 重新載入配置 | systemctl reload multipathd |
| 移除特定裝置多路徑 | multipath -f /dev/mapper/mpath1 |
prio_callout 實現優選路徑。完成上述配置,即可在 Linux 層面獲得透明的多路徑容錯與負載均衡,大幅提升存儲連線可用性。