Bonding
A bonding configuration allow you to increase your bandwidth by merging several physical interfaces to a virtual one. LACP is a well known aggregation protocol, available in most switches and in Linux. This post will show you how to use LACP between a switch and a Linux server.
Linux
Load the kernel module
cat > /etc/modprobe.d/bond.conf << EOF
alias bond0 bonding
options bond0 miimon=100 mode=4 lacp_rate=1
EOF
Disable NetworkManager
Then, you need to disable NetworkManager.
systemctl stop NetworkManager.service
systemctl disable NetworkManager.service
Configure your physical interfaces
Choose your 2 (or more) network interfaces you want to join together. Their configuration must be the same : ethernet type (TX versus LX), speed, duplex, etc...
cat > /etc/sysconfig/network-scripts/ifcfg-p1p1 << EOF
BOOTPROTO="none"
NM_CONTROLLED=no
DEVICE="p1p1"
NAME=p1p1
ONBOOT=yes
SLAVE=yes
MASTER=bond0
EOF
Second interface :
cat > /etc/sysconfig/network-scripts/ifcfg-p1p2 << EOF
BOOTPROTO="none"
NM_CONTROLLED=no
DEVICE="p1p2"
NAME=p1p2
ONBOOT=yes
SLAVE=yes
MASTER=bond0
EOF
Create your virtual interface
Now you can add a new interface bond0
, which would be your virtual network interface :
cat > /etc/sysconfig/network-scripts/ifcfg-bond0 << EOF
BOOTPROTO="none"
DEVICE="bond0"
NAME=bond0
IPADDR=192.168.0.45
PREFIX=24
DNS1=192.168.0.2
GATEWAY=192.168.0.1
DOMAIN=local
DEFROUTE=yes
ONBOOT=yes
PEERDNS=yes
PEERROUTES=yes
USERCTL=no
EOF
Switch part
Let's now configure the switch. That's pretty simple. Just don't forget to apply any further configuration to the port channel interface, not the underlying physicals ones. If the configuration is different between 2 channel group member, then the port channel will be disabled and a traffic interruption will occur.
Also, configure the port channel using active
mode. Which means the switch tries to "negotiate" the channel. Other configuration options are passive
(wait for LACP negotiation) or on
(unconditionnaly build the port channel).
On Cisco switches you could add up to 8 members to your channel group.
Cisco IOS
interface GigabitEthernet2
description SERVER1_p1p1
channel-group 1 mode active
!
interface GigabitEthernet3
description SERVER1_p1p2
channel-group 1 mode active
!
interface Port-channel1
description SERVER1`
!
Dell
The Dell syntax is the same as Cisco IOS.
interface Te1/0/1
channel-group 1 mode active
description "SERVER1_p1p1"
!
interface Te1/0/2
channel-group 1 mode active
description "SERVER1_p1p2"
!
interface port-channel 1
description "SERVER1"
!
Check your configuration
On your Linux box
cat /proc/net/bonding/bond0
On your switch
Dell
show interfaces status port-channel 1
Cisco
show interface po 1