跳到主內容

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
  • 新增 WWIDMultipath 設定,使用 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) 進行掛載使用。

補充說明


備註





參考相關網頁