Skip to main content
RunBook Academy

CephCXXI · Storage Architecture Decision-MakingStorage Architecture Decision-Making

What the sixth and seventh hosts buy

Advanced⏱ ~18 minceph

What you'll learn

  • Identify the host count at which backfill replaces hardware repair
  • Apply the placement and healing host counts for erasure coding
  • Promote a failure domain from host to rack safely
  • Use device classes to separate workloads

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 step from three hosts to six changes the recovery mechanism from hardware logistics to backfill, and that is the whole argument.

The self-healing threshold

HostsSize 3 replicatedErasure coding available
3works; a host loss is not repairable2+1 only, also not repairable
4a host loss backfills onto the fourth2+1, repairable
6comfortable headroom4+2 placeable, not repairable
7headroom for two losses4+2 repairable
9rack failure domains become possible6+3 placeable
ceph osd tree
ceph osd crush rule dump
ceph osd erasure-code-profile ls
Recovery time also falls with host count. A failed host on six is rebuilt
from five sources onto five targets; on twelve, from eleven onto eleven.
The parallelism is in both directions.
ceph config set osd osd_max_backfills 2
ceph config set osd osd_recovery_max_active 4
ceph -s | grep -E 'recovery|backfill'

Erasure coding, placed versus healed

ceph osd erasure-code-profile set ec42 k=4 m=2 \
  crush-failure-domain=host crush-device-class=hdd
ceph osd erasure-code-profile get ec42
ceph osd pool create archive erasure ec42
ProfileHosts to placeHosts to heal a host lossRaw per logical TiB
2+1341.50
4+2671.50
6+39101.50
8+311121.38
Size 3 replicated343.00

Promoting the failure domain to rack

ceph osd crush add-bucket rack1 rack
ceph osd crush add-bucket rack2 rack
ceph osd crush add-bucket rack3 rack
ceph osd crush move rack1 root=default
ceph osd crush move ceph-01 rack=rack1
ceph osd crush move ceph-02 rack=rack1
ceph osd crush rule create-replicated by-rack default rack
ceph osd crush tree
ceph osd pool set vms crush_rule by-rack
RequirementValue
Racks needed for size 33
Capacity per rackat least a third of the pool
Hosts per rackenough that a rack loss leaves the pool servable
Data movement on the changelarge; throttle and schedule it

Device classes

ceph osd crush class ls
ceph osd crush class ls-osd nvme
ceph osd crush rule create-replicated fast default host nvme
ceph osd pool set vms crush_rule fast

Quiz

Knowledge check · 4 questions

  1. Q1. A 4+2 erasure-coded pool runs on exactly six hosts. One host fails permanently. What happens?

  2. Q2. Recovery from a host failure completes faster on a twelve-host cluster than on a six-host cluster with the same total capacity.

  3. Q3. Move a populated pool to a rack failure domain.

    A 9-host cluster in three racks holds a 300 TiB replicated pool at 71% utilisation with a host failure domain. The requirement is now to survive a rack loss.

  4. Q4. How many hosts does a 6+3 erasure-coded pool need to place its shards, and how many to heal a host loss?

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

Production discipline

Size erasure-coded pools to k plus m plus one hosts, not k plus m — the difference decides whether a host loss is repaired by backfill or by a technician. Check rack capacity balance before promoting a failure domain; the smallest rack caps the pool, and the movement itself is days of backfill that cannot be cleanly paused part way.

Cross-course references

  • Kubernetes: a scheduler with no spare node cannot reschedule what a node loss evicted
  • Linux: rebuild parallelism scales with the number of surviving members, in both directions