In my current position as a system / network administrator I needed to get a redundant network architecture so that if a switch fails, a network cable is cut off, a network card fails, etc the service wouldn't be impacted.

To achieve this we chose to go with a stack of 3750 Cisco switches (we are starting with 2 switches) each one connected to a different power circuit.

We then attach our servers to both switches using what Cisco calls etherchannel with LACP (which is in fact ieee standard 802.3ad) Some documentation

On the Cisco side it's only a mater of adding your interface to channel group (it's explained quite well in Cisco's documentation under etherchannel using LACP).

On Linux's side etherchannel is called interface bonding.

In order to use bonding you have to load the module with the right options (for LACP you at least have to pass option mode=4). Then you will have to create a bond0 interface to which you will attach several (at least 2) ethernet devices.

Here are 2 very interesting articles :