Bonding, LACP and multiple ports
Bonding joins several physical links into one logical interface. It is excellent for redundancy and frequently disappointing for speed, and it helps to know which you are buying.
What bonding gives you
- Redundancy. A cable, a port or an optic fails and traffic continues on the remaining link. This part always works and is usually the real reason to bond.
- Aggregate throughput — but only across many flows. This is the part that disappoints people.
Why one transfer does not get faster
To keep packets in order, a bond hashes each flow — usually source and destination address, often with ports — and pins that flow to one link. A single TCP connection therefore lives entirely on one physical port. Two 10 Gbit links give you 20 Gbit of capacity and a 10 Gbit ceiling per connection.
If you need a single stream faster than 10 Gbit, you need a faster port, not more of them. We offer 25 and 100 Gbit for exactly this reason.
LACP
802.3ad, the standard way to negotiate a bundle with the switch. Both sides agree on which links are in the bundle and notice when one stops working. It needs configuration on the switch as well as on your server, so it has to be agreed with us first — an LACP bond against a switch that is not expecting one results in a link that flaps or a loop, neither of which is a good day.
Tell support which machine, which ports and what you want before you configure anything.
Modes worth knowing
- active-backup (mode 1)
- One link carries everything, the other waits. No switch configuration needed, pure redundancy, no aggregate gain. The safe default when in doubt.
- 802.3ad (mode 4)
- LACP. Redundancy plus aggregate throughput across flows. Needs the switch side configured.
- balance-alb (mode 6)
- Balances without switch support by playing games with ARP. Works, but it is a trick; prefer LACP where the switch can do it properly.
With LACP, set the hash policy to layer3+4 so ports are included in
the hash. With the default layer2, all traffic between two hosts lands
on one link no matter how many connections there are.
Configuring it
On Debian and Ubuntu with netplan, the relevant part looks like this:
bonds: { bond0: { interfaces: [enp1s0f0, enp1s0f1], parameters: { mode:
802.3ad, lacp-rate: fast, transmit-hash-policy: layer3+4 } } }
On RHEL-based systems, use nmcli to create a bond connection and add
both interfaces as slaves. Either way, check it afterwards:
cat /proc/net/bonding/bond0
That file tells you which links are up, which is active, and whether LACP has actually negotiated — look for both ports reporting an aggregator ID in common. If they have different aggregator IDs, the switch side is not configured and you are running on one link.
Test the failure, not just the bond
A bond that has never been tested is a theory. Ask us to shut one port while you watch a running transfer. Several seconds of loss is normal; a dead connection is not, and better discovered in a test than at three in the morning.
Still stuck? Mail support@novogara.com — an engineer answers, at any hour. Back to the knowledge base