Skip to main content
RunBook Academy

CephCXXII · Small Cluster RisksSmall Cluster Risks

What three and four hosts actually tolerate

Advanced⏱ ~18 mincephcrushtool

What you'll learn

  • State the data tolerance of a given host count
  • Count monitor quorum tolerance independently
  • Explain what the fourth host changes and what it does not
  • Verify the numbers against your own cluster

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 sentence people say is that the cluster tolerates a node failure. The useful question is how many, of what, and whether it heals afterwards.

Data: what one and two hosts down actually do

A size 3, min_size 2 pool serves normally with two copies. Below min_size the PG does not go active, and the client sees I/O hang.

HostsTwo hosts down leaves this share of PGs below min_size
3all of them
4about half
5about three in ten
6about one in five
12about one in twenty-two

The share is the chance that both failed hosts were among the three that a PG mapped to, so it falls quickly with host count and never reaches zero.

ceph osd pool get rbd size
ceph osd pool get rbd min_size
ceph pg ls-by-pool rbd | awk 'NR>1 {print $10}' | sort | uniq -c

Quorum is a separate count

ceph mon stat
ceph quorum_status -f json | python3 -c '
import sys,json
d = json.load(sys.stdin)
n = len(d["monmap"]["mons"])
print("mons %d  quorum needs %d  tolerates %d" % (n, n//2+1, n-(n//2+1)))'
MonitorsMajority neededLosses tolerated
321
431
532
743

On a hyperconverged small cluster the monitors sit on the same chassis as the OSDs, so both counts are consumed by the same failure.

The fourth host changes recovery, not the count

Four hosts still tolerate one simultaneous host loss. What changes is that the loss heals: CRUSH now has a domain that does not already hold a copy, so the cluster returns to three copies without anyone restoring hardware.

ceph osd getcrushmap -o /tmp/cm
crushtool -i /tmp/cm --test --rule 0 --num-rep 3 --show-bad-mappings
crushtool -i /tmp/cm --test --rule 0 --num-rep 4 --show-bad-mappings

The second run reports bad mappings for every PG on a three-host cluster, which is CRUSH stating plainly that the rule cannot produce four distinct hosts from three.

Checking your own numbers

ceph osd crush rule dump | grep -E 'type|op'
ceph osd tree | grep -c '^.* host '
ceph health detail

Quiz

Knowledge check · 4 questions

  1. Q1. Two of six hosts are down on a size=3, min_size=2 cluster. Roughly what share of PGs stops serving I/O?

  2. Q2. Adding a fourth host to a three-host cluster does not increase the number of simultaneous host failures it survives.

  3. Q3. State the fault tolerance of a cluster honestly.

    Four hosts, three monitors placed on three of them, all pools at size 3 and min_size 2. A colleague has written in the design document that the cluster tolerates two node failures.

  4. Q4. Why does adding a fourth monitor not improve fault tolerance?

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

Production discipline

Write the tolerance down as two separate numbers — hosts tolerated for data, and monitors tolerated for quorum — and note whether recovery follows automatically. On a hyperconverged small cluster both numbers are consumed by the same failure, which is the fact most design documents leave out.

Cross-course references

  • Kubernetes: an etcd quorum of three tolerates one member loss for the same reason
  • Linux: majority-based clustering rejects even member counts everywhere it appears