Skip to main content
RunBook Academy

Proxmox VEXIV · Disaster RecoveryDR fundamentals

RPO, RTO, and dependency modelling

Intermediate⏱ ~22 min

What you'll learn

  • Translate business RPO/RTO into technical targets
  • Map application dependencies
  • Identify recovery order constraints
  • Build a DR plan that survives the people who wrote it

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

DR plans fail because they assume dependencies that don’t exist, ignore the people who must execute them, or optimise the wrong axis. This lesson teaches the discipline.

Definitions

  • RPO (Recovery Point Objective): the maximum acceptable data loss in time.
  • RTO (Recovery Time Objective): the maximum acceptable downtime.
  • MTTR (Mean Time To Recover): how long recovery actually takes in practice.
  • MTBF (Mean Time Between Failures): how often the system fails.

The first two are targets. The last two are measurements. Plan with the targets; verify with the measurements.

Per-system targets

SystemRPORTO
Customer-facing primary database5 min15 min
Customer-facing API15 min30 min
Internal tools4 h8 h
Dev environment24 h48 h

Writing an RTO that has arithmetic behind it

An RTO with no computation behind it is a wish, and it is usually optimistic by a factor of two. The computation is not difficult; it is just rarely done.

Read-only / Safethe recovery-time model - fill in your own measured numbers
set -euo pipefail

GUEST_GIB=512          # data to be written back
THROUGHPUT_MIBPS=110   # MEASURED restore throughput, not link speed
DETECT_MIN=10          # monitoring notices, someone is paged
DECIDE_MIN=15          # confirm, escalate, authorise
BOOT_MIN=4             # guest boots and services start
VERIFY_MIN=10          # someone confirms the service actually works

TRANSFER_MIN=$(( GUEST_GIB * 1024 / THROUGHPUT_MIBPS / 60 ))
TOTAL_MIN=$(( DETECT_MIN + DECIDE_MIN + TRANSFER_MIN + BOOT_MIN + VERIFY_MIN ))

printf 'transfer  %4d min\n' "$TRANSFER_MIN"
printf 'non-transfer %d min\n' "$(( TOTAL_MIN - TRANSFER_MIN ))"
printf 'total RTO %4d min  (%d h %02d m)\n' \
"$TOTAL_MIN" "$((TOTAL_MIN/60))" "$((TOTAL_MIN%60))"

Three observations that change how people write RTOs, and all three come out of that script rather than out of an opinion:

Throughput is not link speed. A restore reads chunks from the datastore, decompresses and decrypts them, and writes them to the destination storage. Any of those can be the constraint. Measure it once and record it; the detail is in live restore and the RTO arithmetic.

The non-transfer terms are large and nobody budgets them. Detection, decision and verification here total 35 minutes - and on a small guest they dominate completely. An organisation whose bottleneck is finding someone authorised to say yes does not get faster by buying more bandwidth.

Parallel restores do not scale. Twenty guests restoring at once share one datastore read path and one link. A DR plan that assumes twenty simultaneous full-speed restores assumes twenty times the bandwidth you have, which is why recovery order is a real design artefact and not a formality.

Dependency mapping

Every system depends on others:

flowchart TB
  DNS[DNS] --> APP[Application]
  IDM[Identity] --> APP
  DB[(Database)] --> APP
  APP --> LB[Load balancer]
  LB --> USER[End users]
  APP --> LOG[Log aggregator]
  LOG --> MON[Monitoring]

A complete dependency map identifies:

  • Hard dependencies: the system cannot function without them.
  • Soft dependencies: the system degrades but works.
  • Recovery order: what must come up first, second, etc.

The dependency map is the DR plan’s foundation. Without it, you cannot sequence recovery.

Recovery order

A typical recovery order:

  1. Network and DNS (external resolution).
  2. Identity (LDAP / Active Directory).
  3. Database servers.
  4. Application servers (in dependency order).
  5. Load balancers / API gateways.
  6. Monitoring (so you can see what works).
  7. Internal tools.
  8. End-user-facing systems.

Time budgets

For each phase of recovery, set time budgets:

PhaseTarget
Disaster declaration → restore plan< 30 min
Network + DNS restored< 1 h
Identity restored< 2 h
Database restored< 4 h
Application restored< 8 h
All services restored< 24 h

If a phase exceeds budget, escalate.

Production considerations

Common mistakes

  • Single RPO/RTO for the entire cluster.
  • Ignoring soft dependencies.
  • Not budgeting time per phase.

Key takeaways

  • Per-system RPO/RTO, not cluster-wide.
  • Dependency maps are the foundation of DR.
  • Rehearse quarterly.

Knowledge check

Knowledge check · 5 questions

  1. Q1. What bounds RPO?

  2. Q2. A single cluster-wide RPO is sufficient.

  3. Q3. Which system typically comes up first in a DR recovery?

  4. Q4. A team backs up nightly and syncs to the DR site hourly. To improve the RPO they change the sync to every 15 minutes. What is the effect?

  5. Q5. Which are true of the non-transfer components of an RTO? Select all that apply.

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