Most servers ship with at least two network ports, often more.
And yet so often we plug one of them into a switch and ignore the other one. We’ve paid for an expensive server with very capable networking, and now we’re going to ignore half of its capabilities. Meanwhile, we’re asking it to do more and more. Sooner or later, that gigabit network port is the bottleneck.
Why not use both network ports simultaneously?
There’s various ways you can set this up. Some require special configuration of managed switches; some don’t. For this blog post, I’m going to concentrate on methods that don’t require special switch configuration because they’re a little bit easier and they’re somewhat less fragile – you don’t risk your network collapsing in a big heap just because someone plugged a network port into the wrong socket. (We also get the added bonus that if one of the two network ports in our server fails, it’ll still work, albeit more slowly. But I can’t remember the last time I saw a network port fail…)
These instructions are written purely for Debian Squeeze. You may need minor tweaks to use them in Ubuntu; you’ll almost certainly need significant changes to use them in other distributions.
First, install the ifenslave package:
apt-get install ifenslave
Configuration is just a few lines in /etc/network/interfaces:
# The primary network interface auto bond0 iface bond0 inet static address 192.168.42.43 broadcast 192.168.42.255 netmask 255.255.255.0 gateway 192.168.42.254 network 192.168.42.0 bond_mode balance-tlb bond_miimon 100 bond_downdelay 200 bond_updelay 200 slaves eth0 eth1
Whatever you do, make sure you test everything on a non-production network first!
More information: Linux Kernel bonding documentation