跳到主內容

Proxmox VE QDevice 仲裁服務

  BUBU 的專案目前僅有兩台 PVE 實體主機,但希望建立故障自動接手(HA)機制。 官方建議 HA 最少需三台 PVE 主機,不過若短期內無法擴充,可透過 Corosync QDevice(仲裁) + QNetd(仲裁服務端) 建立「第三票」,達成三票制 Quorum。

為什麼兩台也要三票?

  • Corosync/Quorum 採「多數決」避免腦裂(split-brain)
  • 只有兩台節點 → 任一台故障即只剩一票 → 叢集無法形成多數 → 停擺保護
  • 加入 QDevice(第三票) → 兩台任一台 + 仲裁票 = 2/3 票 → 系統仍具多數,可繼續運作

? 結論
兩台 PVE + 1 台 Linux(QNetd 仲裁主機) = 三票制叢集,可支援自動接手。


架構示意

節點 角色 說明
PVE Node 1 HA 節點 安裝 corosync-qdevice
PVE Node 2 HA 節點 安裝 corosync-qdevice
仲裁主機 QNetd 服務端 任一 Linux 主機,提供第三票

網路需求:

  • 三台間需可互通(TCP/5403)
  • 延遲低、連線穩定(建議與 corosync 同網段)

運行環境


  環境都是在 「Proxmox VE 」 虛擬系統上架設,都是以 「 LXC 」模式為主,除非有特殊狀況會告知使用 「 VM 」 模式

  • 系統環境: Proxmox VE 9.x、PBS 4.x

安裝過程


流程一、建立叢集

  接下來在 Proxmox VE 管理介面(Web GUI) 上,將這兩台主機建立為同一個叢集。請先在其中一台主機上建立叢集,並在另一台主機上加入該叢集。

*當叢集建立完成後,可以透過 CLI 指令檢查叢集運作狀態。 在任一台節點上執行以下指令:

pvecm status

? 說明
  • Quorate: Yes
    表示叢集已達到多數票數,可正常運作。

  • Nodes
    顯示目前叢集內的節點數量。

  • Ring ID / Membership
    用於識別 corosync 的通訊環狀網路與節點成員狀態。


⚠️ 若此區段顯示異常或缺少節點,請檢查以下項目:

  • 管理網路是否互通
  • corosync 服務是否正常運作
  • 防火牆是否允許叢集通訊(預設 UDP 5404、5405)
流程二、安裝仲裁服務(QNetd)

  本文範例示範如何在 PBS(Proxmox Backup Server) 環境中安裝仲裁服務端(QNetd)。

  • 安裝 QNetd 套件,安裝完成後,服務會自動啟動。
apt install corosync-qnetd -y
  • 確認服務狀態,使用下列指令檢查 QNetd 是否已正常運作:
systemctl status corosync-qnetd

⚠️ 注意:
若服務狀態顯示為 inactivefailed,請檢查以下項目:

  • 防火牆是否允許 TCP 5403 埠通訊
  • 系統時間是否正確(建議啟用 NTP 同步)
  • 檢視系統日誌:
    tail -n 50 /var/log/syslog
    
    或使用:
    journalctl -xeu corosync-qnetd
    
    以查看詳細錯誤訊息。
流程三、Node 服務上安裝 QDevice 服務

  在已建立的兩台 Proxmox VE 節點上,需分別安裝 QDevice 客戶端,以連線至先前建立的仲裁主機(QNetd)。

  • 安裝 QDevice 套件
apt install corosync-qdevice -y
  • 設定仲裁服務連線位置
    在其中一台 PVE 節點上執行以下指令,指定仲裁主機(QNetd)的 IP 位址:
pvecm qdevice setup <QDEVICE-IP>
  • 執行後會自動將設定同步至叢集內的所有節點,以下是設定完成的結果。

  • 驗證叢集與仲裁服務狀態
    在任一節點上執行:
pvecm status

? 說明
  • Expected votes: 3
    表示目前叢集共有三票(兩節點 + 一仲裁服務)。

  • Quorate: Yes
    表示叢集已達投票多數,可正常運作。

  • QDevice
    代表仲裁服務已正確連線,且具投票資格。


⚠️ 若未顯示 QDevice
請確認以下項目:

  • 仲裁主機(QNetd)服務是否運行中
  • TCP 5403 埠是否開放
  • corosync 設定檔 /etc/pve/corosync.conf 是否包含 QDevice 參數設定

補充說明


QDevice 狀態標誌(QDevice Status Flags)

QDevice 的狀態輸出通常會包含三個欄位:

  • A / NA:Alive 或 Not Alive
    表示與外部 corosync-qnetd 服務的通訊是否正常。

  • V / NV:Vote 或 Not Vote
    表示 QDevice 是否會對該節點進行投票。
    在發生「腦裂(split-brain)」的情況下,若節點間的 corosync 連線中斷,但兩個節點都仍可與外部 corosync-qnetd 服務通訊時,只有其中一個節點會獲得投票。

  • MW / NMW:Master Wins 或 Not Master Wins
    表示是否為主節點(預設為 NMW)。

  • NR:Not Registered
    表示 QDevice 尚未註冊。


? 注意
若 QDevice 顯示為 Not Alive(NA),請確認外部伺服器的 TCP 5403 埠(QNetd 預設埠號)
是否可被節點透過 TCP/IP 連線存取。

備註





參考相關網頁