Skip to main content

Recovery Plans and Test Failover

Recovery Plans define the procedure for restoring services on a target cluster. The tab lists all existing plans and lets you create new ones.

Recovery Plans tab listing the plan ERP stack from PVE-PROD to PVE-DR with one tier 1 and one tier 2 VM, last test 0 d, the Cleanup pending chip and the Ready status
Each plan shows its sites, its guests per tier, when it was last tested and its state; Cleanup pending means a test environment is still up.

Creating a Recovery Plan​

Click Create Plan to define:

  • Plan name and description
  • Source and target clusters
  • Associated replication jobs -- which replication jobs feed into this plan
  • VM startup order and dependencies

An existing plan is edited from the same form, prefilled. Editing is disabled while the plan is executing, failing back or failed over.

Create Recovery Plan dialog with Plan Name ERP stack, a description, erp-db-01 and erp-app-01 ticked under PVE-PROD to PVE-DR, and Boot Order and Tiers with erp-db-01 in tier 1 and erp-app-01 in tier 2
Pick the replicated guests, then set the boot order and tier of each one: tier 1 starts first.

Recovery Plan Operations​

Each recovery plan supports three operations:

OperationDescription
Test FailoverExecutes the recovery plan on the DR cluster, by default with every network interface shut down. Production workloads are not affected, and the source VMs are left alone. Each recovered VM's console is captured while the test runs. Two options are offered before the run starts, see Test Failover Options. Use this to validate your DR strategy regularly.
FailoverActivates the recovery plan for real. The source VMs are fenced, then the replicas are started on the DR cluster from the chosen restore point. Use this during an actual disaster.
FailbackAvailable once a plan is failed over. It brings the workloads home in two phases: a reverse incremental sync from the DR site to the source, then an operator-driven cutover. See Failback.

When any operation is executed, ProxCenter tracks its progress in real time, polling the execution status every 3 seconds and displaying step-by-step updates. During a real failover and during a failback cutover, each VM also shows the step it is on: Stopping the source VM, Rolling back to the selected restore point, Starting on the DR site, and for the failback cutover Stopping the DR VM, Applying the final delta, Starting on the source site and Re-protecting. The step is shown while the VM is running that step; a VM that has finished shows its result, and a VM that failed shows its error instead.

Test Failover dialog during a run with the Network Isolated chip, both VMs started on pve2-dr at 100 percent, and the checklist Starting VMs done, Letting guests settle with a 33 s countdown, Capturing boot screenshots pending
A test failover reports progress per VM, then a three-step checklist while the guests settle and their consoles are captured.
State diagram of a recovery plan. From the start point the plan is Ready, with its jobs replicating to DR. Test Failover leads to Test failover active, shown with the Cleanup pending chip, during which a second test is refused, and Cleanup test returns the plan to Ready. Failover, the highlighted transition, leads to Failed Over, with its jobs locked and only failback possible; a dashed box under it lists what a real failover does per VM: Stopping the source VM (shutdown, 60 s deadline, hard stop, onboot cleared), Rolling back to the selected restore point, and Starting on the DR site. Failback leads to Failing back, with reverse replication while the DR VMs stay online; Cancel returns it to Failed Over and Cutover returns it to Ready.State diagram of a recovery plan. From the start point the plan is Ready, with its jobs replicating to DR. Test Failover leads to Test failover active, shown with the Cleanup pending chip, during which a second test is refused, and Cleanup test returns the plan to Ready. Failover, the highlighted transition, leads to Failed Over, with its jobs locked and only failback possible; a dashed box under it lists what a real failover does per VM: Stopping the source VM (shutdown, 60 s deadline, hard stop, onboot cleared), Rolling back to the selected restore point, and Starting on the DR site. Failback leads to Failing back, with reverse replication while the DR VMs stay online; Cancel returns it to Failed Over and Cutover returns it to Ready.
What each operation does to a recovery plan. A test always ends with Cleanup test, and a real failover is undone only through a failback.
warning

Failover is a disruptive operation. Ensure the source site is truly unavailable before initiating a production failover, as running the same VMs on both sites simultaneously can cause data corruption.

No step detail on a test failover

A test failover does not report per-VM steps. It reports progress per VM and, in its final phase, a three-step checklist for the console captures: Starting VMs, Letting guests settle and Capturing boot screenshots.

What a Test Failover Does to Replication​

A guest whose replica is under test cannot be replicated onto at the same time: the test runs on the very images the next sync would overwrite. Site Recovery therefore claims the guests of the plan, not the jobs behind them:

  • A job whose guests are all covered by the plan is paused outright for the length of the test, and the cleanup resumes it.
  • A job that also carries guests outside the plan keeps running and skips only the claimed ones. Its other guests keep replicating and their RPO is unaffected.

A claimed guest is reported as Suspended (test in progress) on its row in the job's details, so a row that stops advancing says why instead of merely looking stale. The claim is read off the plan rather than recorded on the job, so the cleanup releases it by clearing the active execution, with nothing to resume.

Why claiming per guest matters most on a tag-based job

A tag-based job routinely covers far more than a plan does, so claiming per guest keeps every other guest it carries protected for the whole length of the test. Claiming per guest is also the only mechanism that can cover a tag-based job at all, since its own VMID list is written at the end of a run and therefore always lags.

A real failover still pauses the jobs unconditionally. It promotes the plan, and nothing skips its guests afterwards.

Diagram of a test failover of the recovery plan ERP stack, which claims its guests erp-db-01 and erp-app-01. Job 1, in VMs mode, carries only erp-db-01, so every guest of the job is in the plan: the whole job shows Paused, and Cleanup test resumes it. Job 2, based on the tag prod, carries erp-app-01, web01 and web02: it keeps running, shows erp-app-01 as Suspended (test in progress), and keeps web01 and web02 Synced, their RPO unaffected. A dashed box below says a real failover pauses every job of the plan, Job 1 and Job 2 alike, since it promotes the plan and nothing skips its guests afterwards.Diagram of a test failover of the recovery plan ERP stack, which claims its guests erp-db-01 and erp-app-01. Job 1, in VMs mode, carries only erp-db-01, so every guest of the job is in the plan: the whole job shows Paused, and Cleanup test resumes it. Job 2, based on the tag prod, carries erp-app-01, web01 and web02: it keeps running, shows erp-app-01 as Suspended (test in progress), and keeps web01 and web02 Synced, their RPO unaffected. A dashed box below says a real failover pauses every job of the plan, Job 1 and Job 2 alike, since it promotes the plan and nothing skips its guests afterwards.
A test claims the plan's guests, not whole jobs: a job that also protects other guests keeps replicating them during the test. A real failover pauses every job of the plan.

Restore Points​

By default a failover boots each VM from the latest replicated state. Both Test Failover and Failover let you pick an older point instead, per VM, from a Choose the restore point selector on each VM row of the dialog. The default entry is Latest (default); the other entries are the replicated snapshots that still exist on the DR side, newest first, shown with their timestamp.

The list is read from the live state of the DR cluster each time the dialog opens, and only snapshots present on every disk of a VM are offered, so a partially failed sync cannot boot a torn VM. A VM with nothing to offer shows No restore points. When the list cannot be read at all, the dialog says "Restore points could not be loaded, the latest replicated state will be used." and runs on the latest state.

Execute Failover dialog with an older restore point selected for erp-db-01, the warning that failing over to an older restore point permanently deletes the newer DR snapshots, and the plan name typed in the confirmation field
On a real failover, an older restore point is destructive: the dialog says so before you type the plan name to confirm.
An older restore point is destructive on a real failover

Choosing an older point on a real failover re-bases the DR image: "Failing over to an older restore point permanently deletes the newer DR snapshots of that VM." The dialog shows that warning as soon as you select a point. A test failover does not re-base, and its cleanup rolls the image forward again, so testing an older point costs you nothing.

Test Failover Options​

The Test Failover dialog carries two settings, in a panel above the VM list. They are editable until you press the button that starts the run, and they apply to that run only: nothing is stored on the plan.

Test Failover dialog with Network isolation on, Boot screenshot delay at 90 s, and the restore point list of erp-db-01 opened with Latest (default) and the timestamps of the kept snapshots
Keep network isolation on, raise the screenshot delay for slow guests, and pick a restore point per VM if you do not want the latest.
OptionDefaultWhat it does
Network isolationOnEvery network interface of every recovered VM gets link_down=1 before the VM is started, so the replica boots with its cards administratively down. The interfaces themselves are kept, so nothing about the guest's networking is lost, and the flag disappears on its own at the next sync, which rewrites the replica configuration from the source.
Boot screenshot delay45 sHow long ProxCenter waits after the last VM has started before capturing the consoles. Accepts a whole number of seconds between 5 and 600.

Turning network isolation off. The switch is labelled "DR VMs boot with every network interface shut down. Turn it off to test with the interfaces connected to the mapped target bridges." Turning it off raises a warning in the dialog, on the spot:

Test Failover dialog with Network isolation turned off and the warning that the DR VMs will boot with their production addresses on the mapped target bridges
With isolation off, the dialog warns that the replicas come up with their production addresses.
Address collision

"The DR VMs will boot with their production addresses on the mapped target bridges. Only run this where the DR site is not bridged to production, otherwise addresses will collide."

A replica carries the source guest's network configuration verbatim, MAC address and bridge name included, so it comes up on the DR cluster's bridge of that name with the production addresses of the guest it copies. If that bridge reaches the production network, two machines with the same address land on the same wire. Run a connected test only on a DR site that is genuinely separated from production, and use it for what isolation cannot answer: whether the application actually serves, not merely whether the guest reaches a login prompt.

Once the run has started, the option it used is no longer editable but stays visible: a chip on the dialog reads Network Isolated or Network connected, so an execution you come back to never leaves you guessing which mode it ran in.

Choosing a delay. 45 seconds is enough for a guest that reaches a login prompt quickly, and too short for a large Windows guest or anything that runs filesystem checks at boot: those get photographed mid-boot. Raise the delay to whatever your slowest guest in the plan needs. The value applies to the whole pass, not per VM, since the wait happens once after all the VMs have started. An empty field, a decimal, or a value outside the 5 to 600 range is refused and the run is blocked until you fix it.

A real failover is never network isolated and takes no such options: it starts the replicas with their interfaces connected, which is the point.

Boot Screenshots on a Test Failover​

During a test failover, ProxCenter captures the console of each recovered VM and keeps the image with the execution, so you can see what a guest actually booted into instead of trusting a power state. The capture itself is automatic: there is no switch to turn it on, only the delay described above.

The capture pass runs once, after every VM of the plan has been started. ProxCenter waits for the boot screenshot delay of that execution, 45 seconds unless you changed it, then takes exactly one capture per VM. The dialog shows the wait as a countdown next to Letting guests settle, and the countdown follows the delay you chose.

The captures appear as small thumbnails in two places, both on the Recovery Plans tab: under the corresponding test execution in the plan's Execution History, and as a camera button on each VM row of the test failover dialog, labelled View boot screenshot. Clicking a thumbnail opens the full-size image with the VM name and the time it was captured.

Full-size boot screenshot viewer for erp-db-01 with its capture time, showing the guest console at the Proxmox boot screen
Click a thumbnail to open the capture full size, with the VM name and the time it was taken.
What can prevent a capture

Captures need the orchestrator and SSH access to the DR cluster, they only work for QEMU virtual machines, and they need a guest with an emulated display: a serial-console-only guest produces nothing. A capture that does not succeed is skipped silently. It does not fail the test and it produces no error message, so the only sign is a missing thumbnail. A capture is also only attempted when at least one VM of the plan actually reached a completed state.

Captures survive the test cleanup

Running Cleanup test does not delete the captures: they are kept as the archived evidence of the test. They are removed only when you clear the plan's execution history or delete the plan itself.

Source Fencing on a Real Failover​

A real failover fences each source VM before starting its replica, so the same guest cannot end up running on both sides. Fencing means, in order: a graceful shutdown request with a 60 second deadline, a hard stop if the guest has not stopped by then, and finally clearing onboot in the source VM's configuration so a recovering source site cannot boot the guest back into a split brain. This is unconditional on a real failover and never happens on a test failover. There is no option to turn it off.

Fencing is best effort on a real failover

A real failover is a disaster procedure, so it does not stop when fencing cannot be carried out. If the source cluster is unreachable, fencing is skipped for the whole failover and the DR replicas are started anyway; the orchestrator log records that it skipped it. Treat fencing as a safety net that usually works, not as a guarantee: if the source site is only partly down, confirm the source guests really are stopped before you let the site come back.

Locked After a Failover​

Once a plan is failed over, ProxCenter locks it and its replication jobs so nothing can overwrite the copy that is now production. The plan carries a Failed Over status and the tooltip "Plan is failed over -- only failback is possible.", with Test Failover and Failover disabled. Each replication job of that plan carries a Failed over chip, and its tooltip explains that the job's DR copy is now production and that resuming replication would overwrite it, so a failback has to come first. Sync Now, Resume and Edit are disabled on that job. Deleting is still allowed.

The lock is released per job by the failback, once every VM of that job has completed its cutover.

Test Cleanup​

After running a test failover, use the Cleanup test action to tear down the test environment and release resources on the target cluster. This ensures that test artifacts do not consume storage or interfere with future tests. While a test is awaiting cleanup, the plan row shows a Cleanup pending chip, a second test failover is refused with "A test failover is already active for this plan. Clean it up first.", and reopening the dialog shows a banner naming the date the pending test was started.

Test Failover dialog of the plan ERP stack with the Network Isolated chip, erp-db-01 cleaned up and erp-app-01 still in progress on pve2-dr, and the panel Cleanup in progress, 1 of 2 guests cleaned up, 1 VM(s) stopped
Cleanup test handles the guests one after another and counts them as it goes.
A cleanup that did not finish says so

The dialog reads the orchestrator's own verdict, not the absence of errors. A cleanup cut off halfway comes back as Cleanup did not complete, with "The cleanup could not be completed, the DR guests may still be running on the replica images", and it keeps its retry button until everything really is cleaned. Only a run the orchestrator reports as complete shows Cleanup completed. Press retry until it does: an unfinished cleanup means DR guests are still up on the replica images, and replication is about to resume onto them.

Test Failover dialog of the plan ERP stack after the cleanup, with both guests ticked and the green panel Cleanup completed: 2 of 2 guests cleaned up, 2 VM(s) stopped, clones destroyed, configuration restored, 1 replication job(s) resumed
Only a cleanup the orchestrator reports as finished reads Cleanup completed, with what it stopped, destroyed and resumed.

A cleanup handles the guests one after another, around twenty seconds each for a single-disk guest, and is given 55 seconds per attempt. That budget sits deliberately under the 60 second read timeout a packaged install's reverse proxy applies, so an expiry comes back as a ProxCenter error you can act on rather than as a proxy error page. A plan of several guests may therefore need more than one pass, which is what the retry button is for.

DR replicas are not enrolled in automatic HA either. A replica reaches its target cluster as a brand new guest, and handing it to the cluster resource manager in the started state would override the onboot: 0 its configuration carries on purpose and undo every stop the cleanup issues.

Execution History​

Select a recovery plan to view its execution history -- a chronological list of all test, failover, and failback operations with their outcomes, timestamps, and any errors encountered. Test executions also show their boot screenshot thumbnails.

Plan details for ERP stack with the protected VMs by tier, the Execution History holding a completed test with two boot screenshot thumbnails, and the Delete, Edit plan, Failback, Test Failover (disabled), Cleanup test and Failover actions
The plan details list the guests by tier and every past execution; while a test is up, Test Failover is disabled until you run Cleanup test.

A Clear history action removes the past executions of the plan. It asks for confirmation first, because "Boot screenshots are deleted with them."; the active test execution is kept.