CephXXIX · Network DesignNetwork Design
LACP in detail: modes, rate, and hashing
What you'll learn
- Distinguish active and passive LACP modes
- Choose an LACP rate and explain the trade-off
- Select a hash policy for Ceph traffic
- Verify LACP state from host and switch
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
LACP that is misconfigured on one end frequently appears to work — the links come up, traffic flows, and the failure only shows during a member failure or under uneven load. Verifying the three settings from both ends takes a few minutes and prevents a category of intermittent problem that is genuinely hard to diagnose later.
Active versus passive
Active — the end sends LACPDUs proactively and initiates negotiation. Passive — responds to LACPDUs but does not initiate.
Two passive ends never form an aggregation. The safe configuration is active on both ends; passive is only appropriate when one side is known to be active and there is a reason to avoid initiating.
LACP rate
| Rate | LACPDU interval | Failure detection |
|---|---|---|
slow (default) | 30 s | up to 90 s |
fast | 1 s | about 3 s |
Ninety seconds is far longer than Ceph’s OSD-down detection, so a member
failure on slow rate can cause OSDs to be marked down before the bond
notices. Use fast on Ceph hosts, and set it on the switch too — the rate
is negotiated and both ends should agree.
Hash policy
| Policy | Hashes on | Ceph suitability |
|---|---|---|
layer2 | MAC addresses | poor — pins host pairs to one member |
layer2+3 | MAC + IP | poor within a subnet |
layer3+4 | IP + port | good — spreads per-connection |
Ceph OSDs open many connections to each peer, so layer3+4 distributes
them well. Within a single subnet — the usual Ceph case — layer2 and
layer2+3 produce the same poor result, because both ends have fixed MACs
and IPs and only the ports vary.
cat /proc/net/bonding/bond0 | grep -E 'Transmit Hash|LACP rate|Aggregator'
Verifying from both ends
Host side:
cat /proc/net/bonding/bond0
# Bonding Mode: IEEE 802.3ad Dynamic link aggregation
# Transmit Hash Policy: layer3+4 (1)
# LACP rate: fast
# Aggregator ID: 1 ← both members must share this
Both members sharing an Aggregator ID is the key check. Different aggregator IDs mean the bond has split — each member formed its own aggregation, usually because the switch ports are not in the same port-channel.
Switch side: confirm the port-channel contains both ports, is in active mode, and uses a compatible hash. The exact commands vary by vendor.
Quiz
Knowledge check · 4 questions
Q1. `/proc/net/bonding/bond0` shows the two members with different Aggregator IDs. What does this mean?
Q2. LACP rate slow can allow OSDs to be marked down before the bond detects a member failure.
Q3. Verify LACP after a switch replacement.
Following a top-of-rack switch replacement, Ceph hosts in that rack are reachable and OSDs are up, but recovery throughput between racks is about half what it was before. No errors appear in host or Ceph logs.
Q4. Why do layer2 and layer2+3 hash policies perform equally poorly for Ceph within a single subnet?
Passing score: 75%. Answers are checked in this browser.
Production discipline
Add the Aggregator ID check, LACP rate, and hash policy to the post-change verification for any switch or host network work — all three survive as text in one file and take seconds to read. Where the switch configuration is managed separately, agree the expected values with the network team and record them so both sides can verify against the same reference.
Cross-course references
- Kubernetes: a misconfigured node NIC bond degrades every pod on the node identically
- Linux: LACP verification is standard host networking, and the Ceph stakes make it worth automating