Skip to main content
RunBook Academy

CephC · Upgrade Failure RecoveryUpgrade Failure Recovery

Manager failover during an upgrade

Intermediate⏱ ~17 minceph

What you'll learn

  • Describe what a manager failover interrupts
  • Recognise the expected gap
  • Verify the new active manager
  • Handle a failover that does not complete

Prerequisites

None — start here.

Verified against Ceph Tentacle 20.2.x · Ceph Squid 19.2.x (supported previous) · cephadm matches the verified Ceph release · podman 4.x · csi-rbd and csi-cephfs current · RBD / CephFS / RGW current (matches Ceph release) · Linux kernel 5.15+ (5.10 minimum) · Ubuntu 24.04 LTS (Ceph host baseline) · Debian 12 (Bookworm) (Ceph host baseline) · Rocky Linux / RHEL / AlmaLinux 9.x (Ceph host baseline) · Proxmox VE 9.x (cross-course integration) · Kubernetes 1.31+ (cross-course integration) · 2026-08-18

Not yet marked complete on this device.

Why this matters in production

Every upgrade includes at least one manager failover, and the gap it creates is routinely misread as an upgrade problem.

What a failover interrupts

FunctionDuring failover
Client I/Ounaffected — the manager is not in the data path
ceph -s detailsome fields blank or stale briefly
Prometheus metricsa scrape gap
The dashboardunavailable until the standby serves it
Orchestration commandsmay return errors briefly
PG autoscaling and balancingpauses
The manager is not in the data path. Nothing a client does depends on
it being available.
ceph mgr stat
ceph -s | head -8

The expected gap

ceph mgr stat --format json | python3 -c '
import sys,json
d=json.load(sys.stdin)
print("active:", d.get("active_name"), "available:", d.get("available"))'
Typical failover: a few seconds to tens of seconds for the standby to
become active and populate its state.
Metrics and orchestration return once it has.
Observation during failoverNormal
A gap in Prometheus metricsyes
ceph orch returning “no orchestrator configured” brieflyyes
The dashboard unreachable brieflyyes
ceph -s showing no mgr linebriefly
Client I/O errorsno — investigate separately
The last is the discriminator. Client impact during a manager failover
is not caused by the failover.

Verifying the new active

ceph mgr stat
ceph orch status
ceph mgr module ls --format json | python3 -c '
import sys,json; print(json.load(sys.stdin)["enabled_modules"])'
ceph -s
# and that metrics resumed
curl -sf "http://$(ceph mgr services --format json | python3 -c '
import sys,json; print(json.load(sys.stdin).get("prometheus","").split("//")[-1].rstrip("/"))')/metrics" \
  | head -3
VerifyWhy
An active manager existsthe failover completed
Standbys are presentthe next failover has somewhere to go
Modules loadeda module may fail on the new active
Orchestrator respondingthe upgrade needs it
Metrics scrapingalerting depends on it

A failover that does not complete

ceph mgr stat        # available: false, no active_name
ceph orch ps --daemon-type mgr --refresh
CauseCheck
No standby availableceph orch ps --daemon-type mgr
Every manager failing on a modulethe manager journal
Both managers on hosts that are downceph orch host ls
Manager unable to reach the monitorsconnectivity, cephx
FSID=$(ceph fsid)
journalctl -u "ceph-$FSID@mgr.$(hostname -s)" --since '15 min ago' --no-pager | tail -40
# force a failover if the active is unresponsive but present
ceph mgr fail

Quiz

Knowledge check · 4 questions

  1. Q1. Why does a manager failover produce a gap rather than an instant handover?

  2. Q2. Client I/O errors during a manager failover indicate the failover caused them.

  3. Q3. Assess a manager failover during an upgrade.

    During an upgrade, Prometheus shows a two-minute metrics gap and the dashboard was briefly unreachable. A user separately reports application errors in the same window.

  4. Q4. What should be verified after a manager failover completes?

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

Production discipline

Treat client I/O errors during a manager failover as a separate investigation — the manager is not in the data path, and an OSD restart in the same window is the far more likely cause. Verify modules loaded on the new active; one may fail there even though it worked on the old.

Cross-course references

  • Kubernetes: a controller-manager leader election gap does not affect running pods
  • Linux: correlating an unrelated interruption with an outage sends investigations wrong