Skip to main content
RunBook Academy

CephCXVI · Network PartitionNetwork Partition

Reconstructing the partition from evidence

Intermediate⏱ ~17 mincephjournalctl

What you'll learn

  • State the questions a partition post-mortem must answer
  • Collect the timeline from cluster and daemon evidence
  • Correlate two sides whose clocks disagreed
  • Convert findings into specific configuration changes

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 evidence that explains a partition ages out of logs on a schedule nobody chose, and the number stakeholders actually want — how long data was unavailable — is not in any dashboard. Both have to be extracted while the cluster still remembers.

The five questions

QuestionWhere the answer lives
When did the path failfirst heartbeat_check timestamp, OSD logs
Which side held quorummonitor election entries in the cluster log
Which OSDs went down, and whenOSDMap epoch changes, cluster log
How long was any PG inactivePG_AVAILABILITY appearance and clearance
How long did recovery takedegraded count reaching zero

The fourth is the customer-visible outage. The others explain it.

Collecting it before it rotates

ceph log last 20000 info cluster > /secure/incident/cluster.log
ceph crash ls
ceph report > /secure/incident/report.json
journalctl -u ceph-$FSID@mon.ceph-mon-a.service --since '2026-08-18 09:00' \
  > /secure/incident/mon-a.log
journalctl -u ceph-$FSID@osd.42.service --since '2026-08-18 09:00' \
  > /secure/incident/osd-42.log

ceph report captures the current OSDMap, monmap, and PG summary in one JSON document — worth taking even when you think you will not need it, because it is the only artefact that stops being reproducible.

Reading the monitor side

2026-08-18T09:13:59 mon.ceph-mon-a calling monitor election
2026-08-18T09:14:04 mon.ceph-mon-a is new leader, mons ceph-mon-a,ceph-mon-b
                    in quorum (ranks 0,1)
2026-08-18T09:14:22 osdmap e91846: 36 total, 24 up, 36 in
2026-08-18T09:24:23 osdmap e91903: 36 total, 24 up, 24 in

The election entry establishes which side was authoritative and from what moment. The 36 in becoming 24 in ten minutes later is the out interval firing, and it is the line that explains the size of the recovery.

Correlating across a clock boundary

Two sides of a partition may not agree on the time, and if the isolated side lost its NTP source the drift grows for the length of the outage.

chronyc tracking
chronyc sources -v

Anchor both sides to the OSDMap epoch sequence instead. Epochs are globally ordered and assigned by the quorum, so an event on the isolated side that references epoch 91846 provably happened after the quorum side committed it, regardless of what either host’s clock says.

Turning it into changes

FindingChange
noout never setadd it as step one of the partition runbook
Monitors share a failure domainredistribute the monmap
Even monitor countmove to an odd count
Recovery starved clientsset an osd_mclock_profile policy in advance
Flap ran uncheckeddocument nodown with an owner and expiry
Nobody knew which side had quorumput ceph mon stat first in the runbook

Quiz

Knowledge check · 4 questions

  1. Q1. Which artefact should be captured first after a partition, because it stops being reproducible?

  2. Q2. OSDMap epochs order events across the two sides of a partition more reliably than log timestamps do.

  3. Q3. Produce a post-mortem timeline for a partition that has just resolved.

    A 40-minute rack isolation ended two hours ago. Recovery is complete. The incident review is tomorrow and asks for the duration of data unavailability.

  4. Q4. Why is the isolated side's log a poor basis for the incident timeline?

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

Production discipline

Capture ceph report, the cluster log, and the per-daemon journals before you leave the incident — they are the only artefacts that stop being reproducible. Report unavailability from the PG_AVAILABILITY window rather than from alert timestamps, and anchor any cross-side ordering to OSDMap epochs, because a partition is exactly the event that breaks clock agreement.

Cross-course references

  • Kubernetes: event objects expire on a TTL and are gone before the review meeting
  • Linux: journald rotation is sized, not time-bounded, so a chatty incident evicts its own evidence