Proxmox VE 高可用性:讓 VM 自己找活路
高可用性(HA)的核心概念其實很樸素:某台機器掛了,上面的服務自動在別台機器重新跑起來。 就像餐廳的備用瓦斯爐——主爐壞了,菜不能停,換一台繼續炒。聽起來理所當然,但要做到「自動」且「安全」,底層有不少機制要搞對。HA 是建立在 叢集 之上的功能,還沒組叢集的話請先回去看。
HA 的腦與手
PVE 的 HA 架構分成兩層:
┌─────────────────────────────────────┐
│ CRM(叢集資源管理器) │
│ → 在 Master 節點上執行 │
│ → 決策中心:誰掛了、搬去哪 │
├────────┬────────┬───────────────────┤
│ LRM │ LRM │ LRM │
│ Node 1 │ Node 2 │ Node 3 │
│ → 執行者│ → 執行者│ → 執行者 │
├────────┴────────┴───────────────────┤
│ Corosync + Quorum + Fencing │
└─────────────────────────────────────┘
- CRM(Cluster Resource Manager):大腦,負責監控所有 HA 資源,判斷「誰掛了」「搬去哪」
- LRM(Local Resource Manager):手腳,每個節點上都有一個,負責實際的開機、關機、遷移動作
CRM 跟 LRM 的關係像是調度室跟現場工人——調度室下指令,工人動手做。
Fencing:先確認倒下的人不會亂動
這是 HA 最關鍵也最常被忽略的一環。
想像一個場景:Node 1 的網路斷了,CRM 覺得它掛了,於是在 Node 2 啟動同一台 VM。但其實 Node 1 還活著,上面那台 VM 也還在跑。兩邊同時寫同一份資料——恭喜,資料毀了。
Fencing 就是為了防止這種事。PVE 使用 watchdog-based fencing:
- 每個節點跑一個
watchdog-mux守護程序,持續「餵狗」 - 節點失去 Quorum → 停止餵狗 → watchdog 超時
- watchdog 超時 → 強制重啟該節點
- 節點重啟後,上面的 VM 自然就停了,CRM 才能安全地在其他節點啟動它們
# 確認 watchdog 狀態
systemctl status watchdog-mux
# 檢查有沒有硬體 watchdog
ls /dev/watchdog*PVE 預設用軟體 watchdog(
softdog),能用但不是最可靠。如果你的伺服器有硬體 watchdog(多數 server 級主板都有),建議啟用它。硬體 watchdog 就算系統整個卡死也能強制重啟,軟體的做不到。
設定 HA 資源
把 VM 加入 HA 管理很簡單:
# 新增 HA 資源
ha-manager add vm:100 --state started --group my-ha-group
# 查看 HA 狀態
ha-manager status
# 移除 HA 資源
ha-manager remove vm:100Web GUI 操作路徑:Datacenter → HA → Add → 選 VM → 設定 Group
HA Groups:決定 VM 能住哪
HA Group 定義了資源可以在哪些節點上執行,以及優先順序:
- Priority:數字越大越優先,故障轉移時優先選高優先順序的節點
- restricted:開啟後資源只能在 Group 內的節點跑,不會跑到外面
- nofailback:故障轉移後不自動搬回原來的節點,避免不必要的遷移
就像員工排班——你可以指定某些人優先上早班,也可以限制某些人只能待在特定部門。
HA 資源狀態速查
| 狀態 | 意思 |
|---|---|
started |
正常運行中 |
stopped |
已停止(HA 會確保它維持停止) |
migrate |
正在遷移 |
relocate |
故障後正在重新安置 |
error |
出事了,需要人工介入 |
fence |
節點正在被隔離中 |
Live Migration:VM 搬家不斷線
Live Migration 是把正在跑的 VM 從 A 節點搬到 B 節點,過程中服務(幾乎)不中斷:
- 開始複製 VM 記憶體到目標節點
- 持續同步變動的記憶體頁面
- 最終短暫暫停(通常不到 1 秒)→ 切換完成
- VM 在目標節點繼續跑
前提條件:
- 共享存儲(Ceph/NFS/iSCSI),或者用 Replication 先把磁碟同步過去——存儲怎麼選可以看 存儲全攻略
- 兩台節點的 CPU 相容(同廠牌同世代最保險)
# 手動觸發 Live Migration
qm migrate 100 node2 --onlineLive Migration 最常用在計劃維護——要更新 Node 1 的韌體?先把上面的 VM 全部 live migrate 到其他節點,更新完再搬回來。使用者完全無感,就像魔術師在你眼前把東西換掉,你卻什麼都沒察覺。
Affinity Rules(PVE 9.0+)
PVE 9.0 開始支援 Affinity Rules,讓你控制 VM 之間的「距離」:
- 共置(Co-locate):指定一群 VM 必須在同一節點。例如 Web Server 跟它的 Redis Cache,放一起延遲最低
- 分離(Separate):指定一群 VM 必須分散在不同節點。例如兩台 Database 主備,放一起就失去了備援的意義
這就像安排座位——有些人要坐在一起方便討論,有些人必須分開坐避免作弊。
故障轉移完整流程
當一台節點真的掛了,整個流程是這樣的:
- Corosync 偵測到心跳消失
- 其他節點確認:「它真的掛了,不是網路抖一下」
- CRM 觸發 Fencing → 等 watchdog 強制重啟故障節點
- 確認 Fencing 完成(故障節點上的 VM 確實停了)
- CRM 指派 LRM 在目標節點啟動受影響的 HA 資源
- 持續監控直到資源恢復正常
整個流程大概幾十秒到幾分鐘,取決於 watchdog 超時設定和 VM 啟動速度。
HA 不是萬能的
幾個前提得滿足,不然 HA 只是擺設:
- 最少 3 節點(或 2 節點 + QDevice)——Quorum 機制的硬需求
- 共享存儲或 Replication——VM 磁碟搬不過去,HA 就沒用
- Fencing 正常運作——沒有 Fencing 的 HA 比沒有 HA 更危險
- 不適合所有 VM 都開 HA——資源吃緊的時候故障轉移也跑不動,挑關鍵服務就好
- 就算有 HA,備份還是要做——HA 防的是節點故障,不防人為誤刪或資料損壞
維護節點之前,記得先把 HA 資源手動遷走。直接關機會觸發故障轉移流程——不是不行,但沒必要讓系統白跑一趟驚嚇反應。更多 Homelab 維運的眉角,可以參考 最佳實踐總整理。
延伸閱讀
常見問題
Q: PVE HA 最少需要幾個節點?
最少 3 個節點(或 2 節點加 QDevice)。HA 依賴 Quorum 機制運作,過半數節點存活才能做決策。2 節點不加 QDevice 的話,掛一台整個 HA 就停擺了。
Q: Live Migration 需要共享存儲嗎?
標準做法是需要的,Ceph、NFS 或 iSCSI 都可以。如果沒有共享存儲,可以用 ZFS Replication 先同步磁碟到目標節點,但遷移速度會受磁碟大小影響。
Q: Proxmox 高可用的 Fencing 是什麼?
Fencing 是確保故障節點上的 VM 真正停止後,才在其他節點重新啟動的安全機制。PVE 用 watchdog 實現——節點失去 Quorum 後停止餵狗,watchdog 超時就強制重啟該節點,避免兩邊同時跑同一台 VM 導致資料損壞。
Q: HA 故障轉移要多久?
從偵測到故障到 VM 在新節點啟動完成,通常需要幾十秒到幾分鐘。取決於 watchdog 超時設定(預設約 60 秒)和 VM 本身的開機速度。這段期間服務會中斷,不像 Live Migration 幾乎無感。
HA 設定好之後,你的 PVE 叢集就從「多台電腦各管各的」升級成了「互相掩護的團隊」。搭配前面的存儲、網路、備份知識,一套完整的虛擬化基礎建設就成形了。剩下的就是根據你的場景微調,然後享受穩定運作帶來的安心感。