开源中文网

您的位置: 首页 > Shell > 正文

Linux实现双网卡绑定及自动绑定shell脚本

来源: 网络整理  作者: 佚名

网卡绑定原始的做法就是我们通过一条条shell命令来进行编辑绑定了,当然如果高手肯定是一键化绑定了,下面来看一篇关于Linux实现双网卡绑定及自动绑定shell脚本文章。
一,手工绑定网卡

双网卡绑定实现就是使用两块网卡虚拟成为一块网卡,这个聚合起来的设备看起来是一个单独的以太网接口设备,通俗点讲就是两块网卡具有相同的IP地址而并行链接聚合成一个逻辑链路工作。根据交换机可支持的功能不通,最常见的是设定为主备方式的双网卡绑定。
一、新建ifcfg-bond0文件
在/etc/sysconfig/network-scripts下vim ifcfg-bond0,内容如下

DEVICE=bond0
BOOTPROTO=none
ONBOOT=yes
TYPE=Ethernet
IPADDR=IP
NETMASK=掩码
二、分别编辑ifcfg-eth0和ifcfg-eth1文件
eth0
DEVICE=eth0
USERCTL=no
ONBOOT=yes
MASTER=bond0
SLAVE=yes
BOOTPROTO=none
eth1

DEVICE=eth1
USERCTL=no
ONBOOT=yes
MASTER=bond0
SLAVE=yes
BOOTPROTO=none
三、修改/etc/modprobe.conf 文件,添加下面两行
alias bond0 bonding
options bond0 miimon=100 mode=1 [max_bonds=2]
PS:
a、miimon 是链路监测的时间间隔单位是毫秒,miimon=100的意思就是每100ms,监测一次链路连接状态,如果有一条线路不通就转入另一条线路;
b、mode=0 表示负载均衡方式,两块网卡都工作,需要交换机作支持
mode=1 表示冗余方式,网卡只有一个工作,一个出问题启用另外的
mode=6 表示负载均衡方式,两块网卡都工作,不需要交换机作支持
对于目前0模式测试是有点问题,如果交换机上没有相关配置的话网络上丢包会很严重,而且用0模式他只是一种轮流发送的模式而不是所谓的会增加网络的带宽,轮流发送包这样无形中导致了网络的速率下降(因为要去做出选择走那个网卡),现在普遍用的是1模式冗余的模式安全可靠,速度也快速。
c、bonding只能提供链路监测,即从主机到交换机的链路是否接通。如果只是交换机对外的链路down掉了,而交换机本身并没有故障,那么bonding会认为链路没有问题而继续使用;
d、max_bonds=2网卡绑定如果BOND在一个以上最好加上这参数限制BOND最大加载几个,如果没有加载这个参数会网络重启的时候会报类似于“找不到BOND1参数,BOND1加载失败的错误”
四、卸载bond0设备
1、删除bond0文件

#rm -f /etc/sysconfig/network-scripts/ifcfg-bond0
2、修改/etc/modprobe.conf 文件,删除上面添加的两行
alias bond0 bonding
options bond0 miimon=100 mode=1 [max_bonds=2]
3、最后重新配置eth0和eth1的IP,并重启网络即可。
二,双网卡绑定自动化脚本
其实认真观察上面的步骤,都是固定的。于是我们就可以写个脚本实现自动化配置
#!/bin/bash
if [ $# -lt 6 ];then
echo “Usage: $0 <bond*> <eth*> <eth*> <ipaddress> <netmask> <gateway>”
echo “eg: $0 bond0 eth0 eth1 192.168.0.1 255.255.255.0 192.168.0.254″
exit 1
fi

#修改 ifcfg-bond* 文件
echo “DEVICE=$1
IPADDR=$4
NETMASK=$5
GATEWAY=$6
ONBOOT=yes
BOOTPROTO=none
USERCTL=no” >/tmp/ifcfg-$1
mv -f /tmp/ifcfg-$1 /etc/sysconfig/network-scripts/

#修改 ifcfg-eth0 文件
echo “DEVICE=$2
USERCTL=no
ONBOOT=yes
MASTER=$1
SLAVE=yes
BOOTPROTO=none” >/tmp/ifcfg-$2
mv -f /tmp/ifcfg-$2 /etc/sysconfig/network-scripts/

#修改 ifcfg-eth1 文件
echo “DEVICE=$3
USERCTL=no
ONBOOT=yes
MASTER=$1
SLAVE=yes
BOOTPROTO=none” >/tmp/ifcfg-$3
mv -f /tmp/ifcfg-$3 /etc/sysconfig/network-scripts/

##修改 network 文件
#sed /GATEWAY/d /etc/sysconfig/network >/tmp/network
#echo “GATEWAY=\”$6\”">>/tmp/network
#mv -f /tmp/network /etc/sysconfig/

#修改 modules.cof/modprobe.cof
MODCONF=/NULL
TEMPFILE1=/tmp/mod1.$$
TEMPFILE2=/tmp/mod2.$$
BAKFILE=/etc/.modconf

#选择绑定的模式是轮询还是冗余,一般建议选择1
echo “Please Select Your Bond Mode:(balance-rr/active-backup)or(0/1)?”
read MODE

if [ -f /etc/modprobe.conf ]; then
MODCONF=/etc/modprobe.conf
else
MODCONF=/etc/modules.conf
fi

cp $MODCONF $BAKFILE

sed ‘/alias[ \t]*’$1′[ \t]*bonding/d;/options[ \t]*’$1′[ \t]*/d;/install.*’$1′/d’ $MODCONF > $TEMPFILE1
cp $TEMPFILE1 $TEMPFILE2

if [ "$(grep "alias.*bonding" $TEMPFILE1)" != "" ]; then
bondcount=$(grep “alias.*bonding” $TEMPFILE1 | wc -l)
elif [ "$(grep "install.*bond.*" $TEMPFILE1)" != "" ]; then
bondcount=$(grep “install.*bond.*” $TEMPFILE1 | wc -l)
else
bondcount=0
fi

if [ "$bondcount" -ge 1 ]; then
sed ‘/alias.*bonding/d;s/\(options[ \t]*\)\(bond[0-9]*\)/install\ \2\ \/sbin\/modprobe\ –ignore-install\ bonding\ -o\ \2/’ $TEMPFILE1 > $TEMPFILE2

echo “install $1 /sbin/modprobe –ignore-install bonding -o $1 miimon=100 mode=$MODE” >> $TEMPFILE2
else

echo “alias $1 bonding” >> $TEMPFILE2
echo “options $1 miimon=100 mode=$MODE” >> $TEMPFILE2
fi
mv -f $TEMPFILE2 $MODCONF

#重启网络
echo “System will restart network continue(y/n)?”
read bb
if [ "$bb" = "y" ] || [ "$bb" = "yes" ] || [ "$bb" = "Y" ];then
for tempmod in $(lsmod | grep -i bond | awk ‘{print $1}’)
do
modprobe -r bonding -o “$tempmod”
done

/etc/init.d/network restart
fi
echo “OK!”
exit 0

Tags:脚本 网卡
关于开源中文网 - 联系我们 - 广告服务 - 网站地图 - 版权声明