CephXCVII · Network MaintenanceNetwork Maintenance
Switch maintenance with redundant uplinks
What you'll learn
- Verify link redundancy before relying on it
- Sequence a switch maintenance
- Monitor during it
- Recognise when redundancy is not sufficient
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 redundant fabric is only redundant if the redundancy has been verified, and switch maintenance is where an untested assumption becomes an outage.
Verifying the redundancy first
# on every Ceph host: which members does the bond have, and are both up?
cat /proc/net/bonding/bond0 | grep -E 'Slave Interface|MII Status|Speed'
# and which switch is each connected to
lldpctl 2>/dev/null | grep -E 'Interface|SysName'
The check that matters:
each bond has members on both switches
both members are up
the surviving member alone can carry the load
# the last is the one usually untested
sar -n DEV 1 30 | awk '/bond0/ {rx+=$5; tx+=$6; n++} END {print (rx+tx)/n*8/1000000, "Mb/s average"}'
ethtool bond0 | grep Speed
If normal traffic exceeds a single member’s capacity, the maintenance produces congestion regardless of the link staying up.
Testing before committing
# take one member down deliberately, in a controlled way
ip link set eth0 down
# and observe
ceph -s
watch -n 5 'ceph -s | grep -E "osds|health"'
sar -n DEV 1 10
ip link set eth0 up
Doing this on one host first establishes whether the failover works before a whole switch is taken out.
Sequencing the maintenance
1. verify the cluster is HEALTH_OK
2. verify every host's bond has both members up
3. test failover on one host
4. set noout if the maintenance risks OSDs being marked down
5. take the switch out
6. monitor throughout
7. return the switch
8. verify every bond has both members up again
ceph -s | grep HEALTH_OK
ceph osd set noout
# switch maintenance
ceph osd unset noout
noout is prudent even with working redundancy: a brief packet loss
during a failover can cause OSDs to be marked down.
Monitoring during it
watch -n 5 'ceph -s | grep -E "osds|health|slow"'
| Signal | Expected | Problem |
|---|---|---|
| OSDs down | none | any |
| Slow ops | none or brief | growing |
| Bond member count | reduced by one per host | more |
| Throughput | within a single member’s capacity | saturated |
| Health | HEALTH_OK or a flags warning | anything else |
When redundancy is not sufficient
| Situation | Consequence |
|---|---|
| Normal traffic exceeds one member’s capacity | congestion during the window |
| Bonds with both members on the same switch | complete loss for those hosts |
| Some hosts single-homed | those hosts lose connectivity |
| The switches are not MLAG peers | the bond may not survive |
| Recovery running | the reduced capacity extends it |
# find single-homed hosts
for h in $(ceph orch host ls --format json | python3 -c \
'import sys,json;[print(x["hostname"]) for x in json.load(sys.stdin)]'); do
printf '%-14s ' "$h"
ssh "$h" 'grep -c "Slave Interface" /proc/net/bonding/bond0 2>/dev/null || echo 0'
done
Quiz
Knowledge check · 4 questions
Q1. Why set `noout` during switch maintenance even with working link redundancy?
Q2. A bond with both members up means a switch can be taken out without impact.
Q3. Plan a switch maintenance.
One of two top-of-rack switches needs a firmware upgrade. Ceph hosts have 2×25 GbE LACP bonds. Normal cluster network traffic peaks at 30 Gb/s per host.
Q4. What should be verified before relying on link redundancy for a switch maintenance?
Passing score: 75%. Answers are checked in this browser.
Production discipline
Measure actual traffic against a single bond member’s capacity before a
switch maintenance — links staying up while every host is congested is the
failure mode that redundancy does not prevent. Set noout regardless;
LACP convergence can lose enough heartbeats to trigger a down-marking.
Cross-course references
- Kubernetes: verifying node redundancy actually absorbs the load before relying on it
- Linux: untested redundancy is an assumption, not a property