Cisco IOS Interface Load-Balancing

Posted on in Networking

ConnectorsLet me start by saying this article is not about server load-balancing. That's a different topic, and I apologize if that's what you were looking for. That said, interface load-balancing is an interesting topic and one that comes up quite frequently.

A time will come when it becomes necessary to increase your available bandwidth. Perhaps that T1 is no longer enough, but an entire DS3 is just too expensive. The obvious solution is to add another T1 and split your traffic across between the two circuits. There are 3 ways to get this done.

Option 1: Do Nothing

The first option, believe it or not, is to do nothing at all. By default, if IOS has two equal cost routes to the same destination it will switch between each path successively. Since it does this per destination, the load-balancing will not be perfectly symmetrical as some hosts use more bandwidth than others. Generally speaking, this isn't the best option, and shouldn't be your first choice.

Option 2: Per-packet Load Sharing

The next option achieves symmetrical load-balancing by sending alternating packets across each interface. Again this isn't perfectly symmetrical since packet sizes are not guaranteed, but it's close enough. The configuration commands to achieve this are very straightforward.

interface Serial1/0
 ip load-sharing per-packet
!
interface Serial1/1
 ip load-sharing per-packet

Option 3: Multilink PPP

This option is the most stressing on the router. It creates a virtual interface (similar to creating a Tunnel interface) and pushes packets across it. Not only is load-balancing symmetrical in this configuration, but it guarantees packet order. This is especially important in the context of <acronym title="Voice over IP">VoIP</acronym> where out of order packets can result in choppiness. This is the option I most frequently recommend.

interface Multilink1
 ppp multilink
 ppp multilink group 1
!
interface Serial1/0
 ip unnumbered Multilink1
 encapsulation ppp
 ppp multilink group 1
!
interface Serial1/1
 ip unnumbered Multilink1
 encapsulation ppp
 ppp multilink group 1

As you can see, this configuration is much more complex. In addition to assigning each T1 to the Multilink group, you also set it up ip unnumbered (this is an easy step to miss).

That wraps up the three primary options for interface load-balancing in Cisco IOS. Which do you prefer?

Related Reading

Slaptijack's Koding Kraken