多网卡绑定之bond
多网卡绑定之bond
教程每周二、四、六更新
网卡bond一般主要用于网络吞吐量很大,以及对于网络稳定性要求较高的场景。除了bond,还有一种叫team,我们下节再讲team。
主要是通过将多个物理网卡绑定到一个逻辑网卡上,实现了本地网卡的冗余,带宽扩容以及负载均衡。
Linux下一共有七种网卡bond方式,实现以上某个或某几个具体功能。
bond工作模式
bond0:轮转(Round-robin)策略:从头到尾顺序的在每一个slave接口上面发送数据包。本模式提供负载均衡和容错的能力。总带宽是两个接口的带宽总和。
bond1:活动-备份(主备)策略:只有一个slave被激活,当且仅当活动的slave接口失败时才会激活其他slave。总带宽相当于一个slave的带宽。
bond2:平衡策略,需要交换机支持,此模式提供负载平衡和容错能力。一般不用。
bond3:广播策略。表示所有包从所有网络接口发出,这个不均衡,只有冗余机制,但过于浪费资源。
bond4:动态链接聚合。表示支持802.3ad协议,和交换机的聚合LACP方式配合。总带宽相当于一个接口的带宽。使用时需要满足:1)switch(交换机)支持IEEE 802.3ad Dynamic link aggregation 2)大多数switch(交换机)需要经过特定配置才能支持802.3ad模式
bond5:适配器传输负载均衡。不需要任何特别的switch(交换机)支持的通道bonding。在每个slave上根据当前的负载(根据速度计算)分配外出流量。如果正在接受数据的slave出故障了,另一个slave接管失败的slave的MAC地址。
bond6:适配器适应性负载均衡。在5的tlb基础上增加了rlb(接收负载均衡receive load balance).不需要任何switch(交换机)的支持。接收负载均衡是通过ARP协商实现的。总带宽是两个口的带宽和。总带宽是每个网口带宽总和。
bond0与bond6的区别:bond6,先把eth0流量占满,再占eth1,….ethX;而bond0的话,会发现2个口的流量都很稳定,基本一样的带宽。而bond6,会发现第一个口流量很高,第2个口只占了小部分流量。
配置bond
配置bond有两种可以永久生效的方式:命令行配置、修改配置文件。
方法1:命令行配置:
# 为防止配置出错,我们先备份原有的配置文件。
cp /etc/sysconfig/network-scripts/ifcfg-eno* .
# 以bond6为例,配置网卡绑定
# 三条nmcli connection add命令可以自动创建三个网卡的配置文件
nmcli connection add con-name bond6 ifname bond6 type bond mode 6
nmcli connection add con-name slave1 ifname ens33 type ethernet master bond6
nmcli connection add con-name slave2 ifname ens34 type ethernet master bond6
# 为bond6网卡胚子IP地址信息
nmcli connection modify bond6 ipv4.method manual connection.autoconnect yes ipv4.addresses 10.0.0.139/24 ipv4.gateway 10.0.0.2
nmcli connection up bond6
# 如果之前有配置,则需要把原来网卡的配置清除
vi /etc/sysconfig/network-scripts/ifcfg-ens33 //去掉静态IP配置的内容,stactic改成dhcp
# 重启网络就可以了
systemctl restart network
当然,如果bond有配置错误,还可以回退:
禁用及删除:
nmcli connection down bond6 #禁用
nmcli connection delete bond6
nmcli connection delete slave1
nmcli connection delete slave2
方法2:配置文件配置:
两个物理网口分别是:ens33,ens34绑定后的虚拟口是:bond6
# 修改配置之前,先备份,这是一个工作的好习惯
cp /etc/sysconfig/network-scripts/ifcfg-ens* .
# 开始配置
[root@cloudstudy ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=002de1a3-4900-485d-883f-4f9e27db21db
DEVICE=ens33 # 本行及以上为系统自带,无需修改
ONBOOT=yes # 改为开机启动
MASTER=bond6 # 设置主网卡名
SLAVE=yes # 标记为当前网卡为从网卡
[root@cloudstudy ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens34
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens34
UUID=cdbb00c6-a7be-4b63-a9ca-a3bb8f2cdf47
DEVICE=ens34
ONBOOT=yes # 改为开机启动
MASTER=bond6 # 设置主网卡名
SLAVE=yes # 标记为当前网卡为从网卡
# 配置主配置文件
[root@cloudstudy ~]# cat /etc/sysconfig/network-scripts/ifcfg-bond6
DEVICE=bond6
BOOTPROTO=static
NAME=bond6
TYPE=bond # type必须是bond
ONBOOT=yes
NETMASK=255.255.255.0
IPADDR=10.0.0.136
GATEWAY=10.0.0.2
USERCTL=no
BONDING_MASTER=yes
BONDING_OPTS="miimon=200 mode=1"
# 重启网络服务
[root@cloudstudy ~]# systemctl restart network
此时我们就可以通过ping来验证是不是配置成功了。当然,我们还可以通过下面的步骤来看看是不是配置成功了:
[root@cloudstudy ~]# cat /proc/net/bonding/bond6
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: ens33
MII Status: up # up状态
MII Polling Interval (ms): 200
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: ens33
MII Status: up # up状态
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:75:96:58
Slave queue ID: 0
Slave Interface: ens34
MII Status: up # up状态
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:75:96:62
Slave queue ID: 0