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
⚠️ 注意:
若服務狀態顯示為inactive
或failed
,請檢查以下項目:
- 防火牆是否允許 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 連線存取。