Skip to main content
RunBook Academy

CephCXII · OSD Host LossOSD Host Loss

How the cluster learns a host is gone

Intermediate⏱ ~18 minceph

What you'll learn

  • Trace how an OSD is marked down
  • Distinguish the down state from the out state
  • Read the degraded object accounting
  • Identify which client I/O is actually blocked

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 first minute after a host disappears determines what you are allowed to do next, and almost every wrong decision comes from misreading it.

Detection

OSDs heartbeat their peers, not the monitors. A monitor marks an OSD down only when enough other OSDs say so, and the threshold has a topology condition attached to it.

ceph config get osd  osd_heartbeat_interval          # 6
ceph config get osd  osd_heartbeat_grace             # 20
ceph config get mon  mon_osd_min_down_reporters      # 2
ceph config get mon  mon_osd_reporter_subtree_level  # host
ceph config get mon  mon_osd_report_timeout          # 900
SettingEffect
osd_heartbeat_intervalhow often peers ping each other
osd_heartbeat_gracesilence tolerated before a peer files a report
mon_osd_min_down_reportersreports needed to act
mon_osd_reporter_subtree_levelreports must come from distinct buckets at this level
mon_osd_report_timeoutthe monitor marks an OSD down unilaterally after this long with no contact
ceph osd tree down
ceph health detail | grep -E 'OSD_DOWN|OSD_HOST_DOWN|PG_DEGRADED'
ID  CLASS  WEIGHT    TYPE NAME             STATUS
-7         87.31982  host ceph-osd-07
18   ssd    7.27664      osd.18             down
19   ssd    7.27664      osd.19             down
20   ssd    7.27664      osd.20             down

Down is not out

ceph osd dump | grep -E '^osd[.](18|19|20) '
StateMeaningEffect on placement
up, inservingnormal
down, innot serving, still mappedPGs degraded; no data moves
down, outnot serving, unmappedPGs remap; backfill starts
up, outserving but unmappeddrains only
While the OSDs are down and in, the cluster is waiting. Nothing is being
copied and nothing is being lost. That window is the whole decision.

Reading the accounting

ceph -s
ceph pg stat
  data:
    pools:   9 pools, 4097 pgs
    objects: 41.20M objects, 137 TiB
    pgs:     3721 active+clean
             376  active+undersized+degraded
    degraded: 3.71M/123.60M objects degraded (3.001%)
CounterQuestion it answers
degraded objectshow many copies are missing
active+undersizedPGs serving with a short acting set
peered without activePGs below min_size, not serving
undersized PG countthe blast radius of a second failure

Which I/O is blocked

ceph pg dump_stuck inactive
ceph health detail | grep -E 'PG_AVAILABILITY|SLOW_OPS'
# a degraded PG still serves; a peered one does not
ceph pg ls degraded | head -5
ceph pg ls peered  | head -5

Quiz

Knowledge check · 4 questions

  1. Q1. What must be true before monitors mark an OSD down on peer reports?

  2. Q2. Monitors detect a failed OSD by heartbeating it directly.

  3. Q3. Triage the first minutes of a host loss.

    A 12-host cluster loses contact with ceph-osd-07 and its 12 OSDs. Health shows 376 PGs active+undersized+degraded and 3% of objects degraded.

  4. Q4. What does an OSD in the down and in state mean for data placement?

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

Production discipline

Read ceph osd tree down before anything else — a failure confined to one host bucket is a different problem from OSDs scattered across hosts. Separate the degraded count from the inactive count; degraded means the cluster is waiting, inactive means users are already affected.

Cross-course references

  • Kubernetes: node NotReady is a report from the kubelet, not an observation by the API server
  • Linux: agreement between two interfaces on one machine is one opinion, not two