Skip to main content
RunBook Academy

Proxmox VEXII · High AvailabilityHA limits

When HA cannot save you

Advanced⏱ ~22 minha-manager

What you'll learn

  • Identify failure modes that HA cannot recover from
  • Recognise the capacity-based failure
  • Recognise the storage-based failure
  • Plan around HA limitations

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 is not magic. There are concrete scenarios where HA fails to recover a workload, and the operator needs to know what to do instead. This lesson enumerates them.

Failure mode 1: No capacity for failover

If a node fails and the surviving nodes cannot host the failed node’s VMs (because of RAM, vCPU, or storage limits), HA places the VMs in error state.

flowchart LR
  A[Node A fails] --> B[CRM tries to recover VMs]
  B --> C[Survivors have capacity?]
  C -->|yes| D[VMs restart on survivors]
  C -->|no| E[VMs in error state]

The arithmetic, so it is not a feeling

“We have headroom” is a belief until someone computes it. The computation is short, and the number it produces is the one that belongs in the capacity review.

Read-only / Safecan the cluster survive losing its largest node
set -euo pipefail

TOTAL_ALLOC=0
declare -A NODE_ALLOC

for NODE_DIR in /etc/pve/nodes/*; do
NODE=$(basename "$NODE_DIR")
SUM=0
for CONF in "$NODE_DIR"/qemu-server/*.conf "$NODE_DIR"/lxc/*.conf; do
  [ -e "$CONF" ] || continue
  MEM=$(awk '/^memory:/{print $2; exit}' "$CONF")
  SUM=$(( SUM + ${MEM:-512} ))
done
NODE_ALLOC["$NODE"]=$SUM
TOTAL_ALLOC=$(( TOTAL_ALLOC + SUM ))
printf '%-12s %6d MiB allocated to guests\n' "$NODE" "$SUM"
done

# Physical memory per node, for comparison.
pvesh get /cluster/resources --type node --output-format yaml \
| grep -E 'node:|maxmem:|mem:'

printf '\ntotal allocated across cluster: %d MiB\n' "$TOTAL_ALLOC"
echo 'Headroom test: (sum of all nodes physical) - (largest node physical)'
echo '               must exceed TOTAL_ALLOC, with room for the host itself.'

Three refinements that turn the number from arithmetic into a plan:

  • Use configured, not used, memory. A VM with memory: 32768 using 4 GiB still needs 32 GiB allocatable on the target unless ballooning is in play. HA places on what it must allocate.
  • Subtract the host’s own footprint. Ceph OSDs in particular are not small; a node running OSDs has materially less memory available for guests than its physical total.
  • Do it for the largest node, not the average. N+1 means surviving the loss of whichever node hurts most, and that is rarely the one you pictured.

The same reasoning applies to CPU, and to storage IOPS. Memory is the one that produces a hard failure - error state, guest does not start - which is why it is the one to compute first.

Failure mode 2: Shared storage is gone

HA requires the VM’s disk to be reachable from a surviving node. If shared storage is unreachable, HA cannot restart the VM.

ScenarioHA behaviour
NFS server downHA cannot start VMs
Ceph cluster downHA cannot start VMs
iSCSI SAN downHA cannot start VMs

Recovery: restore the storage first, then manually start the VMs.

Failure mode 3: Network partition

If a network partition isolates the failed node from the survivors AND the QDevice (if any), the CRM may not be able to fence the node. HA waits.

Recovery requires restoring network connectivity. No automatic recovery.

Failure mode 4: HA itself fails

The HA manager (CRM) runs on a single node. If that node has a software issue, HA becomes unavailable. The next node’s CRM takes over after a timeout.

Failure mode 5: Cascading failures

If a node fails and the additional load on survivors causes them to fail too, HA cannot recover. This is the worst-case scenario.

flowchart LR
  A[Node A fails] --> B[Survivors overloaded]
  B --> C[Survivor B fails]
  C --> D[Survivor C overwhelmed]
  D --> E[Cascade]

Prevention: keep cluster utilisation well below the threshold that triggers a cascade. N+1 headroom that includes the failed node’s full workload is mandatory.

Failure mode 6: HA rules prevent recovery

Strict HA rules can prevent recovery. If a VM’s strict rule lists only one node, and that node fails, the VM enters error state.

Recovery: relax the rule, manually move the VM, or rebuild.

Failure mode 7: Watchdog misconfiguration

If the watchdog is not configured (or misconfigured), self-fencing may not happen. A wedged node may come back online and confuse the cluster.

Verify the watchdog:

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

Note what that check does not rely on: systemctl status watchdog-mux reports active (running) on a node with no watchdog device at all, which is why the device test is the one that can fail. The full incident is worked through in anatomy of a bad fence.

Failure mode 8: everything HA was never for

Worth stating separately because it is the largest category by incident count, and because HA’s name invites the confusion.

EventDoes HA help?What does
Someone deletes a database tableNoBackup with retention
Ransomware encrypts the guestsNoImmutable offsite backup
A bad deploy breaks the applicationNoApplication rollback
Guest filesystem corruptionNo - it restarts the corrupt guestRestore
A guest OOMs repeatedlyNo - it restarts it, repeatedlyRight-sizing
Site lossNoDR
Certificate expiry across the estateNoMonitoring
A single node’s hardware diesYesThis is the one

HA addresses exactly one failure: a host stops. Everything else on that list is someone else’s job, and an estate that has bought HA and believes it has bought resilience is one deletion away from finding out.

Production considerations

Common mistakes

  • Believing HA is “automatic” and never testing.
  • Sizing at >80% utilisation.
  • Forgetting the watchdog configuration.

Key takeaways

  • HA fails when survivors lack capacity.
  • HA fails when shared storage is unreachable.
  • HA fails when the watchdog is misconfigured.
  • Plan runbooks for these scenarios.

Knowledge check

Knowledge check · 5 questions

  1. Q1. When does HA fail to recover a workload due to capacity?

  2. Q2. A shared storage failure defeats HA even if compute nodes are healthy.

  3. Q3. What is the most important prerequisite for HA recovery?

  4. Q4. A guest starts, runs for thirty seconds, and dies - repeatedly. What does HA do, and why is it unhelpful?

  5. Q5. Which of these does HA NOT protect against? Select all that apply.

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