Monday, 10 February 2014

Bonding is nothing but combining two or more network interfaces to create a one logical bonded interface which provides the redundancy and load balance which increase the bandwidth. Depends on the mode the bonded interface perform or work. Let we see the configuration method of bonding in LINUX.

High Level Plan :
1.  Confirm the Mode of bonding.
2.  Check Integrity and functionality of each NIC.
3.  Check Interface kernel Module
4.  Add the bonding entry on /etc/modprobe.conf and update the module
5.  Edit the Interface configuration file to point the Bonding Logical  interface.
6.  Restart the network services.

From the below example we are going to create Logical interface bonding between network  eth0 and eth1.
Later on we can do for the same for other interfaces (eth2, eth3)
Bonding Modes

Mode codePolicies
Balance-rr0Round-robin policy for fault tolerance and load balancing. 
Active-backup Active-backup policy for fault tolerance.
Balance-xor 2XOR (exclusive-or) policy for fault tolerance and load balancing.
Broadcast3Broadcast policy for fault tolerance.
802.3ad4IEEE 802.3ad dynamic link aggregation policy. Requires a switch that is 802.3ad compliant.
balance-tlb5Transmit Load Balancing (TLB) policy for fault tolerance and load balancing.
balance-alb6Active Load Balancing (ALB) policy for fault tolerance and load balancing.
In this example we are going to use the bonding Mode is (Balance-rr or 0)

Check Integrity and functionality of each NIC.
[root@unixrock ~]# ethtool eth0
Settings for eth0:
        Supported ports: [ TP ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Supports auto-negotiation: Yes
        Advertised link modes:  10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Advertised pause frame use: No
        Advertised auto-negotiation: Yes
        Speed: 1000Mb/s
        Duplex: Full
        Port: Twisted Pair
        PHYAD: 0
        Transceiver: internal
        Auto-negotiation: on
        MDI-X: Unknown
        Supports Wake-on: d
        Wake-on: d
        Current message level: 0x00000007 (7)
        Link detected: yes
[root@unixrock ~]#
Configuring other interface eth1
[root@unixrock ~]# ethtool eth1
Settings for eth1:
        Supported ports: [ TP ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Supports auto-negotiation: Yes
        Advertised link modes:  10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Advertised pause frame use: No
        Advertised auto-negotiation: Yes
        Speed: 1000Mb/s
        Duplex: Full
        Port: Twisted Pair
        PHYAD: 0
        Transceiver: internal
        Auto-negotiation: on
        MDI-X: Unknown
        Supports Wake-on: d
        Wake-on: d
        Current message level: 0x00000007 (7)
        Link detected: yes
[root@unixrock ~]#
From the above output we need to check the interface "Speed", "Duplex" and "Link Detected" status and we found all values are same. Now the interface ready for the configurations.
Checking kernel Modules 
[root@unixrock ~]# modprobe --list |egrep -i "bonding|mii"
kernel/drivers/net/mii.ko
kernel/drivers/net/bonding/bonding.ko
[root@unixrock ~]#
Now we are ready to configure the bonding interface by creating the /etc/modprobe.conf file.
[root@unixrock ~]# cat >/etc/modprobe.d/bonding.conf
alias bond0 bonding
[root@unixrock ~]# cat /etc/modprobe.d/bonding.conf
alias bond0 bonding
[root@unixrock ~]#
Now the kernel module is configured and we have to load those modules as given below
[root@unixrock ~]# modprobe bonding
[root@unixrock ~]#
Now all modules are loaded and ready for the configuration of each NIC.
First configuring interface eth0
[root@unixrock ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
BOOTPROTO="none"
ONBOOT="yes"
MASTER="bond0"
SLAVE="yes"
USERCTL="no"
NM_CONTROLLED="no"
TYPE="ethernet"
[root@unixrock ~]#
Configuring other interface eth1
[root@unixrock ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE="eth1"
BOOTPROTO="none"
ONBOOT="yes"
MASTER="bond0"
SLAVE="yes"
USERCTL="no"
NM_CONTROLLED="no"
TYPE="ethernet"
[root@unixrock ~]#
Configuring of bond0
[root@unixrock ~]# vi /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE="bond0"
BOOTPROTO="none"
ONBOOT="yes"
NETMASK="255.255.255.0"
IPADDR="192.168.10.20"
USERCTL="no"
BONDING_OPTS="mode=0 miimon=100"
NM_CONTROLLED="no"
[root@unixrock ~]#
mode    Bonding mode (Balance-rr or 0).
miimon Value for the frequency (in ms) of MII link monitoring.
Now we have completed our configuration of network bonding.
NOTE : If your changing the current interface configuration,recommended to do it on server console. Now we are ready for restart the Network service.
[root@unixrock ~]# service network restart
Shutting down interface bond0:                             [  OK  ]
Shutting down loopback interface:                          [  OK  ]
Bringing up loopback interface:                            [  OK  ]
Bringing up interface bond0:                               [  OK  ]
[root@unixrock ~]#
After configuring "ifconfig" command output shown as below
[root@unixrock ~]# ifconfig -a
bond0     Link encap:Ethernet  HWaddr 00:0C:29:2B:BD:A8
          inet addr:192.168.10.20  Bcast:192.168.10.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe2b:bda8/64 Scope:Link
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1
          RX packets:9452 errors:0 dropped:0 overruns:0 frame:0
          TX packets:7702 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:2773700 (2.6 MiB)  TX bytes:753255 (735.6 KiB)

eth0      Link encap:Ethernet  HWaddr 00:0C:29:2B:BD:A8
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:8659 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3874 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:2692648 (2.5 MiB)  TX bytes:381126 (372.1 KiB)

eth1      Link encap:Ethernet  HWaddr 00:0C:29:2B:BD:A8
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:793 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3829 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:81052 (79.1 KiB)  TX bytes:372363 (363.6 KiB)
[root@unixrock ~]#
Checking the bonding interface details
[root@unixrock ~]# ls -ltr /proc/net/bonding/bond0
-r--r--r--. 1 root root 0 Feb 10 11:00 /proc/net/bonding/bond0
[root@unixrock ~]# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)

Bonding Mode: load balancing (round-robin)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: eth0
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:2b:bd:a8
Slave queue ID: 0

Slave Interface: eth1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:2b:bd:b2
Slave queue ID: 0
[root@unixrock ~]#
COOL !!!! we have successfully configured Bonding interface. Thanks for reading this post, If you have any doubt please leave your valuable comments, I will get back to you at earliest.