跳到主要內容
節省工具箱Jason Tools
經驗分享

PVE HA Watchdog 暫時停用方法

Jason Cheng 發布 瀏覽 1 次
PVE HA Watchdog 暫時停用方法
本文目錄
  1. Watchdog 與 HA 的運作
  2. 使用時機
  3. 一般維護的正確做法:維護模式
  4. 方法一:停止 HA 服務
  5. 方法二:HA 資源設為 ignored
  6. 方法三:停用 softdog 模組(不建議)
  7. 方法比較
  8. 根本原因要處理
  9. 補充:PVE 9.2 起的官方作法
  10. 結論
  11. 參考資料

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 這種把機制拆掉的做法,能不用就不要用。

參考資料

Jason Cheng

Jason Cheng

企業開源技術顧問,專注架構規劃與實務導入

關於作者 →

延伸閱讀