Skip to main content
RunBook Academy

Proxmox VEXII · High AvailabilityHA architecture

HA architecture: CRM, LRM, watchdog, fencing

Advanced⏱ ~26 minha-manager

What you'll learn

  • Explain the roles of pve-ha-crm and pve-ha-lrm
  • Understand how fencing prevents split-brain
  • Configure the watchdog for HA
  • Trace the recovery sequence during a host failure

Prerequisites

Verified against Proxmox VE 9.2.4 · Proxmox Backup Server 4.2.5 · Ceph Squid / Tentacle · Debian 13 (Trixie) · Linux kernel 7.0 (PVE 9.2 default) · 2026-08-12

Not yet marked complete on this device.

Why this matters in production

HA in Proxmox is not magic. It is a state machine implemented by two daemons plus a watchdog. Understanding the state machine is essential for diagnosing HA incidents.

The two daemons

DaemonRoleWhere it runs
pve-ha-crmCluster Resource Manager — makes cluster-wide decisionsOne node at a time (master)
pve-ha-lrmLocal Resource Manager — executes actions on the local nodeEvery node
sequenceDiagram
  participant Master as CRM (master node)
  participant LRM1 as LRM (node 1)
  participant LRM2 as LRM (node 2)
  participant LRM3 as LRM (node 3)
  Master->>LRM1: start vm:100
  LRM1-->>Master: started
  Note over Master,LRM2: Node 1 fails
  Master->>LRM1: stop vm:100 (no reply)
  Master->>LRM1: fence node 1
  Master->>LRM2: start vm:100
  LRM2-->>Master: started

The CRM (Cluster Resource Manager)

The CRM:

  • Runs on one node at a time (the master, holding the manager lock).
  • Tracks the desired state of every HA-managed resource.
  • Sends commands to LRMs.
  • Decides which node should run which resource.
  • Manages fencing.

The CRM uses pmxcfs for distributed locking. The master lock is held by one CRM at a time; if the master fails, another CRM takes over.

The LRM (Local Resource Manager)

The LRM runs on every node. It:

  • Reads the requested state for its resources from manager_status.
  • Executes the corresponding qm or pct commands.
  • Reports results back to the CRM.

LRMs also hold an “agent lock” in pmxcfs. If the lock is lost, the LRM shuts down its resources (to prevent split-brain).

Fencing — preventing split-brain

Fencing ensures that a failed node can never come back online and run the same VMs as a surviving node. Without fencing, both nodes might believe they own the resource.

Proxmox uses self-fencing via watchdog:

  1. The CRM detects that a node has not sent heartbeats.
  2. The CRM waits for the agent lock on that node to be released (a healthy LRM releases the lock when it loses quorum).
  3. If the lock is not released, the CRM assumes the node is wedged.
  4. The watchdog on the wedged node triggers a reboot.

The watchdog is hardware-based if available (IPMI watchdog, iTCO_wdt, etc.) or software-based (Linux softdog) as a fallback.

cat /etc/default/pve-ha-manager && ls -la /dev/watchdog
ha-manager status

Recovery sequence

sequenceDiagram
  participant N1 as Failed node
  participant N2 as Surviving node
  participant W as Watchdog
  Note over N1: Node stops responding
  N2->>N2: CRM waits for LRM lock release
  N2->>W: Lock not released, trigger watchdog on N1
  W->>N1: Reboot
  N1->>N1: Booting...
  Note over N1: Node loses lock, resources stopped
  N2->>N2: CRM selects new host for affected VMs
  N2->>N2: LRM starts VMs on new host

Interactive HA simulator

Interactive · HA Behaviour Simulator

Click a node to mark it as failed. Watch how the cluster resource manager (CRM) steals the HA-managed VMs and restarts them on a surviving node. Note the watchdog state — if quorum is lost, the watchdog triggers a self-reset on the failed node.

Cluster nodes

HA-managed VMs (current placement)

VMIDNamePreferredCurrent nodeState
101web-01pve-01pve-01started
102db-01pve-02pve-02started
103app-01pve-03pve-03started
104util-01pve-01stopped

Cluster Resource Manager

CRM master
pve-01
Watchdog
armed
Quorate
yes
All nodes healthy. HA is idle; the CRM watchdog is armed but not triggering.

The simulator shows what happens to VMs as nodes fail and the CRM/LRM react. Note:

  • The CRM “steals” services from failed nodes.
  • VMs restart on survivors.
  • The watchdog state changes from armed to disarming when a node fails.

Watchdog configuration

Configuration change
cat > /etc/default/pve-ha-manager <<EOF
WATCHDOG_MODULE=iTCO_wdt
EOF
systemctl restart watchdog-mux

Server boards commonly expose an IPMI watchdog; Intel chipsets expose iTCO_wdt. Confirm which module your hardware actually provides before setting the value - naming a module that does not load leaves the node with no watchdog at all, and every service-level health check still passes.

Read-only / Safefind out which watchdog this hardware has, before configuring one
set -euo pipefail

# What watchdog drivers does this kernel offer for this hardware?
ls /sys/class/watchdog/ 2>/dev/null || echo 'no watchdog class entries'
for W in /sys/class/watchdog/watchdog*; do
[ -e "$W" ] || continue
printf '%s: ' "$(basename "$W")"
cat "$W/identity" 2>/dev/null || echo unknown
done

# What is loaded now, and what is configured?
lsmod | grep -iE 'wdt|softdog|watchdog' || echo 'no watchdog module loaded'
cat /etc/default/pve-ha-manager
systemctl is-active watchdog-mux

Production considerations

Common mistakes

  • Not configuring a hardware watchdog.
  • Running clusters at >80% utilisation (no HA failover room).
  • Misconfigured shared storage (HA cannot restart VMs if storage is gone).

Key takeaways

  • CRM makes cluster-wide decisions; LRM executes locally.
  • Watchdog prevents split-brain via self-fencing.
  • Capacity headroom is mandatory.

Knowledge check

Knowledge check · 5 questions

  1. Q1. What role does the CRM play?

  2. Q2. Proxmox HA needs shared or distributed storage before it can restart a VM on another node.

  3. Q3. Which mechanism prevents split-brain in Proxmox HA?

  4. Q4. Why does the CRM wait to acquire a failed node’s agent lock rather than pinging the node or querying its IPMI?

  5. Q5. Which statements about the fencing delay and the watchdog are correct? Select all that apply.

Passing score: 75%. Answers are checked in this browser.