CentOS 双网卡bond绑定配置
前 言
Redhat官方网络配置文档:
Linux内核官方说明文档https://www.kernel.org/doc/Documentation/networking/bonding.txt
Bond模式多用于tcp协议,udp协议会存在乱序的问题。
一、Bond七种运行模式说明
4种模式需要交换机配置:0 2 3 4
3种模式不需要交换机配置绑定:1 5 6
balance-rr 或者 0 — 为容错及负载平衡设定轮询机制(load balancing (round-robin))。从第一个可用的绑定从属接口开始按顺序接收和发送传输数据。
需要交换机配置静态负载均衡,bond0和两个网卡的MAC一致,为其中某个网卡的真实MAC,点对点测试可以达到带宽叠加的功能,但是项目上存在MAC漂移的故障现象。
active-backup 或者 1 — 为容错设定 active-backup 策略。通过第一个可用的绑定从属接口接收和发送传输文件。只有在活动的绑定从属接口失败时才使用其他绑定从属接口。
不需要交换机配置,bond0和两个网卡的MAC一致,为其中某个网卡的真实MAC。
需要交换机配置,bond0和两个网卡的MAC一致,为其中某个网卡的真实MAC。
broadcast 或者 3 — 为容错设定广播策略。可在所有从属接口中传输所有数据。
需要交换机配置,bond0和两个网卡的MAC一致,为其中某个网卡的真实MAC。
802. 3ad 或者 4 — 设定 IEEE 802.3ad 动态链接聚合策略(IEEE 802.3ad Dynamic link aggregation)。创建一个共享同一速度和双工设置的聚合组。在所有活跃聚合器中传输和接受数据。需要兼容 802.3ad 的交换机。
需要交换机配置动态链路聚合,bond0和两个网卡的MAC一致,为其中某个网卡的真实MAC。
二、确认网卡链路和速率
2.1 查看服务器网卡名称
本例有三个物理网卡,分别叫enp5s0f0、enp5s0f1、enp10s0
ip a | grep en | grep -v lo | awk -F ":" '{print $2}' //查看网卡名称
2.2 查看网卡速率和链路连接状态
Speed 表示网卡的速率参数,如果交换机和服务器都是千兆网卡,那么正常情况显示是1000M,当显示的是10M、100M、Unkown说明网线或者网卡存在故障。
Link detected 表示网卡链路状态,已激活的网卡显示的是yes,未激活显示的no。
ethtool 网卡名称 //查看网卡物理链接
三、配置双网卡绑定
3.1检查bond模块是否加载
CentOS7默认加载bonding模块
modinfo bonding //显示bonding模块信息,假如未加载模块,使用以下命令加载
modprobe bonding //加载bonding模块
3.2 创建网卡备份目录
[root@yanghong1 ~]# mkdir /etc/sysconfig/network-scripts/bak
3.3 备份网卡配置文件
[root@yanghong1 ~]# cd /etc/sysconfig/network-scripts/ //进入配置文件目录
[root@yanghong1 network-scripts]# mv ifcfg-enp5s0f0 bak //备份ifcfg-enp5s0f0
[root@yanghong1 network-scripts]# mv ifcfg-enp5s0f1 bak //备份ifcfg-enp5s0f1
3.4 手动配置(下一节提供了脚本配置)
[root@yanghong1 network-scripts]#vi ifcfg-bond0 //创建ifcfg-bond0配置文件
按i切换为插入模式,请参考如下参数填写实际服务器的ifcfg-bond0文件
TYPE=Bond
DEVICE=bond0
BONDING_OPTS="miimon=1 updelay=0 downdelay=0 mode=0"
BONDING_MASTER=yes
BOOTPROTO=static
USERCTL=no
DEFROUTE=yes
ONBOOT=yes
NM_CONTROLLED=no
IPADDR=10.33.48.212
NETMASK=255.255.255.0
GATEWAY=10.33.48.254
以上IPADDR、NETMASK、GATEWAY根据现场实际情况来修改。
编辑完成后输入键盘左上角“esc”键从INSERT模式切回一般模式,切换成功后INSERT字样消失,再输入“shift 和 :”组合键切换到命令行模式,输入“wq”回车保存退出
cat ifcfg-bond0 //查看验证是否参数编写存在错误
参照ifcfg-bond0配置文件编写方法,编写ifcfg-enp5s0f0和ifcfg-enp5s0f1
3.5 脚本配置(推荐使用)
脚本代码如下:
# --------------------------------------------------
#
# @author yangxiao
# @date 2018-06-20 创建脚本,默认所有网卡做聚合
# @date 2018-06-21 修改脚本,新增网卡选择,针对选择网卡做聚合
# @date 2018-06-22 修改脚本,新增配置网卡开机自启动
# --------------------------------------------------
# @update by yanghong8
# @date 2018-09-07 在原功能上就进行优化
OLD_LANG=`echo $LANG`
export LANG=zh_CN.utf8
echo "欢迎使用网卡绑定脚本"
echo "该脚本需在root用户下完成,开始效验用户"
user=`whoami`
if [ "${user}" != "root" ];then
echo "请在root用户下执行本脚本!" && echo "参考命令:su - root" && exit 0
else echo "当前执行用户校验正确!"
fi
net_pwd=/etc/sysconfig/network-scripts
BAK=$net_pwds/bak
if [ -d $BAK ] ;then
rm -rf $BAK/*
else
mkdir $BAK
fi
echo "您将需要输入以下信息完成配置"
echo "----------------------------------------------------"
echo "1-网卡绑定名称,建议从数字0开始使用,即bond0"
echo "2-网卡绑定模式,主备模式设为1,静态负载均衡设为0,动态负载均衡设为4"
echo "3-服务器IP地址"
echo "4-服务器子网掩码"
echo "5-服务器网关"
echo "6-需要绑定的实际网卡名称"
echo "----------------------------------------------------"
while true
do
read -p "1-网卡绑定名称:" deviceName
echo "您已经配置绑定名称为: $deviceName"
echo "2-请选择网卡绑定模式: 0 | 1 | 2 | 3 | 4 | 5 | 6 :"
read -n 1 -p "(Default: type 1): " BondType
echo
case $BondType in
0)
echo "您已经选择绑定模式为0 balance-rr."
BondType=balance-rr
break;;
1)
echo "您已经选择绑定模式为1 active-backup."
BondType=active-backup
break;;
2)
echo "您已经选择绑定模式为2 balance-xor."
BondType=balance-xor
break;;
3)
echo "您已经选择绑定模式为3 broadcast."
BondType=broadcast
break;;
4)
echo "您已经选择绑定模式为4 802.3ad."
BondType=802.3ad
break;;
5)
echo "您已经选择绑定模式为5 balance-tlb."
BondType=balance-tlb
break;;
6)
echo "您已经选择绑定模式为6 balance-alb."
BondType=balance-alb
break;;
*)
echo "您已经选择绑定模式为1 active-backup"
BondType=active-backup
break;;
esac
done
read -p "3-服务器IP地址:" Ipaddr
echo "您已经输入设备IP为 : $Ipaddr"
read -p "4-服务器子网掩码:" Netmask
echo "您已经输入设备子网掩码为: $Netmask"
read -p "5-服务器网关:" Gateway
echo "您已经输入设备网关为: $Gateway"
touch ifcfg-$deviceName
echo "DEVICE=$deviceName" >>ifcfg-$deviceName
echo "NAME=$deviceName" >>ifcfg-$deviceName
echo "BONDING_OPTS=\"miimon=1 updelay=0 downdelay=0 mode=$BondType\"" >>ifcfg-$deviceName
echo "TYPE=Bond" >>ifcfg-$deviceName
echo "BONDING_MASTER=yes" >>ifcfg-$deviceName
echo "BOOTPROTO=none" >>ifcfg-$deviceName
echo "USERCTL=no" >>ifcfg-$deviceName
echo "NM_CONTROLLED=no" >>ifcfg-$deviceName
echo "IPADDR=$Ipaddr" >>ifcfg-$deviceName
echo "NETMASK=$Netmask" >>ifcfg-$deviceName
echo "GATEWAY=$Gateway" >>ifcfg-$deviceName
echo "DEFROUTE=yes" >>ifcfg-$deviceName
echo "ONBOOT=yes" >>ifcfg-$deviceName
if [ -f ${net_pwd}/ifcfg-$deviceName ];then
mv ${net_pwd}/ifcfg-$deviceName $BAK
fi
mv ifcfg-$deviceName ${net_pwd}/
ADAPTER_NAME_ALL=`ip a|grep -E "en|em" |grep -v lo|awk -F ":" '{print $2}'|awk '{sub("^ *","");sub(" *$","");print}'`
echo -e "以下是系统识别到的所有网卡:\n\n$ADAPTER_NAME_ALL"
echo "6-请输入需要绑定的网卡名称,多个网卡之间用英文空格隔开"
read -p "网卡名称:" ethname
for i in `echo $ethname`
do
cd ${net_pwd}
echo "写入以下配置信息到对应网卡中ifcfg-$i"
echo "--------------------------------------------"
mv ${net_pwd}/ifcfg-$i $BAK
echo "DEVICE=$i" |tee -a ifcfg-$i
echo "BOOTPROTO=none" |tee -a ifcfg-$i
echo "MASTER=$deviceName" |tee -a ifcfg-$i
echo "SLAVE=yes" |tee -a ifcfg-$i
echo "NM_CONTROLLED=no" |tee -a ifcfg-$i
echo "USERCTL=no" |tee -a ifcfg-$i
echo "ONBOOT=yes" |tee -a ifcfg-$i
echo "--------------------------------------------"
done
systemctl restart network
export LANG=$OLD_LANG
四、配置生效
4.1 重启网络服务
systemctl restart network //重启网络服务
4.2 查看IP配置
ip a //查看网络详情
4.3 查看bond0详情
cat /proc/net/bonding/bond0 //查看bond0详情
Bonding Mode :load balancing (round-robin)静态负载均衡轮询模式
Slave Interface :bond0承载的物理网卡名称
4.4 修改IP地址或者运行模式
vi ifcfg-bond0配置文件,修改完成后保存退出,重启网络服务生效。
五、验证网络冗余性
ping 其他网段IP //分别拔掉其中一根网线进行网络冗余测试
六、验证网络带宽
使用iper3进行带宽测试,本图是单网卡测试结果。
七、取消网卡绑定
假如此时需要取消绑定,还原成单网卡的形式,IP配置在enp5s0f0上。
方案如下:
1.删除现有配置文件
rm ifcfg-bond0
rm ifcfg-enp5s0f0
rm ifcfg-enp5s0f0
2.确认网卡物理链路连通性
ethtool enp5s0f0
Settings for enp5s0f0
Supported ports: [ TP ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supported pause frame use: No
Supports auto-negotiation: Yes
Supported FEC modes: Not reported
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Advertised pause frame use: No
Advertised auto-negotiation: Yes
Advertised FEC modes: Not reported
Speed: 1000Mb/s (千兆速率,物理链路没问题)
Duplex: Full
Port: Twisted Pair(双绞线即普通网线,如果是FIBRE说明是光纤网卡)
PHYAD: 0
Transceiver: internal
Auto-negotiation: on
MDI-X: off (auto)
Supports Wake-on: d
Wake-on: d
Current message level: 0x00000007 (7)
drv probe link
Link detected: yes
3.创建的ifcfg-enp5s0f0和ifcfg- enp5s0f1配置文件
vi ifcfg-enp5s0f0
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
NAME=enp5s0f0
DEVICE=enp5s0f0
ONBOOT=yes
IPADDR=x.x.x.x
NETMASK=x.x.x.x
GATEWAY=x.x.x.x
vi ifcfg-enp5s0f1
TYPE=Ethernet
BOOTPROTO=static
NAME=enp5s0f1
DEVICE=enp5s0f1
ONBOOT=no
4.重启主机生效
reboot