Let 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?