vlambda博客
学习文章列表

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漂移的故障现象。

CentOS 双网卡bond绑定配置


active-backup 或者 1 — 为容错设定 active-backup 策略。通过第一个可用的绑定从属接口接收和发送传输文件。只有在活动的绑定从属接口失败时才使用其他绑定从属接口。


不需要交换机配置,bond0和两个网卡的MAC一致,为其中某个网卡的真实MAC。

CentOS 双网卡bond绑定配置



需要交换机配置,bond0和两个网卡的MAC一致,为其中某个网卡的真实MAC。CentOS 双网卡bond绑定配置


broadcast 或者 3 — 为容错设定广播策略。可在所有从属接口中传输所有数据。


需要交换机配置,bond0和两个网卡的MAC一致,为其中某个网卡的真实MAC。

CentOS 双网卡bond绑定配置


802. 3ad 或者 4 — 设定 IEEE 802.3ad 动态链接聚合策略(IEEE 802.3ad Dynamic link aggregation)。创建一个共享同一速度和双工设置的聚合组。在所有活跃聚合器中传输和接受数据。需要兼容 802.3ad 的交换机。      


需要交换机配置动态链路聚合,bond0和两个网卡的MAC一致,为其中某个网卡的真实MAC。

CentOS 双网卡bond绑定配置



CentOS 双网卡bond绑定配置



CentOS 双网卡bond绑定配置

二、确认网卡链路和速率

2.1 查看服务器网卡名称

本例有三个物理网卡,分别叫enp5s0f0、enp5s0f1enp10s0

ip a | grep en | grep -v lo | awk -F  ":"  '{print $2}'   //查看网卡名称

CentOS 双网卡bond绑定配置

2.2 查看网卡速率和链路连接状态

Speed    表示网卡的速率参数,如果交换机和服务器都是千兆网卡,那么正常情况显示是1000M,当显示的是10M、100M、Unkown说明网线或者网卡存在故障。


Link detected        表示网卡链路状态,已激活的网卡显示的是yes,未激活显示的no。


ethtool 网卡名称  //查看网卡物理链接

CentOS 双网卡bond绑定配置

       CentOS 双网卡bond绑定配置

三、配置双网卡绑定

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”回车保存退出

CentOS 双网卡bond绑定配置


cat ifcfg-bond0                             //查看验证是否参数编写存在错误

CentOS 双网卡bond绑定配置


参照ifcfg-bond0配置文件编写方法,编写ifcfg-enp5s0f0和ifcfg-enp5s0f1

CentOS 双网卡bond绑定配置

CentOS 双网卡bond绑定配置

3.5 脚本配置(推荐使用)

CentOS 双网卡bond绑定配置

脚本代码如下:

#!/bin/bash# --------------------------------------------------## @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 0else echo "当前执行用户校验正确!"fi
net_pwd=/etc/sysconfig/network-scripts
BAK=$net_pwds/bakif [ -d $BAK ] ;then
rm -rf $BAK/*
else mkdir $BAKfi
echo "您将需要输入以下信息完成配置"echo "----------------------------------------------------"echo "1-网卡绑定名称,建议从数字0开始使用,即bond0"echo "2-网卡绑定模式,主备模式设为1,静态负载均衡设为0,动态负载均衡设为4"echo "3-服务器IP地址"echo "4-服务器子网掩码"echo "5-服务器网关"echo "6-需要绑定的实际网卡名称"echo "----------------------------------------------------"while truedo 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;; esacdone read -p "3-服务器IP地址:" Ipaddr echo "您已经输入设备IP为 : $Ipaddr" read -p "4-服务器子网掩码:" Netmask echo "您已经输入设备子网掩码为: $Netmask" read -p "5-服务器网关:" Gateway     echo "您已经输入设备网关为: $Gateway"     touch ifcfg-$deviceNameecho "DEVICE=$deviceName" >>ifcfg-$deviceNameecho "NAME=$deviceName" >>ifcfg-$deviceNameecho "BONDING_OPTS=\"miimon=1 updelay=0 downdelay=0 mode=$BondType\"" >>ifcfg-$deviceNameecho "TYPE=Bond" >>ifcfg-$deviceNameecho "BONDING_MASTER=yes" >>ifcfg-$deviceNameecho "BOOTPROTO=none" >>ifcfg-$deviceNameecho "USERCTL=no" >>ifcfg-$deviceNameecho "NM_CONTROLLED=no" >>ifcfg-$deviceNameecho "IPADDR=$Ipaddr" >>ifcfg-$deviceNameecho "NETMASK=$Netmask" >>ifcfg-$deviceNameecho "GATEWAY=$Gateway" >>ifcfg-$deviceNameecho "DEFROUTE=yes" >>ifcfg-$deviceNameecho "ONBOOT=yes" >>ifcfg-$deviceName
if [ -f ${net_pwd}/ifcfg-$deviceName ];then mv ${net_pwd}/ifcfg-$deviceName $BAKfi
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`docd ${net_pwd}echo "写入以下配置信息到对应网卡中ifcfg-$i"echo "--------------------------------------------"
mv ${net_pwd}/ifcfg-$i $BAKecho "DEVICE=$i" |tee -a ifcfg-$iecho "BOOTPROTO=none" |tee -a ifcfg-$iecho "MASTER=$deviceName" |tee -a ifcfg-$iecho "SLAVE=yes" |tee -a ifcfg-$iecho "NM_CONTROLLED=no" |tee -a ifcfg-$iecho "USERCTL=no" |tee -a ifcfg-$iecho "ONBOOT=yes" |tee -a ifcfg-$iecho "--------------------------------------------"done
systemctl restart networkexport LANG=$OLD_LANG


四、配置生效

4.1 重启网络服务

systemctl restart network                     //重启网络服务

4.2 查看IP配置

ip a                                                 //查看网络详情

CentOS 双网卡bond绑定配置

4.3 查看bond0详情

cat /proc/net/bonding/bond0                            //查看bond0详情CentOS 双网卡bond绑定配置

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