Proxmox High Availability for Small Offices: Two-Node Clusters, QDevice Quorum, and ZFS Replication vs Ceph
What a second host actually buys you over a tested restore, the third vote it needs before it helps, and the storage choice that sets how much data you can lose.
By William Bradshaw | November 9, 2026 | 11 min read
Backups bring back data. They do not bring back uptime. A single Proxmox host is one failed motherboard away from a lost business day, and a nightly backup tells you the data is safe while saying nothing about how long the office waits to use it. A second host does not fix that on its own, because two machines cannot settle an argument about which of them is still alive unless something can break the tie.
This article is for IT leads at 10 to 50 seat offices running one or two Proxmox hosts, and for the Ohio townships and fire districts whose continuity plan says "restore from backup" without saying how long that takes. It covers what high availability (HA) buys over a tested restore, why a two-node cluster needs a third vote, how the storage choice sets the data you can lose, and what to write down so the design can be shown to an insurer or an auditor.
It assumes the hosts exist. If you are still sizing them, start with the Proxmox host sizing guide. If you have no offsite copy yet, fix that first with offsite backups for Proxmox, because HA is not a backup and a cluster replicates mistakes and ransomware as faithfully as it replicates good data.
Backups and HA Answer Different Questions
A backup answers "can we get the data back?" A tested restore answers "how long does that take?" HA answers a third question: "can the guests start again on another machine without anyone driving to the office?"
- Restore only. Your recovery time is the time to get replacement hardware or a spare host running, install Proxmox, and restore every guest in priority order. The test restore tells you the real number. Many one-host offices are right to stop here, with a documented procedure and a spare they have actually tested.
- High availability. When a node fails, the cluster restarts its HA-managed guests on a surviving node. The Proxmox documentation puts detection and failover at typically about two minutes, plus however long the guests take to boot. That is minutes, not hours, but it is not zero: users see a reboot.
- Neither replaces the other. HA does nothing for a deleted file, a corrupted database or ransomware. Keep the backups.
The question to ask first is what an hour of downtime costs the office, and whether a documented restore already meets that number. If it does, a second host is a budget decision, not a technical necessity.
Why Two Nodes Cannot Keep Quorum Alone
Proxmox clusters use Corosync to agree on membership, and by default each node gets a single vote. A cluster keeps quorum only while a majority of votes can talk to each other. With two nodes, the majority is two. Lose one node, or just the link between them, and the survivor holds one vote out of two: no quorum.
Without quorum the cluster file system that holds the guest configuration goes read-only, so you cannot start or change guests through normal means. HA makes it sharper: the Proxmox documentation explains that HA recovery relies on watchdog self-fencing, and that a node without quorum cannot reset its watchdog. If it still has active HA services, it reboots after about 60 seconds. A two-node HA cluster with no tiebreaker can therefore turn one failure into two. The documentation says plainly that for HA you need at least three nodes for reliable quorum.
There is also the split-brain case. If the cable between the two hosts fails but both hosts are healthy, each sees itself alone. Without a third party to say who stays up, the safe behavior is for neither to carry on.
QDevice: The Third Vote
Proxmox supports an external vote called a QDevice. A small daemon, corosync-qdevice, runs on each cluster node and talks to corosync-qnetd on a separate machine. That machine supplies the extra vote, so a two-node cluster has three votes and quorum is two. When one node dies, the survivor plus the QDevice make a majority and the cluster carries on. The Proxmox documentation recommends exactly this for two-node clusters that should provide higher availability.
What the external machine needs
- The
corosync-qnetdpackage, and network access to the cluster. That is the whole list of requirements for the host itself, which is why a small, quiet, low-power machine is enough. - The
corosync-qdevicepackage installed on every cluster node before you run the setup command (apt install corosync-qdevice). - TCP port 5403 reachable from the nodes (the qnetd default).
- Root SSH access during setup, ideally key-based, since the setup command copies the cluster's key to it.
- Setup is one command run on a cluster node, with every node online:
pvecm qdevice setup <QDEVICE-IP>. Confirm withpvecm status, which should show three expected votes and a quorum of two.
Do not run it on the cluster it arbitrates
It is tempting to make the QDevice a small virtual machine on one of the two hosts, since that costs nothing. Do not. If the third vote lives on a guest of the cluster, losing that host removes a node vote and the third vote at the same moment. You are back to one vote out of three, which is the exact failure the QDevice was added to survive. Put it on separate hardware: a mini PC or single-board computer on its own power supply, or a small machine at another site. The documentation notes that the QDevice link runs over ordinary TCP/IP, can sit outside the cluster LAN, and is not bound by Corosync's latency limits.
What it does not fix
For a cluster with an even node count, the Proxmox documentation says a QDevice has no negative implications: if it fails to work, you are where you would be without one. In a two-node cluster, that means that with the qnetd machine down you fall back to plain two-node behaviour. Both nodes keep quorum while both are up, but if one of them then fails, the survivor loses quorum, and a node running HA guests self-fences (reboots) after about 60 seconds. So the QDevice outage is harmless until a node fails at the same time, which is why you monitor it like any other server. Remove the QDevice before adding or removing cluster nodes. The documentation warns that for clusters with an odd node count a QDevice is close to a single point of failure and discourages it, which is another reason this is a two-node pattern; at three nodes you simply have quorum.
Surviving on one node also means the remaining host runs everything. Size each host so it can carry the whole workload alone, as covered in the sizing guide. A pair of hosts that each run at 70 percent is a pair that cannot fail over.
Storage Decides the Design
For a guest to restart on another node, that node must be able to read its disks. There are three ways to arrange that, and the choice also sets how much recent data you can lose.
Option A: local ZFS with storage replication
Each node keeps its guests on local ZFS, and Proxmox replicates them to the other node using snapshots. After the first full copy, only changes travel. Replication needs ZFS storage (the zfspool type) and a storage with the same storage ID available on the target node, so build both nodes' pools the same way. It is the usual fit for two nodes.
Option B: Ceph, hyperconverged
Ceph spreads storage across the nodes and keeps every node's view consistent, with no replication lag. The price is scale and network. Proxmox's guidance is at least three nodes (preferably identical), at least three monitors, and at least 10 Gbps of bandwidth used exclusively for Ceph traffic, kept apart from Corosync. It also wants memory and disks for the OSD daemons. A two-host office is not a candidate; a three-node build with real switches can be.
Option C: a shared NAS or SAN
Both nodes mount the same NFS or iSCSI storage, so a guest can start anywhere with no data lost to replication lag. It works, but the storage box becomes the new single point of failure, and it needs its own redundant power, disks and network paths to be worth the name.
| Question | A: ZFS replication | B: Ceph | C: Shared NAS |
|---|---|---|---|
| Minimum nodes | Two, plus a QDevice | Three | Two, plus a QDevice |
| Data lost on failover | Up to the replication interval | None from lag | None from lag |
| Network needs | Modest, between the nodes | 10 Gbps or more, dedicated | A fast, redundant storage path |
| New weak point | Replication schedule and pool layout | Operational complexity | The NAS itself |
Replication Is Asynchronous: The Interval Is Your Data-Loss Window
Storage replication runs on a schedule. The Proxmox documentation gives a default of every 15 minutes, a minimum interval of one minute and a maximum of once a week, and it warns that HA is allowed in combination with replication but there may be some data loss between the last synced time and the time the node failed.
Read that as a business decision, not a setting. If the schedule is every 15 minutes, a node that dies just before the next sync can cost you up to about 15 minutes of work in the guests it was running: orders entered, tickets updated, files saved. A one-minute schedule shrinks the window but increases the replication traffic and load, and a job that cannot finish inside its interval will fall behind. Ask the people who own each system how much they can afford to redo, then set the interval per guest to match. A file server and a line-of-business database rarely need the same answer.
Two more behaviors worth knowing. A failed replication job goes into an error state and retries every 30 minutes, which can widen the window quietly, so alert on replication errors. And planned moves are cheap: migrating a guest to the node that already holds its replica transfers only the changes since the last sync, and the replication direction switches automatically.
If the failed node stays down and HA is not managing the guest, the documentation describes moving the guest's configuration to the survivor by hand. HA automates that step; replication supplies the disks it starts from.
How HA Behaves, and What Changed in Proxmox VE 9
Fencing by watchdog
Proxmox HA does not need a power-control device. It fences by self-fencing: each node's HA stack keeps resetting a watchdog timer while it is healthy, and if it cannot (no quorum, or the HA services stop being scheduled), the node reboots. The documentation uses the Linux softdog as the fallback when there is no hardware watchdog. Hardware watchdog modules are blocked by default and enabled in /etc/default/pve-ha-manager. Because a surviving node only recovers a failed node's guests once that node is confirmed fenced, the watchdog is what makes it safe to start the same guest elsewhere without two copies writing to one disk.
HA groups became HA rules
If you learned HA on Proxmox VE 8, the interface changed. HA groups are deprecated and were migrated to HA node affinity rules as of Proxmox VE 9.0. A node affinity rule says which nodes a guest prefers (with priorities) or, when strict, must stay on. The current documentation also describes resource affinity rules, which keep selected guests on the same node or force them onto different nodes. For a two-node cluster the practical use is simple: add each critical guest as an HA resource, then decide with a node affinity rule where it should normally run. Check the current HA chapter before copying a tutorial written for version 8.
Restart and relocate defaults
When a service fails to start, the start failure policy applies: the HA manager retries on the current node first (max_restart, default 1) and relocates only after that is exhausted (max_relocate, default 1). If recovery fails, the service lands in an error state and stays there until someone disables it, fixes the cause and starts it again. That is deliberate, and it is why HA does not remove the need for monitoring and an on-call owner.
Planned maintenance
For patching, the HA stack has a node maintenance mode: ha-manager crm-command node-maintenance enable NODENAME moves the HA guests off, and they return when you disable it. That is the day-to-day payoff of a second host: patch one node at a time with no scheduled outage.
The Proxmox VE 9.2 release article covers the dynamic load balancer for HA clusters, which matters more as you add nodes than in a two-node pair.
Give Corosync Its Own Network
Corosync is latency sensitive. The Proxmox documentation asks for a reliable network with latencies under 5 milliseconds between all nodes, ideally on its own physically separated network, and says a dedicated 1 Gbit NIC is enough in most situations. It supports up to 8 links, and to get reliable redundancy you need at least one more link on a different physical network. The nodes must reach each other on UDP ports 5405 to 5412.
For a small office that means a Corosync link on a dedicated NIC and switch ports that do not carry guest traffic, plus a second link on a different path (another NIC and, where you can, another switch). If the cluster heartbeat shares a link with backups, replication or a busy guest VLAN, a saturated link looks like a dead node and can trigger a fence. Keep it off guest networks. The bond, bridge and VLAN layout that goes around it is in the Proxmox networking guide, and the management-plane lockdown is in the Proxmox hardening guide.
Replication traffic also needs a path. It can share a decent management link in a small office, but give it a schedule and a bandwidth limit rather than letting it compete with the Corosync heartbeat.
The Line Items for a 2027 Budget
Q4 is budget season, so here is the cost of moving from one host to a two-node HA design, as line items to price with your own vendor quotes rather than figures from us:
- A second host sized to run the whole workload alone, with matching ZFS storage layout for replication.
- The QDevice machine: small, low-power, on separate power from the cluster, on a UPS.
- NICs and switch ports for two Corosync links, kept apart from guest traffic, and capacity for replication traffic.
- Proxmox subscriptions for the extra node, if you run the supported repositories.
- Backup capacity for the larger footprint. HA adds copies of the data, not backups of it.
- Time: design, the first failover test, and the monitoring for replication errors, QDevice status and node health.
Compare that total with the cost of the downtime you measured, and with the alternative of a spare host that sits in a cabinet and is restored into by hand. For many offices the spare plus a rehearsed restore is the right answer. For others, patching without an outage and recovery in minutes pay for the second box quickly.
Prove It: A Failover Test and the Evidence to Keep
A test restore is the evidence for backups. A documented failover test is the evidence for HA, and insurer questionnaires and the cybersecurity program documentation an Ohio township or fire district keeps under ORC 9.64 both go better with a dated record than with a diagram. Run it in a maintenance window. Pulling the power on a node that runs production guests discards every write made since the last replication sync, so either stop user activity and trigger replication immediately before the test (in the GUI use Schedule now on each replication job, or run pvesr schedule-now <job-id> on the node), or run the test with a non-production guest:
- Record the starting state:
pvecm status(votes and quorum, QDevice shown as alive),ha-manager status, and the last successful replication time for each guest. - Simulate the failure. Cutting the power to one node is a truer test than a clean shutdown, because a clean shutdown tells HA what is happening.
- Time it: from the failure to the guests answering on the surviving node. Compare to your target.
- Check the data: what is the newest record in each guest, and how does it compare to the replication time? That gap is your measured data loss.
- Bring the node back, confirm it rejoins, replication resumes and the QDevice stays registered. Test the QDevice failure on its own as well: with the machine off, does the cluster behave as you expect?
- Write the one-page record: date, what was done, times, data gap, who checked it, and what you changed afterward.
Repeat it after hardware changes, a major Proxmox upgrade, or at least yearly. The first run usually finds something: a guest that was never added to HA, a replication job in error, a firewall that blocked port 5403.
Frequently Asked Questions
Can I run a Proxmox cluster with only two nodes?
Yes, but a two-node cluster cannot keep quorum when either node fails, because each node holds one vote and a majority of two is two. Add a QDevice (corosync-qnetd on a small separate machine) as the third vote, and the survivor keeps quorum when its partner goes down.
Can I run the QDevice as a virtual machine on one of the cluster nodes?
Do not. If the arbitrator lives on a guest of the cluster it arbitrates, losing that host removes a node vote and the third vote together, which is the exact failure the QDevice exists to cover. Run corosync-qnetd on separate hardware, or on a small machine at another site; the Proxmox documentation notes it can sit outside the cluster LAN.
Does Proxmox high availability lose data on failover?
With ZFS storage replication it can. Replication runs on a schedule, and the Proxmox documentation warns that there may be some data loss between the last synced time and the time the node failed. Your replication interval sets that window. Shared storage or Ceph avoids it but has its own requirements.
Do I need Ceph for Proxmox high availability?
No. HA needs the guest disks to be reachable from the node that takes over, which ZFS replication or a shared NAS can provide. Ceph is a good fit once you have at least three nodes and can dedicate fast network links to it, but it is the wrong tool for a two-host office.
What evidence should I keep to show that failover works?
Keep a dated failover test record: how the failure was simulated, how long until the guests answered again, the last replication time and any data missing afterward, who verified the result, and what you fixed. Repeat it after hardware or version changes and at least yearly.
Deciding Between a Tested Restore and a Second Host?
Bullium designs and tests Proxmox builds for small offices, townships and fire districts: the sizing, the QDevice, the storage choice, and a failover test record you can show your insurer or auditor. We start with a walkthrough of what you run today and what an hour of downtime costs. No commitment to engage further.
Related Reading
Offsite Backups for Proxmox
HA keeps the office running; the offsite copy keeps the business recoverable.
Proxmox Networking: VLAN-Aware Bridges Explained
The bridge, bond and VLAN layout the Corosync links sit beside.
Proxmox Host Sizing Guide
Sizing each host to carry the whole workload when its partner is down.
Securing Proxmox VE: A Hardening Checklist
Locking down the hosts and the cluster management plane.
Proxmox VE 9.2 Release
The dynamic load balancer for HA clusters, and what else changed.
Migrating from VMware to Proxmox
What production environments need once the cluster decision is made.
Backup and Disaster Recovery for Ohio Public Entities
Recovery objectives and the evidence insurers ask for.
Related Services
Virtualization
Proxmox clusters sized, built and documented for small offices and public entities.
Business Continuity
Recovery objectives, backups, failover tests and the records that prove them.
Network Design
Separate Corosync, storage and guest networks done properly.
Managed IT Services
Monitoring for replication errors, QDevice status and node health, run for you.