Boost Reliability with Ethernet Bonding and Linux
Recycling the Ethernet
An easy, inexpensive way to double up Ethernet interfaces to get more more bandwidth and reliability is called Ethernet bonding. While Gigabit Ethernet is all exciting and the hot new fad, you can get a lot of mileage out of using Ethernet bonding to give your existing gear a nice boost without spending much extra money. Just stuff two ordinary 10/100 Ethernet interfaces into a machine, tweak a few configuration files, and you're in business. If one fails you won't lose connectivity. It is a good cheap upgrade for your servers--you'll have several options for configuring load balancing and failover, and with the right gear you'll get an instant bandwidth boost by combining the bandwidth of the two interfaces.
To increase performance by combining the bandwidth of each NIC, you need a switch that supports link aggregation. Or you can use a special option in the kernel's
bonding driver. This does some ARP (address resolution protocol) trickery to combine the bandwidth of the two NICs. You'll see a bit of a CPU hit, but it shouldn't be much. This must be supported by the interface's driver; if it isn't then your only option is a smart or managed switch that supports 802.3ad.
The Linux kernel has everything you need for this, and it's not very difficult to set up. Fedora and Debian each have their own special ways of configuring Ethernet bonding. (For you fine noobs wondering "But what about Ubuntu?" don't worry. Ubuntu is derived from Debian, so these instructions will work for them too.)
You're not limited to bonding two interfaces; you can go nuts and bond as many as you like, and can even bond machines and subnets. Clusters use channel-bonding to create super-fat pipelines. You can even bond Gigabit Ethernet. Which is very fun and not difficult, but today we shall limit ourselves to boosting the network performance of standalone servers.
2.6 kernels should have everything you need. If your system is missing some pieces, refer to the
Documentation/networking/bonding.txt file in the kernel documentation. This is the most comprehensive documentation on Ethernet bonding in Linux. It has one flaw-- it assumes a Red Hat-type system. No worries, because we'll cover the Debian way today. If you don't have the kernel documentation on your system, a Google search will find this file quickly.