Skip to main content
RunBook Academy

CephXC · Scaling OutScaling Out

Manager placement and redundancy

Intermediate⏱ ~16 mincephcephadm

What you'll learn

  • Describe the manager's responsibilities
  • Determine an appropriate manager count
  • Configure placement
  • Handle manager failover

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

The manager handles a great deal that is invisible until it stops: metrics, the dashboard, the orchestrator, and several Ceph operations.

What the manager does

ResponsibilityEffect if unavailable
Prometheus metrics endpointno monitoring data
The dashboardno web interface
ceph orch commandsno orchestration
PG autoscalerno automatic PG adjustment
Balancerno rebalancing
Device health monitoringno SMART collection
rbd_support modulesome RBD operations fail
Progress reportingno ceph progress output
ceph mgr module ls | python3 -c '
import sys,json; d=json.load(sys.stdin)
print("enabled:", d["enabled_modules"])'

Client I/O continues entirely without a manager — the data path does not involve it.

How many to run

ClusterManagers
Small, non-critical2
Production2 or 3
Large, with heavy orchestration use3
More than 3no benefit
One active, the rest standby.
There is no quorum; standbys are simply ready to take over.
ceph mgr stat
ceph mgr dump | python3 -c '
import sys,json; d=json.load(sys.stdin)
print("active:", d["active_name"])
print("standbys:", [s["name"] for s in d["standbys"]])'

Configuring placement

ceph orch apply mgr --placement="label:mgr"
ceph orch host label add ceph-02 mgr
ceph orch ps --daemon-type mgr
Placement guidance:
  on different hosts from each other
  ideally in different failure domains
  co-located with monitors is common and acceptable
  not on hosts under heavy OSD load if avoidable

The last point matters at scale: the metrics endpoint generation is CPU work, and a manager on a saturated OSD host produces slow scrapes.

Failover

The active manager fails
  → the monitors detect it
  → a standby is promoted
  → modules reinitialise
  → the metrics endpoint moves to the new active
ceph mgr fail
ceph mgr stat
During failoverEffect
Metricsa gap until the new active starts serving
Dashboardbriefly unavailable
Orchestrationcommands fail until promotion completes
Client I/Ounaffected
Recovery in progressunaffected

Failover is typically seconds, and the metrics gap is the visible part.

Quiz

Knowledge check · 4 questions

  1. Q1. Why do managers need no quorum while monitors do?

  2. Q2. Client I/O stops when no manager is available.

  3. Q3. Fix a metrics gap during manager failover.

    Ceph metrics disappear entirely for several minutes whenever the active manager fails over. Prometheus targets the manager host by name.

  4. Q4. What stops working when no manager is available?

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

Production discipline

List every manager host as a Prometheus scrape target — the metrics endpoint moves on failover and a single-target configuration loses all Ceph metrics precisely when they matter. Two managers are adequate; manager count is an availability choice with no quorum arithmetic.

Cross-course references

  • Kubernetes: controller manager failover has the same stateless promotion model
  • Linux: active-standby services without shared state fail over trivially