Skip to main content
RunBook Academy

CephCXVI · Network PartitionNetwork Partition

Which network partitioned, and how the symptoms differ

Advanced⏱ ~18 mincephss

What you'll learn

  • Map each Ceph traffic class to the network that carries it
  • Read front and back heartbeat failures from logs and health checks
  • Distinguish a public-network split from a cluster-network split by symptom
  • Verify the addresses actually in use before testing a path

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

A cluster with a separate cluster network has two independent things that can partition, and they present differently enough that the symptom alone tells you which cable to chase. Getting it wrong sends the network team to the correct rack and the wrong switch.

What rides on each network

TrafficPublicCluster
Client to monitoryesno
Client to OSDyesno
OSD to monitoryesno
OSD to OSD replication and recoverynoyes
OSD heartbeat, frontyesno
OSD heartbeat, backnoyes
MGR, MDS, RGWyesno
ceph config get osd public_network
ceph config get osd cluster_network

If cluster_network is unset, everything is on the public network and there is only one thing to partition — which is a simpler cluster to reason about and a defensible design choice.

Reading front and back from the evidence

ceph health detail
ceph daemon osd.7 dump_osd_network 0
grep heartbeat_check /var/log/ceph/$FSID/ceph-osd.7.log | tail -5
osd.7 heartbeat_check: no reply from 10.30.4.11:6803 osd.42 ever on either
  front or back, first ping sent 2026-08-18T09:13:38 (oldest deadline
  2026-08-18T09:13:58)
osd.7 heartbeat_check: no reply from 10.30.4.11:6803 osd.42 since back
  2026-08-18T09:13:38 front 2026-08-18T09:14:11

The wording is the diagnosis. either front or back means both paths are gone. A message naming only back, with a recent front timestamp, means the public path is fine and the cluster network is not. The health checks OSD_SLOW_PING_TIME_FRONT and OSD_SLOW_PING_TIME_BACK make the same distinction for degradation short of total loss.

The two signatures

SymptomPublic splitCluster split
Client connectsfails or times outsucceeds
Client readsfail on the isolated sidesucceed from the primary
Client writesfail on the isolated sideconnect, then hang
Monitors reachable from far OSDsnoyes
OSDs marked downyesyes
Marked-down OSDs contest itnoyes, loudly
Dashboard and MGR viewblind to the far sidecomplete

A cluster-network split is the more confusing of the two precisely because everything answers. Clients connect, monitors are healthy, the dashboard is fully populated — and writes hang, because a primary cannot replicate to an acting set member it can no longer reach.

Verifying the path before you test it

ceph osd metadata 42 | grep -E 'front_addr|back_addr|hb_front_addr|hb_back_addr'
# then test that exact address and port from the peer, in both directions
ss -tn state established '( dport = :6802 or dport = :6803 )'

Testing the address you assume an OSD uses, rather than the one it reports, is how a cluster network with a mis-set subnet survives an entire diagnostic session undetected.

Quiz

Knowledge check · 4 questions

  1. Q1. Clients connect normally and monitors are quorate, but writes to certain pools hang. Which split does this fit?

  2. Q2. An OSD can be correctly marked down while it is fully reachable on the public network and answering commands from its own host.

  3. Q3. Localise a partition to one of two networks.

    Eight OSDs across two hosts are down. The hosts respond to SSH, `ceph -s` runs fine from them, and their OSD logs show heartbeat_check messages naming only back.

  4. Q4. What does a heartbeat_check message naming only back, with a recent front timestamp, tell you?

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

Production discipline

Read the heartbeat message wording before testing anything — front, back, or both is the fastest localisation you will get, and it costs one grep. Take the addresses to test from ceph osd metadata rather than from the configuration you believe is in force, because a cluster network bound to an unexpected subnet passes every test aimed at the expected one.

Cross-course references

  • Kubernetes: control-plane reachability and data-plane reachability fail independently and present differently
  • Linux: a bonded interface can pass one traffic class and drop another for hours