本文目錄
Proxmox VE 叢集開了 HA 之後,每個節點都會由 watchdog 盯著:一旦節點和叢集失去連線(失去 quorum),watchdog 時間到就會強制重新開機,這叫自我隔離(self-fencing),目的是確保同一台 VM 不會在兩個地方同時跑起來。
這個機制平常是在保護你,但遇到叢集網路本身出問題的時候,就會變成節點一直被踢重開機,問題還沒查完機器又重開了。這篇整理暫時停用 watchdog 的幾種方法。
注意:本文的做法只適用於特殊狀況(例如叢集網路異常、正在調整 corosync),不應該當成常用手法。停用期間 HA 完全不會保護你的服務,任何節點故障都不會自動移轉,處理完務必立刻恢復。
Watchdog 與 HA 的運作
先了解一下機制,才知道每種方法停掉的是什麼:
- pve-ha-crm(Cluster Resource Manager)
整個叢集只有一台是主控,負責決定 HA 資源要放在哪個節點 - pve-ha-lrm(Local Resource Manager)
每個節點都有,負責在本機啟動、停止 HA 資源 - watchdog-mux
管理 watchdog 裝置,預設使用核心的softdog模組;有設定硬體 watchdog 的話用硬體的
LRM 有 HA 資源要管時會進入 active 狀態並開啟 watchdog,之後要定期「餵狗」。節點失去 quorum 就沒辦法再更新狀態,大約 60 秒後 watchdog 到期,節點被強制重新開機。沒有 HA 資源的節點,LRM 會停在 wait_for_agent_lock(閒置)狀態,不會開啟 watchdog,所以沒設 HA 的叢集不會有這個問題。
查看目前狀態:
ha-manager status
systemctl status pve-ha-lrm pve-ha-crm watchdog-mux
pvecm status
使用時機
- 叢集網路(corosync)不穩,節點反覆失去 quorum、一直被重新開機
- 需要調整 corosync 設定、更換叢集網路,過程中一定會短暫斷線
- 整個叢集要一起停機維護
單一節點的一般維護(更新、重新開機)不需要停 watchdog,用下面的維護模式就好。
一般維護的正確做法:維護模式
單台節點要維護時,用 HA 的維護模式,HA 資源會自動移轉到其他節點,節點本身也不會被隔離:
# 進入維護模式,HA 資源會移到其他節點
ha-manager crm-command node-maintenance enable pve1
# 確認資源都移走了
ha-manager status
# 維護完成後解除
ha-manager crm-command node-maintenance disable pve1
也可以在「資料中心 → 選項 → HA 設定」把關機原則(shutdown policy)設為 migrate,節點正常關機或重新開機時就會先把 HA 資源移走。
方法一:停止 HA 服務
叢集網路出問題、節點一直被重新開機時,這是最快的暫時解法。
順序很重要:先在「所有節點」停 LRM,再到所有節點停 CRM。
# 第一步:所有節點都執行
systemctl stop pve-ha-lrm
# 第二步:所有節點的 LRM 都停了之後,再到所有節點執行
systemctl stop pve-ha-crm
LRM 正常停止時會關閉 watchdog,已經在執行的 VM/CT 不受影響,只是 HA 不再管理它們。順序反過來的話,CRM 先停、LRM 還在跑,LRM 仍然開著 watchdog,節點一樣可能被重新開機。
問題處理完之後恢復,同樣每個節點都要做:
systemctl start pve-ha-lrm pve-ha-crm
ha-manager status
注意:重新開機後 HA 服務會自動啟動,所以這個方法只在這次開機期間有效。如果節點在處理過程中重新開機,要再停一次。
方法二:HA 資源設為 ignored
把所有 HA 資源的要求狀態改成 ignored,HA 就會暫時不管它們,LRM 沒有資源要管,閒置後就會釋放 watchdog:
# 列出所有 HA 資源
ha-manager config
# 逐一設為 ignored
ha-manager set vm:101 --state ignored
ha-manager set ct:201 --state ignored
# 一次全部設為 ignored
for sid in $(ha-manager config | awk '/^(vm|ct):/{print $1}'); do
ha-manager set "$sid" --state ignored
done
設定後要等一段時間(大約數分鐘)LRM 才會回到閒置狀態,用 ha-manager status 確認每個節點的 LRM 不再是 active,watchdog 才算真的釋放。
恢復時改回原本的狀態(通常是 started):
ha-manager set vm:101 --state started
這個方法的好處是設定存在叢集設定裡,節點重新開機也不會失效;缺點是要記得每個資源原本的狀態,恢復時要一個一個改回去,建議先把 ha-manager config 的輸出存下來。
方法三:停用 softdog 模組(不建議)
網路上也有人把 softdog 加入黑名單:
echo "blacklist softdog" > /etc/modprobe.d/blacklist-softdog.conf
update-initramfs -u
reboot
我不建議這樣做:
- 這等於把 HA 的安全機制整個拆掉,watchdog-mux 會無法正常運作,HA 根本不能用
- 需要重新開機才生效,恢復時也要再重新開機
- 很容易做完就忘了改回來,之後以為 HA 有在保護,其實沒有
如果真的用了,處理完務必刪掉 /etc/modprobe.d/blacklist-softdog.conf,重新執行 update-initramfs -u 並重新開機。
方法比較
| 方法 | 生效時間 | 重新開機後 | 恢復方式 | 建議 |
|---|---|---|---|---|
| 維護模式 | 資源移完即可 | 維持 | node-maintenance disable | 單一節點一般維護 |
| 停止 HA 服務 | 立即 | 失效 | 啟動服務 | 網路異常的緊急處理 |
| 資源設為 ignored | 數分鐘 | 維持 | 逐一改回原狀態 | 需要跨越重新開機的維護 |
| 停用 softdog | 重新開機後 | 維持 | 刪除黑名單並重新開機 | 不建議 |
根本原因要處理
停用 watchdog 只是讓你有時間處理問題,真正要解決的是叢集網路:
# 叢集與 quorum 狀態
pvecm status
# 各條 corosync 連線的狀態
corosync-cfgtool -s
# corosync 記錄,看是不是一直有 link down
journalctl -u corosync --since "1 hour ago"
幾個建議:
- corosync 走獨立的網路,不要和儲存、備份、VM 流量共用,Ceph 或備份流量一大就會擠到 corosync
- 設定兩條以上的 corosync 連線(
link0、link1),一條斷了還有另一條 - 交換器的 STP、LACP 設定變更也常常造成瞬斷,維護網路設備前先想想會不會影響 corosync
補充:PVE 9.2 起的官方作法
Proxmox VE 9.2(2026/05 發佈)新增了 HA 的 disarm 功能,可以一次釋放整個叢集所有節點的 watchdog,專門用在重新設定網路、調整 corosync 這類會造成 quorum 暫時中斷的維護:
# freeze:服務維持現狀,HA 不處理任何變化(所有節點都會在線上時用這個)
ha-manager crm-command disarm-ha freeze
# ignore:服務暫時脫離 HA 管理,可以手動啟動、停止、移轉
ha-manager crm-command disarm-ha ignore
# 查看狀態
ha-manager status
# 維護完成後恢復
ha-manager crm-command arm-ha
ha-manager status 會顯示 fencing 狀態,從 disarming 變成 disarmed 才代表所有 watchdog 都已釋放。跟前面的方法比起來,它不用逐台停服務、也不用一個一個改資源狀態,恢復時 HA 資源會回到原本的狀態,有升到 9.2 以上的話,建議改用這個。
但同樣的原則不變:disarm 期間 HA 不會保護任何服務,維護時間越短越好。
結論
watchdog 一直把節點踢重開機,第一時間的反應常常是「把它關掉」,但要記得它是 HA 用來防止資料損毀的最後一道防線。
我的建議是:單一節點維護用維護模式;叢集網路出問題才暫時停 HA;處理完立刻恢復。至於停用 softdog 這種把機制拆掉的做法,能不用就不要用。
參考資料
- Proxmox VE 文件:High Availability
https://pve.proxmox.com/pve-docs/chapter-ha-manager.html - Proxmox VE 文件:ha-manager(1)
https://pve.proxmox.com/pve-docs/ha-manager.1.html - Proxmox VE 文件:Cluster Manager
https://pve.proxmox.com/pve-docs/chapter-pvecm.html - Proxmox VE Roadmap
https://pve.proxmox.com/wiki/Roadmap



