Proxmox VE 叢集管理:多台主機組隊打副本

8 min read

一台 PVE 跑得好好的,為什麼要組叢集?因為單機就像獨居——什麼事都自己扛,生病了沒人幫忙頂班。PVE 叢集就是找室友合租,大家分擔家務,誰有事其他人可以接手。當然,室友之間也需要溝通協調,不然會吵架。如果你只有一台主機,可以先從 安裝與建立首台 VM 開始玩起。

叢集長什麼樣

┌──────────┐    ┌──────────┐    ┌──────────┐
│  Node 1  │◄──►│  Node 2  │◄──►│  Node 3  │
│ corosync │    │ corosync │    │ corosync │
│  pmxcfs  │    │  pmxcfs  │    │  pmxcfs  │
└──────────┘    └──────────┘    └──────────┘
       └────────────┼────────────┘
              Cluster Ring

兩個核心元件撐起整個叢集:

  • Corosync:負責節點之間的心跳偵測與訊息傳遞,像室友之間的群組聊天——誰沒回訊息就知道出事了
  • pmxcfs:叢集檔案系統,掛載在 /etc/pve,所有節點的設定檔即時同步。你在 Node 1 改了 VM 設定,Node 2 和 Node 3 馬上看到

Quorum:投票決定誰說了算

Quorum(仲裁)是叢集的民主機制——過半數節點同意才能繼續運作。這是為了防止「腦裂」(Split-brain):網路斷了,兩邊都以為自己是老大,搶著操作同一台 VM,資料就毀了。

公式很簡單:Quorum = 總票數 / 2 + 1

節點數 需要票數 可容忍掛幾台
2 2 0(完蛋)
3 2 1
4 3 1
5 3 2

看出來了嗎?偶數節點很尷尬——4 台跟 3 台能容忍的故障數一樣,多一台沒賺到。所以叢集建議用奇數:3 台或 5 台。

2 台節點的叢集天生有 Quorum 問題:掛一台就過不了半數,整個叢集卡住。解法是加一個 QDevice——不需要是高規機器,一台輕量 Linux 或 LXC 容器就行,它只負責投票不跑 VM。就像打籃球三對三,找一個人來當裁判就夠了。

建叢集:其實不難

# 第一台節點建立叢集
pvecm create my-cluster
 
# 其他節點加入(輸入第一台的 IP)
pvecm add 192.168.1.100
 
# 看叢集狀態
pvecm status
 
# 列出所有節點
pvecm nodes

加入叢集之前先確認幾件事,不然後面會各種靈異現象:

  • 每台節點的主機名稱必須唯一
  • DNS 正確解析(每台節點都能 resolve 其他節點的 hostname)
  • 時間同步(NTP 設好,時間差太多 Corosync 會翻臉)
  • 網路互通,延遲夠低

叢集建好之後不能改叢集名稱,主機名稱也盡量別動。這不是改 Wi-Fi 密碼那麼隨便的事。

移除節點

要把某台節點踢出叢集,步驟要對:

# 先把那台節點上的 VM 全部遷走
 
# 在要移除的節點上停止服務
systemctl stop pve-cluster corosync
 
# 在叢集裡任一台其他節點上執行移除
pvecm delnode <node-name>

先遷 VM 再移除節點,就像搬家要先把傢俱搬走再退租。如果直接退租,東西還在裡面就尷尬了。

Corosync 網路:建議獨立拉一條

Corosync 的心跳封包對延遲很敏感。如果跟業務流量、存儲流量擠在同一條網路上,塞車的時候 Corosync 收不到心跳,就會誤判節點掛了,然後觸發不必要的故障轉移。

建議做法:

  • 用獨立的網段給 Corosync(例如 10.10.10.0/24
  • 設定多條 Corosync Link 做冗餘
  • 不需要 10G,1G 夠用,但延遲要低

網路怎麼規劃、Bridge 怎麼分流,可以回頭看 網路管理。存儲網路的規劃(尤其是跑 Ceph)則參考 Ceph 超融合存儲

# 查看目前 Corosync 設定
cat /etc/pve/corosync.conf

叢集限制與注意事項

  • 最多 32 個節點——不夠的話,你可能需要的是 Kubernetes 而不是 PVE
  • 所有節點要在同一個網段,或者透過 VPN 連接
  • 加入叢集後節點是「終身制」的——要離開得走正式流程,不能直接拔網線跑路
  • 跨叢集遷移 VM 不支援,得靠 PDM(Proxmox Datacenter Manager)

常見問題速查

症狀 通常原因
節點顯示離線但其實活著 Corosync 網路不通或延遲太高
叢集操作全部卡住 Quorum 丟失,過半數節點掛了
加入叢集失敗 DNS 沒設好、時間沒同步、SSH key 有問題
Web GUI 看不到其他節點的 VM pmxcfs 同步出問題,檢查 Corosync 狀態
# 排查起手式
pvecm status        # 看叢集整體狀態
pvecm expected 1    # 緊急狀況:強制單節點取得 Quorum(慎用!)
journalctl -u corosync -f  # 看 Corosync 即時日誌

pvecm expected 1 是急救用的,等於跳過投票機制強行讓單節點運作。用完記得把叢集修好,不然你的「民主制度」就只是裝飾品。

更詳細的叢集管理參數,可以參考 Proxmox VE Cluster Manager 官方文件。Corosync 的底層機制可以看 Corosync 官方網站,QDevice 的設定參考 Proxmox Wiki 的 Cluster Manager 頁面

常見問題

Q: PVE 叢集最少需要幾台節點?

技術上 2 台就能組叢集,但 2 台有 Quorum 問題——掛一台整個叢集就卡住。建議最少 3 台,或者 2 台加一個 QDevice(輕量 Linux 機器當投票裁判)。

Q: Proxmox Cluster 節點可以跨網段嗎?

可以,但 Corosync 需要節點之間網路互通且低延遲。跨網段通常透過 VPN 連接,但延遲太高會導致心跳偵測誤判。同一個區域網路內組叢集是最穩的做法。

Q: pvecm 加入叢集失敗怎麼排查?

最常見的三個原因:DNS 沒正確解析各節點 hostname、NTP 時間沒同步(差太多 Corosync 會拒絕)、SSH key 驗證失敗。依序檢查這三項通常能解決問題。

Q: 叢集節點可以跑不同版本的 PVE 嗎?

短期升級過渡期可以混版本運行,但不建議長期這樣。所有節點應盡快統一到相同的 PVE 版本,避免 API 不相容或功能異常。升級時建議逐台滾動更新。

下一步

叢集組好了,接下來才是重頭戲——高可用性。讓 VM 在節點掛掉時自動轉移到其他機器上繼續跑: 👉 高可用性