CephXXX · Network Failure BehaviourNetwork Failure Behaviour
Bond member failure versus bond failure
What you'll learn
- Distinguish member failure from complete bond failure
- Detect a degraded bond that nothing else reports
- Assess the capacity impact of a degraded bond
- Build monitoring that catches the silent case
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
Why this matters in production
A degraded bond is the most under-monitored failure in a typical Ceph deployment. Ceph does not see it, host reachability checks do not see it, and the only symptom is that one host is quietly slower than its peers — which is easy to attribute to almost anything else.
The two cases
One member fails. The bond continues on the remaining member.
- Host reachable, OSDs up, no Ceph events
- Throughput halved for that host
- Redundancy gone — the next failure takes the host offline
- Nothing alerts
All members fail. The bond goes down.
- Host unreachable on that network
- OSDs marked down within the heartbeat grace period
- Recovery begins after the down-out interval
- Very visible
Detecting the silent case
cat /proc/net/bonding/bond0
Slave Interface: ens1f0
MII Status: up
Speed: 25000 Mbps
Slave Interface: ens1f1
MII Status: down ← this line
Speed: Unknown
For monitoring, the useful checks are:
# member count that is actually up
grep -c 'MII Status: up' /proc/net/bonding/bond0
# negotiated speed per member
for i in ens1f0 ens1f1; do
echo -n "$i: "; ethtool "$i" | awk -F': ' '/Speed/{print $2}'
done
# carrier changes, which reveal flapping members
ip -s -d link show ens1f1 | grep -A1 'link/ether'
Alert on the up-member count dropping below the configured member count. It is a single number and it catches the case nothing else does.
The capacity consequence
A host on half its network capacity affects more than itself: it is slower to accept replication, so writes to any PG it participates in are slower, and with a few hundred PGs per OSD that is a substantial share of the pool.
ceph osd perf | sort -k2 -n | tail
The signature is every OSD on one host being uniformly somewhat elevated, with no single device standing out — which is exactly what a host-level network constraint looks like.
Quiz
Knowledge check · 4 questions
Q1. One member of a two-member LACP bond fails on an OSD host. What does Ceph report?
Q2. Restoring a failed bond member deserves the same urgency as replacing a failed disk, even though halved throughput is the only visible effect.
Q3. Build detection for a failure nothing currently catches.
A post-incident review finds that a bond member had been down for six weeks on one OSD host before anyone noticed, during which time that host ran at half network capacity and had no redundancy. Nothing in the monitoring stack reported it.
Q4. Why is link-layer redundancy deliberately invisible to Ceph?
Passing score: 75%. Answers are checked in this browser.
Production discipline
Add bond member count and per-member negotiated speed to host monitoring on every Ceph node; it is a few lines of check and closes a gap that nothing else covers. Treat a degraded bond with disk-replacement urgency, because the host is running without network redundancy until it is fixed.
Cross-course references
- Kubernetes: node-level degradation invisible to the scheduler needs host-layer monitoring the same way
- Linux: multipath and bonding both require monitoring at their own layer for exactly this reason