Skip to main content
RunBook Academy

CephXCVII · Network MaintenanceNetwork Maintenance

Switch maintenance with redundant uplinks

Advanced⏱ ~18 mincephipiperf3ethtool

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

Not yet marked complete on this device.

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"'
SignalExpectedProblem
OSDs downnoneany
Slow opsnone or briefgrowing
Bond member countreduced by one per hostmore
Throughputwithin a single member’s capacitysaturated
HealthHEALTH_OK or a flags warninganything else

When redundancy is not sufficient

SituationConsequence
Normal traffic exceeds one member’s capacitycongestion during the window
Bonds with both members on the same switchcomplete loss for those hosts
Some hosts single-homedthose hosts lose connectivity
The switches are not MLAG peersthe bond may not survive
Recovery runningthe 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

  1. Q1. Why set `noout` during switch maintenance even with working link redundancy?

  2. Q2. A bond with both members up means a switch can be taken out without impact.

  3. 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.

  4. 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