Skip to main content
RunBook Academy

CephXXIV · Replica Failure ScenariosReplica Failure Scenarios

Cascading and correlated failure

Advanced⏱ ~18 minceph

What you'll learn

  • Identify the common sources of failure correlation
  • Explain how a cascade differs from independent failures
  • Design CRUSH failure domains to contain a cascade
  • Recognise cascade risk in an existing cluster layout

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 durability calculation you will read assumes failures are independent. They are not. Disks arrive in batches, sit in the same rack, share a power feed, run the same firmware, and experience the same temperature. The gap between the assumption and reality is where clusters actually die.

Sources of correlation

Shared factorWhat fails together
Power feed / PDUevery OSD on that feed
Rack / top-of-rack switchevery OSD in the rack
Hostevery OSD in the chassis
Disk batch and firmwaredevices of similar age under similar load
Cooling zonedrives sharing a thermal failure
HBA or backplaneevery disk behind that controller

The batch case is the one people miss. Twenty-four drives bought together, installed together, and written to at the same rate reach their wear-out window together. The first failure is a signal about the other twenty-three, not an isolated event.

The cascade shape

A true cascade is worse than simultaneous failure because each step increases the load on the survivors:

  1. One OSD fails; recovery starts
  2. Recovery drives heavy read load across the remaining OSDs
  3. A marginal device, already near failure, fails under that load
  4. Recovery load increases further, on fewer devices
  5. Repeat

The pattern is recognisable: failures arriving in accelerating succession during a recovery, all in the same rack, host, or batch.

Containment with CRUSH

The failure domain is the containment boundary. With failure_domain=host on a size-3 pool, no PG has two replicas on the same host — so losing an entire host takes at most one replica per PG, and every PG stays above min_size.

ceph osd crush rule create-replicated by-host default host
ceph osd crush rule create-replicated by-rack default rack
ceph osd pool set rbd-vms crush_rule by-rack

The rule to internalise: the failure domain must be at least as large as the largest thing that fails at once. If a rack can lose power, the domain must be rack. Three racks minimum for a size-3 pool with failure_domain=rack.

ceph osd tree            # confirm the hierarchy reflects physical reality
ceph osd crush rule dump # confirm rules use the right domain type

Slowing a cascade in progress

If you are watching failures arrive in succession:

# stop the recovery load that is stressing marginal devices
ceph osd set nobackfill
ceph osd set norecover

# keep the cluster from marking more OSDs out
ceph osd set noout

This is a deliberate pause: it stops the load that is triggering further failures, at the cost of leaving the cluster degraded. Use the pause to assess how many devices are marginal, then resume recovery at a much lower rate.

Quiz

Knowledge check · 4 questions

  1. Q1. A size-3 pool uses failure_domain=host across 6 hosts. An entire host loses power. What is the effect on PGs in that pool?

  2. Q2. The first failure in a batch of identically-aged drives is best treated as a signal about the rest of the batch.

  3. Q3. Respond to failures arriving in succession.

    Over 90 minutes, four OSDs have failed on a 60-OSD cluster. All four are in the same rack and were part of the same 24-drive purchase 41 months ago. Recovery is running heavily. The pool is size 3 with failure_domain=host, and the rack contains 5 of the cluster's 12 hosts.

  4. Q4. Why can recovery load itself trigger the next failure in a cascade?

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

Production discipline

Audit ceph osd tree against the physical layout at least annually and after every hardware move; a CRUSH hierarchy that drifted out of sync with reality is a protection you believe you have and do not. Track drive purchase batches in your asset records so the first failure in a batch can trigger a proactive review rather than a surprise.

Cross-course references

  • Kubernetes: pod anti-affinity across zones is the same containment mechanism expressed differently
  • Linux: RAID arrays built entirely from one drive batch have the same well-documented correlated-failure history