Proxmox VE 叢集管理:多台主機組隊打副本
一台 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 在節點掛掉時自動轉移到其他機器上繼續跑: 👉 高可用性