CentOS 5.x 6.x 网卡绑定(Bonding)脚本

工作中经常要为客户调整网卡绑定,为此制作了此脚本(比较粗糙,请见谅)。使用时请查看脚本帮助


bond.sh

#!/bin/bash

usage()
{
	cat << EOF
	create by [email protected]
	usage: $0 options

	OPTIONS:
	    -h 		Show this message
	    -i		Bonding IP,NETMASK,GATEWAY(optional)
	    -q		Show Bonding Parameter Info
	    -d		Define NIC Name: eth1,eth2 or em1,em2(default primary is first,only mode 1)
	    -m		Bonding Mode:0,1,2,3,4,5,6
	    
EOF
}

show()
{
cat << EOF
	Do not place parameters for the bonding kernel module in the /etc/modprobe.conf file. Instead, specify them as a space-separated list in the BONDING_OPTS="<bonding parameters>" directive in the ifcfg-bond<N> interface file.
	The only exception is the debug parameter, which cannot be used on a per-device basis, and which should therefore be specified in /etc/modprobe.conf as follows:
	options bonding debug=1
	For further instructions and advice on configuring the bonding module, as well as to view the list of bonding parameters

	Parameters for the bonding kernel module must be specified as a space-separated list in the BONDING_OPTS="bonding parameters" directive in the ifcfg-bondN interface file. Do not specify options for the bonding device in /etc/modprobe.d/bonding.conf, or in the deprecated /etc/modprobe.conf file. For further instructions and advice on configuring the bonding module and to view the list of bonding parameters

	mode=<value> 
	Allows you to specify the bonding policy. The <value> can be one of:
	balance-rr or 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.
	active-backup or 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.
	balance-xor or 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.
	broadcast or 3 ― Sets a broadcast policy for fault tolerance. All transmissions are sent on all slave interfaces.
	802.3ad or 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.
	balance-tlb or 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.
	balance-alb or 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.


	MASTER=bond-interface
	where bond-interface is the channel bonding interface to which the Ethernet interface is linked.
	This directive is used in conjunction with the SLAVE directive.

	NM_CONTROLLED=answer
	where answer is one of the following:
	yes ― NetworkManager is permitted to configure this device. This is the default behavior and can be omitted.
	no ― NetworkManager is not permitted to configure this device.

	SLAVE=answer
	where answer is one of the following:
	yes ― This device is controlled by the channel bonding interface specified in the MASTER directive.
	no ― This device is not controlled by the channel bonding interface specified in the MASTER directive.
	This directive is used in conjunction with the MASTER directive.

	USERCTL=answer
	where answer is one of the following:
	yes ― Non-root users are allowed to control this device.
	no ― Non-root users are not allowed to control this device.

	primary=<interface_name> 
	Specifies the interface name, such as eth0, of the primary device. The primary 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.

	primary_reselect=<value> 
	Specifies the reselection policy for the primary slave. This affects how the primary slave is chosen to become the active slave when failure of the active slave or recovery of the primary slave occurs. This parameter is designed to prevent flip-flopping between the primary slave and other slaves. Possible values are:
	always or 0 (default) ― The primary slave becomes the active slave whenever it comes back up.
	better or 1 ― The primary slave becomes the active slave when it comes back up, if the speed and duplex of the primary slave is better than the speed and duplex of the current active slave.
	failure or 2 ― The primary slave becomes the active slave only if the current active slave fails and the primary slave is up.
	The primary_reselect setting is ignored in two cases:
	If no slaves are active, the first slave to recover is made the active slave.
	When initially enslaved, the primary slave is always made the active slave.
	Changing the primary_reselect policy via sysfs will cause an immediate selection of the best active slave according to the new policy. This may or may not result in a change of the active slave, depending upon the circumstances

	miimon=<time_in_milliseconds> 
	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.
EOF
}
set()
{
IP1=`echo $IP|cut -d "," -f1`
MASK=`echo $IP|cut -d "," -f2`
GATE=`echo $IP|cut -d "," -f3`
if [ -z $GATE ] ; then
	GATE=""
else
    GATE="GATEWAY=`echo $IP|cut -d "," -f3`"
fi
IF1=`echo $IF|cut -d "," -f1`
IF2=`echo $IF|cut -d "," -f2`
IF3=`echo $IF|cut -d "," -f3`
IF4=`echo $IF|cut -d "," -f4`

if [ $MODE = 1 ] ;then
	primary="primary=$IF1"
fi
echo "
DEVICE=bond0
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
IPADDR=$IP1
NETMASK=$MASK
$GATE
BONDING_OPTS="miimon=100 mode=$MODE $primary"
">/etc/sysconfig/network-scripts/ifcfg-bond0

sed -i "s/BOOTPROTO.*$/BOOTPROTO=\"none\"/" /etc/sysconfig/network-scripts/ifcfg-$IF1
sed -i "s/BOOTPROTO.*$/BOOTPROTO=\"none\"/" /etc/sysconfig/network-scripts/ifcfg-$IF2
sed -i "s/ONBOOT.*$/ONBOOT=\"yes\"/" /etc/sysconfig/network-scripts/ifcfg-$IF1
sed -i "s/ONBOOT.*$/ONBOOT=\"yes\"/" /etc/sysconfig/network-scripts/ifcfg-$IF2

echo "
MASTER=bond0
SLAVE=yes
USERCTL=no
">>/etc/sysconfig/network-scripts/ifcfg-$IF1
echo "
MASTER=bond0
SLAVE=yes
USERCTL=no
">>/etc/sysconfig/network-scripts/ifcfg-$IF2

if [ -n $IF3 ] ;then
sed -i "s/BOOTPROTO.*$/BOOTPROTO=\"none\"/" /etc/sysconfig/network-scripts/ifcfg-$IF3
sed -i "s/ONBOOT.*$/ONBOOT=\"yes\"/" /etc/sysconfig/network-scripts/ifcfg-$IF3
echo "
MASTER=bond0
SLAVE=yes
USERCTL=no
">>/etc/sysconfig/network-scripts/ifcfg-$IF3
fi
if [ -n $IF4 ] ;then
sed -i "s/BOOTPROTO.*$/BOOTPROTO=\"none\"/" /etc/sysconfig/network-scripts/ifcfg-$IF4
sed -i "s/ONBOOT.*$/ONBOOT=\"yes\"/" /etc/sysconfig/network-scripts/ifcfg-$IF4
echo "
MASTER=bond0
SLAVE=yes
USERCTL=no
">>/etc/sysconfig/network-scripts/ifcfg-$IF4
fi

service network restart
cat /proc/net/bonding/bond0
}

if [ $# = 0 ] ;then
	usage
	exit
fi

while getopts hqi:d:m: OPTION
do
     case $OPTION in
         h)
	     usage
	     exit 1
	     ;;
	 q)
	     show
	     exit 1
	     ;;
	 i)
	     IP=$OPTARG
	     ;;
	 d)
	     IF=$OPTARG
	     ;;
	 m)
	     MODE=$OPTARG
	     ;;
         ?)
             usage
             exit 1
             ;;
         *)
             usage
             exit 1
             ;;
     esac
done
#shift $((OPTIND-1))
#echo "opts $@"

if [ -z $IP ] ;then
	echo "
	Please Input IP,NETMASK,GATEWAY
	Example:bond.sh -i 192.168.1.2,255.255.255.0,192.168.1.1 -d eth0,eth1,eth3,eth4
"
	exit 1
fi
if [ -z $IF ] ;then
	echo "
	Please Input NIC Name
	Example:bond.sh -d eth0,eth1,eth2,eth3 or em1,em2,em3,em4
"
	exit 1
fi
if [ -z $MODE ] ;then
	MODE=1
fi
set

echo "cat /proc/net/bonding/bond0 show bond status"


CentOS 7 可以通过三种方式来实现

  1. nmtui #在界面里配置

  2. nmcli #请通过man nmcli查看帮助

  3. 通过修改网卡配置文件实现(理论上此脚本也可以,未做测试)

你可能感兴趣的:(网卡绑定)