Proxmox VE iSCSI 多路徑 (Multipath) 設定與問題記錄
BUBU 在工作上使用到掛載 iSCSI 儲存服務時,遇到多路徑 (Multipath) 的存取問題。為了確保儲存路徑能正確整合,並達到冗餘與負載平衡的效果,特別記錄下本篇操作流程與設定參考。
目的說明:
iSCSI 多路徑 (Multipath I/O, MPIO) 的設定可讓作業系統同時使用多條通往儲存設備的路徑,
不僅能避免單一路徑失效導致中斷,也能在多通道環境中提升資料吞吐效能。
運行環境
環境都是在 「Proxmox VE 」 虛擬系統上架設,都是以 「 LXC 」模式為主,除非有特殊狀況會告知使用 「 VM 」 模式
- 系統環境: Proxmox VE 9
設定過程
Multipath 安裝與設定步驟
如果您的 Proxmox VE 有建立叢集 (Cluster),請注意:
每一台節點都必須安裝並設定 Multipath 套件,確保所有節點的路徑一致性。
- 設定
iscsi設定檔
node.startup = automatic
node.session.timeo.replacement_timeout = 15
- 設定完之後重啟
iscsi服務
systemctl restart iscsid
- 先確認系統是否已正確掛載
iSCSI磁碟:
lsblk
# 或使用
fdisk -l
- 取得每顆 iSCSI 磁碟的 WWID (World Wide Identifier),此識別碼稍後會寫入 multipath 設定檔中使用。
/lib/udev/scsi_id -g -u -d /dev/<DEVICE_ID>
- 範例
/lib/udev/scsi_id -g -u -d /dev/sda
- 安裝
Multipath套件,系統預設未安裝multipath-tools,請手動安裝:
apt install multipath-tools
- 新增
WWID至Multipath設定,使用multipath -a將剛剛查詢到的WWID加入multipath管理清單中:
multipath -a 3600144f028f88a0000005037a95d0001
multipath -a 3600144f028f88a0000005037a95d0002
- 重新載入 Multipath 設定,讓 multipathd 重新讀取設定檔:
multipath -r
- 查看 Multipath 路徑狀況,檢查目前路徑是否正確合併及運作正常:
multipath -ll
- 範例:
PVE-DATA01 (3600144f028f88a0000005037a95d0001) dm-2 DELL,PowerStore
size=2.0T features='1 queue_if_no_path' hwhandler='1 alua' wp=rw
|-+- policy='queue-length 0' prio=50 status=active
| `- 5:0:0:1 sdb 8:16 active ready running
`-+- policy='queue-length 0' prio=10 status=enabled
`- 6:0:0:1 sdc 8:32 active ready running
- 設定 multipath 路徑
vim /etc/multipath.conf(DellEMC設定)
multipaths {
multipath {
# 目標 LUN 的 WWID(全域唯一 ID)
# ⚠ 你這裡的 wwid 看起來偏短(像 placeholder),
# 真實值通常是很長的一串 16 進位字串,請用 `multipath -ll` 取得。
wwid 3600144f028f88a0000005037a95d0001
# 給這顆 LUN 取一個好記的別名
alias PVE11
}
multipath {
wwid 3600144f028f88a0000005037a95d0002
alias PVE22
}
}
defaults {
# multipathd 每 5 秒輪詢一次路徑狀態
polling_interval 5
# 路徑健康檢查(checker)最長等待 15 秒
checker_timeout 15
# 是否啟用 find_multipaths 機制
# PVE / 新版 multipathd 一般建議用 "smart"(見下方建議)
find_multipaths no
# 讓 multipath 自動產生好讀的 mpath 名稱(不等同 alias)
user_friendly_names yes
# 允許「外部」的多路徑框架;設定為 nvme 表示讓 NVMe 原生多路徑自己處理,
# dm-multipath 不去接管 NVMe 裝置(僅處理 SCSI/FC/iSCSI)
enable_foreign nvme
}
devices {
device {
vendor DellEMC
product PowerStore
# 自動偵測並使用 ALUA 的 path prio(權重)
detect_prio "yes"
# 路徑選擇演算法:以 queue-length 為主,
# 會將 IO 分配給佇列較短的路徑,通常比單純 round-robin 更適合陣列
path_selector "queue-length 0"
# 依 prio 分群(ALUA 會把 AO/ANO 分到不同優先群組)
path_grouping_policy "group_by_prio"
# 路徑健康檢查方法:tur(Test Unit Ready),
# 常見於支援 ALUA 的陣列
path_checker tur
# 一旦較高優先(Active/Optimized)路徑恢復,立刻切回
failback immediate
# 路徑故障後 5 秒內快速失敗(停止等待),交由上層重試
fast_io_fail_tmo 5
# 當所有路徑都掛了時,最多重試 3 次後回報失敗
#(若需更高容忍、避免 app 立即失敗,可改 queue 或更大數值;見下方建議)
no_path_retry 3
# 每個路徑最少 1 次 I/O 要輪一次(當前 selector 下意義有限)
rr_min_io_rq 1
# 限制單次 I/O 大小為 1024 KB(1MB),提升相容性
max_sectors_kb 1024
# 失去所有路徑多久後認定裝置遺失(秒)
# 這裡 10 秒很短,維運中換線或切換控制器可能過短(見下方建議)
dev_loss_tmo 10
# 使用 ALUA 硬體處理器(讓 kernel 知道 AO/ANO)
hardware_handler "1 alua"
}
}
- 設定完之後重啟 Multipath 服務
systemctl restart multipathd.service
- 重新載入 Multipath 設定,讓 multipathd 重新讀取設定檔:
multipath -r
- 查看 Multipath 路徑狀況,檢查目前路徑是否正確合併及運作正常:
multipath -ll
- 範例:
PVE-DATA01 (3600144f028f88a0000005037a95d0001) dm-2 DELL,PowerStore
size=2.0T features='1 queue_if_no_path' hwhandler='1 alua' wp=rw
|-+- policy='queue-length 0' prio=50 status=active
| `- 5:0:0:1 sdb 8:16 active ready running
`-+- policy='queue-length 0' prio=10 status=enabled
`- 6:0:0:1 sdc 8:32 active ready running
- 手動建立 LVM(適用於部分無法從 GUI 建立的 Storage)
說明
在某些情況下,不同品牌的 Storage(如部分 iSCSI、FC 或 Multipath 裝置)可能無法直接透過 Proxmox VE 的 GUI 介面建立 LVM。
此時可先透過 CLI 手動建立 PV(Physical Volume) 與 VG(Volume Group),再於 GUI 介面中新增 LVM Storage。
- 建立 Physical Volume
pvcreate /dev/mapper/PVE-DATA01
說明:
將 /dev/mapper/PVE-DATA01 初始化為 LVM 可用的實體磁碟裝置。
- 建立 Volume Group
vgcreate VG_NAME /dev/mapper/PVE-DATA01
說明:
建立名為 VG_NAME 的 Volume Group,並將剛建立的 PV 加入該群組中。
建議命名時依據實際用途,例如:
vgcreate pve_data01 /dev/mapper/PVE-DATA01
- 後續操作(於 GUI 介面)完成上述步驟後,即可進入 Proxmox VE 的 Datacenter → Storage → Add → LVM,選擇剛建立的 Volume Group (VG_NAME) 進行掛載使用。