22.5.2. The Channel Bonding Module
Red Hat Enterprise Linux allows administrators to bind NICs together into a single channel using the
bonding
kernel module and a special network interface, called a channel bonding interface. Channel bonding enables two or more network interfaces to act as one, simultaneously increasing the bandwidth and providing redundancy.
To channel bond multiple network interfaces, the administrator must perform the following steps:
- Add the following line to
/etc/modprobe.conf
:alias bond<N> bonding
Replace <N> with the interface number, such as0
. For each configured channel bonding interface, there must be a corresponding entry in/etc/modprobe.conf
. - Configure a channel bonding interface as outlined in Section 8.2.3, “Channel Bonding Interfaces”.
- To enhance performance, adjust available module options to ascertain what combination works best. Pay particular attention to the
miimon
orarp_interval
and thearp_ip_target
parameters. Refer to Section 22.5.2.1, “bonding
Module Directives” for a listing of available options. - After testing, place preferred module options in
/etc/modprobe.conf
.
22.5.2.1. bonding
Module Directives
Before finalizing the settings for the
bonding
module, it is a good idea to test which settings work best. To do this, open a shell prompt as root and type:
tail -f /var/log/messages
Open another shell prompt and use the
/sbin/insmod
command to load the bonding
module with different parameters while observing the kernel messages for errors.
The
/sbin/insmod
command is issued in the following format:
/sbin/insmod bond<N> <parameter=value>
Replace <N> with the number for the bonding interface. Replace <parameter=value> with a space separated list of desired parameters for the interface.
Once satisfied that there are no errors and after verifying the performance of the bonding interface, add the appropriate
bonding
module parameters to /etc/modprobe.conf
.
The following is a list of available parameters for the
bonding
module:
mode=
— Specifies one of four policies allowed for thebonding
module. Acceptable values for this parameter are:0
— Sets a round-robin policy for fault tolerance and load balancing. Transmissions are received and sent out sequentially on each bonded slave interface beginning with the first one available.1
— Sets an active-backup policy for fault tolerance. Transmissions are received and sent out via the first available bonded slave interface. Another bonded slave interface is only used if the active bonded slave interface fails.2
— Sets an XOR (exclusive-or) policy for fault tolerance and load balancing. Using this method, the interface matches up the incoming request's MAC address with the MAC address for one of the slave NICs. Once this link is established, transmissions are sent out sequentially beginning with the first available interface.3
— Sets a broadcast policy for fault tolerance. All transmissions are sent on all slave interfaces.4
— Sets an IEEE 802.3ad dynamic link aggregation policy. Creates aggregation groups that share the same speed and duplex settings. Transmits and receives on all slaves in the active aggregator. Requires a switch that is 802.3ad compliant.5
— Sets a Transmit Load Balancing (TLB) policy for fault tolerance and load balancing. The outgoing traffic is distributed according to the current load on each slave interface. Incoming traffic is received by the current slave. If the receiving slave fails, another slave takes over the MAC address of the failed slave.6
— Sets an Active Load Balancing (ALB) policy for fault tolerance and load balancing. Includes transmit and receive load balancing for IPV4 traffic. Receive load balancing is achieved through ARP negotiation.miimon=
— Specifies (in milliseconds) how often MII link monitoring occurs. This is useful if high availability is required because MII is used to verify that the NIC is active. To verify that the driver for a particular NIC supports the MII tool, type the following command as root:ethtool <interface-name> | grep "Link detected:"
In this command, replace <interface-name> with the name of the device interface, such aseth0
, not thebond
interface. If MII is supported, the command returns:Link detected: yes
If using a bonded interface for high availability, the module for each NIC must support MII.Setting the value to0
(the default), turns this feature off. When configuring this setting, a good starting point for this parameter is100
.downdelay=
— Specifies (in milliseconds) how long to wait after link failure before disabling the link. The value must be a multiple of the value specified in themiimon
parameter. The value is set to0
by default, which disables it.updelay=
— Specifies (in milliseconds) how long to wait before enabling a link. The value must be a multiple of the value specified in themiimon
parameter. The value is set to0
by default, which disables it.arp_interval=
— Specifies (in milliseconds) how often ARP monitoring occurs.If using this setting while inmode
0
or2
(the two load-balancing modes), the network switch must be configured to distribute packets evenly across the NICs. For more information on how to accomplish this, refer to/usr/share/doc/kernel-doc-<kernel-version>/Documentation/networking/ bonding.txt
The value is set to0
by default, which disables it.arp_ip_target=
— Specifies the target IP address of ARP requests when thearp_interval
parameter is enabled. Up to 16 IP addresses can be specified in a comma separated list.primary=
— Specifies the interface name, such aseth0
, of the primary device. Theprimary
device is the first of the bonding interfaces to be used and is not abandoned unless it fails. This setting is particularly useful when one NIC in the bonding interface is faster and, therefore, able to handle a bigger load.This setting is only valid when the bonding interface is in active-backup mode. Refer to/usr/share/doc/kernel-doc-<kernel-version>/Documentation/networking/ bonding.txt
for more information.
Important
It is essential that either the
arp_interval
and arp_ip_target
or miimon
parameters are specified. Failure to due so can cause degradation of network performance in the event a link fails.
Refer to the following file for more information (note that you must have the
kernel-doc
package installed to read this file):
/usr/share/doc/kernel-doc-<kernel-version>/Documentation/networking/bonding.txt
for detailed instructions regarding bonding interfaces.