Skip to main content

staxmax

staxmax is a deliberately small virtualization platform for two (or more) small machines. VMs and Linux containers run on Incus with local ZFS storage. Each protected VM or container is copied to another node every minute, and if a node dies, they restart on a surviving node automatically. There is no shared storage, no Ceph, and no third "quorum" box to buy: in a two-node cluster your router is the tiebreaker.

Everything is managed from a password-protected web UI served by every node on port 7443.

What it does​

  • Runs VMs — Linux from the built-in image catalog, or anything from an ISO, including Windows 11.
  • Runs containers — lightweight Linux containers next to your VMs, using a fraction of the memory, so a mini PC fits many more small services. They are protected, replicated and failed over just like VMs.
  • Replicates them — each protected VM has a standby copy on another node, refreshed every minute by default with ZFS. You lose at most the last replication interval of writes in a failover.
  • Fails over on its own — when a node stops answering, a surviving node starts its protected VMs after a takeover delay (35 seconds by default). VMs keep their MAC address, so they come back on the same IP.
  • Prevents split-brain — a node that loses contact with the rest of the cluster stops its own VMs before anyone else starts them, and resets itself if it can't.
  • Handles the day-to-day — consoles, snapshots, clones, live CPU/memory/disk changes, planned moves, maintenance mode, nightly and encrypted offsite backups, alarms by email and SMS, and rolling updates node by node.

How a cluster fits together​

Each node runs the staxmaxd service next to Incus. The nodes heartbeat each other every second over every path they have (the LAN, plus an optional direct cable), share the VM table and settings, and replicate protected VMs to each other. You can sign in to any node; actions on a VM are routed to the node that runs it.

Two nodes is the default and the simple path. Three or more is fully supported: a majority of nodes then decides who keeps running, instead of the router.

Where to go next​