链路聚合模式

七种模式

1、mode=0(balance-rr)(平衡抡循环策略)

链路负载均衡,增加带宽,支持容错,一条链路故障会自动切换正常链路。交换机需要配置聚合口,思科叫port channel。提供负载平衡和容错。该模式下两个网口都工作。

特点:
传输数据包顺序是依次传输(即:第1个包走eth0,下一个包就走eth1….一直循环下去,直到最后一个传输完毕),此模式提供负载平衡和容错能力;但是我们知道如果一个连接
或者会话的数据包从不同的接口发出的话,中途再经过不同的链路,在客户端很有可能会出现数据包无序到达的问题,而无序到达的数据包需要重新要求被发送,这样网络的吞吐量就会下降

优点:可用带宽提高一倍
缺点:需要接入交换机做端口聚合,否则可能无法使用

2、mode=1(active-backup)(主-备份策略)

这个是主备模式,只有一块网卡是active,另一块是备用的standby(backup),所有流量都在active链路上处理,交换机配置的是捆绑的话将不能工作,因为交换机往两块网卡发包,有一半包是丢弃的。本模式可以和任何二层(Layer-II)交换机一起工作。

特点:
只有一个设备处于活动状态,当一个宕掉另一个马上由备份转换为主设备。mac地址是外部可见得,从外面看来,bond的MAC地址是唯一的,以避免switch(交换机)发生混乱。
此模式只提供了容错能力;由此可见此算法的优点是可以提供高网络连接的可用性,但是它的资源利用率较低,只有一个接口处于工作状态,在有 N 个网络接口的情况下,资源利用率为1/N

优点:冗余性高
缺点:链路利用率低,两块网卡只有1块在工作,N块网卡绑定时利用率是1/N

3、mode=2(balance-xor)(平衡策略)

表示XOR Hash负载分担,和交换机的聚合强制不协商方式配合。(需要xmit_hash_policy,需要交换机配置port channel)基于HASH算法的负载均衡模式,网卡的分流按照xmit_hash_policy的TCP协议层设置来进行HASH计算分流,使各种不同处理来源的访问都尽量在同一个网卡上进行处理。

特点:
基于指定的传输HASH策略传输数据包。缺省的策略是:(源MAC地址 XOR 目标MAC地址) % slave数量。其他的传输策略可以通过xmit_hash_policy选项指定,此模式提供负载平衡和容错能力

4、mode=3(broadcast)(广播策略)

表示所有包从所有网络接口发出,这个不均衡,只有冗余机制,但过于浪费资源。此模式适用于金融行业,因为他们需要高可靠性的网络,不允许出现任何问题。需要和交换机的聚合强制不协商方式配合。所有被绑定的网卡都将得到相同的数据,一般用于十分特殊的网络需求。

特点:
在每个slave接口上传输每个数据包,此模式提供了容错能力

必要条件:
条件1:ethtool支持获取每个slave的速率和双工设定
条件2:switch(交换机)支持IEEE802.3ad Dynamic link aggregation
条件3:大多数switch(交换机)需要经过特定配置才能支持802.3ad模式

5、mode=4(802.3ad)(IEEE 802.3ad 动态链接聚合)

表示支持802.3ad协议,和交换机的聚合LACP方式配合(需要xmit_hash_policy).标准要求所有设备在聚合操作时,要在同样的速率和双工模式,而且,和除了balance-rr模式外的其它bonding负载均衡模式一样,任何连接都不能使用多于一个接口的带宽。

特点:
创建一个聚合组,它们共享同样的速率和双工设定。根据802.3ad规范将多个slave工作在同一个激活的聚合体下。
外出流量的slave选举是基于传输hash策略,该策略可以通过xmit_hash_policy选项从缺省的XOR策略改变到其他策略。需要注意的 是,并不是所有的传输策略都是802.3ad适应的,
尤其考虑到在802.3ad标准43.2.4章节提及的包乱序问题。不同的实现可能会有不同的适应 性。

必要条件:
条件1:ethtool支持获取每个slave的速率和双工设定
条件2:switch(交换机)支持IEEE 802.3ad Dynamic link aggregation
条件3:大多数switch(交换机)需要经过特定配置才能支持802.3ad模式

6、mode=5(balance-tlb)(适配器传输负载均衡)

是根据每个slave的负载情况选择slave进行发送,接收时使用当前轮到的slave。该模式要求slave接口的网络设备驱动有某种ethtool支持;而且ARP监控不可用。适配器输出负载均衡模式,输出的数据会通过所有被绑定的网卡输出,接收数据时则只选定其中一块网卡。如果正在用于接收数据的网卡发生故障,则由其他网卡接管,要求所用的网卡及网卡驱动可通过ethtool命令得到speed信息。

特点:
不需要任何特别的switch(交换机)支持的通道bonding。在每个slave上根据当前的负载(根据速度计算)分配外出流量。如果正在接受数据的slave出故障了,另一个slave接管失败的slave的MAC地址。

必要条件:
ethtool支持获取每个slave的速率

7、mode=6(balance-alb)(适配器适应性负载均衡)

在5的tlb基础上增加了rlb(接收负载均衡receive load balance)在接收数据的同时实现负载均衡.不需要任何switch(交换机)的支持。接收负载均衡是通过ARP协商实现的.适配器输入/输出负载均衡模式,在"模式5"的基础上,在接收数据的同时实现负载均衡,除要求ethtool命令可得到speed信息外,还要求支持对网卡MAC地址的动态修改功能。

特点:
该模式包含了balance-tlb模式,同时加上针对IPV4流量的接收负载均衡(receive load balance, rlb),而且不需要任何switch(交换机)的支持。接收负载均衡是通过ARP协商实现的。bonding驱动截获本机发送的ARP应答,并把源硬件地址改写为bond中某个slave的唯一硬件地址,从而使得不同的对端使用不同的硬件地址进行通信。
来自服务器端的接收流量也会被均衡。当本机发送ARP请求时,bonding驱动把对端的IP信息从ARP包中复制并保存下来。当ARP应答从对端到达 时,bonding驱动把它的硬件地址提取出来,并发起一个ARP应答给bond中的某个slave。
使用ARP协商进行负载均衡的一个问题是:每次广播 ARP请求时都会使用bond的硬件地址,因此对端学习到这个硬件地址后,接收流量将会全部流向当前的slave。这个问题可以通过给所有的对端发送更新 (ARP应答)来解决,应答中包含他们独一无二的硬件地址,从而导致流量重新分布。
当新的slave加入到bond中时,或者某个未激活的slave重新 激活时,接收流量也要重新分布。接收的负载被顺序地分布(round robin)在bond中最高速的slave上
当某个链路被重新接上,或者一个新的slave加入到bond中,接收流量在所有当前激活的slave中全部重新分配,通过使用指定的MAC地址给每个 client发起ARP应答。下面介绍的updelay参数必须被设置为某个大于等于switch(交换机)转发延时的值,从而保证发往对端的ARP应答 不会被switch(交换机)阻截。

必要条件:
条件1:ethtool支持获取每个slave的速率;
条件2:底层驱动支持设置某个设备的硬件地址,从而使得总是有个slave(curr_active_slave)使用bond的硬件地址,同时保证每个bond 中的slave都有一个唯一的硬件地址。如果curr_active_slave出故障,它的硬件地址将会被新选出来的 curr_active_slave接管
其实mod=6与mod=0的区别:mod=6,先把eth0流量占满,再占eth1,….ethX;而mod=0的话,会发现2个口的流量都很稳定,基本一样的带宽。而mod=6,会发现第一个口流量很高,第2个口只占了小部分流量。

xmit_hash_policy参数

此参数对mode参数中的2、4模式有影响,缺省设置是layer2:
layer2-使用硬件MAC地址的XOR来生成hash。
计算公式:(源MAC地址 XOR 目的MAC地址)% slave数目

该算法会将某个网络对(network peer)上所有的流量全部分配到同一个slave上。

layer3+4-通过TCP及UDP端口及其IP地址进行HASH计算。
计算公式:((portsrc⊕portdest) ⊕ (IPsrc⊕IPdest)) % Nslave

备注

mode参数中的0、2、3、4模式要求交换机支持“ports group”功能并能进行相应的设置,例如在Cisco中要将所连接的端口设为“trunk group”。

在基本的balance模式(balance-rr或者balance-xor)下,bonding可以在任何支持etherchannel(也称为trunking)的系统运行。大多数目前的可管理交换机都有支持,很多不可管理的交换机也有支持。

高级balance模式(balance-tlb和balance-alb)没有特别的交换机需求,但需要设备驱动支持特定功能(在balance-tlb和balance-alb的介绍中有描述)。

是否需要交换机配置

image.png

整体配置情况:

  • 1、需要手工模式链路聚合:mode0,mode2,mode3(不同vlan)
  • 2、需要LACP链路聚合:mode4;
  • 3、无需任何配置的有:mode1(相同vlan),mode5,mode6。

网口绑定的工作模式如下:

  • 在网口的绑定的工作模式中active-backup、balance-tlb和balance-alb模式不需要对交换机做任何的配置。
  • 802.3ad模式需要交换机有对应的配置为802.3ad聚合的端口,具体的配置方法因交换机类型而异,例如,Cisco 3550系列交换机要求对应的端口首先必须被分组在一个单独的etherchannel实例,然后将这个etherchannel设置为“lacp”模式已启用802.3ad(取代标准EtherChannel)。
  • balance-rr、balance-xor和broadcast模式通常需要交换机对应的端口被分组在一起,不同的交换机对分组有着不同的命名,可能会被叫做“etherchannel”(例如上文的Cisco示例),或者叫做“trunk group”,或者其他类似的命名。对于这些模式,每个交换机也会有它自己的针对到bond的传输策略的配置选项。典型的选择包括对每个MAC地址或者IP地址进行XOR操作,两端的传输策略不一定完全一致。对这三种模式,bonding模式会针对一个EtherChannel组选择一种传输策略;所有这三种模式都会和另一个EtherChannel组进行互操作。
服务器网卡绑定模式策略交换机对接方式说明
Mode0balance-rr(round-robin),轮询模式配置手工模式链路聚合服务器所绑定的网卡修改成相同的MAC地址,需要交换机通过手工模式链路聚合与之对接
Mode1active-backup,主备倒换模式配置对接接口在同一个 VLAN一个处于主状态,一个处于从状态,所有数据通过主状态的端口传输。当主状态的端口对应链路重修按故障时,数据通过从状态端口传输。因为此交换机对应的两个端口建议配置在同一个 VLAN
Mode2balance-xor,基于HASH算法的负载均衡模式配置手工模式链路聚合服务器的多网卡基于指定的HASH策略传输数据包,需要交换机配置手工模式链路聚合与之对接
Mode3broadcast,广播模式采用两台交换机对接且配置在不同VLAN服务器的多网卡对于同一份报文会复制两份分别从两个端口传输,建议使用两台交换机,且配置不同VLAN与之对接
Mode4802.3ad配置LACP自动链路聚合服务器的多网卡采用 LACP 模式绑定,对应的交换机采用 LACP 模式的链路聚合与之对接
Mode5transmit load balancing,适配器输出负载均衡模式采用两台交换机对接服务器的多网卡采用适配器传输负载均衡,交换机不需要配置
Mode6adaptive load balancing,适配器输入/输出负载均衡模式采用两台交换机对接服务器的多网卡采用适配器适应性负载均衡,交换机不需要配置

常用模式

常用的有三种:

  • mode=0:平衡负载模式,有自动备援,但需要”Switch”支援及设定。
  • mode=1:自动备援模式,其中一条线若断线,其他线路将会自动备援。
  • mode=6:平衡负载模式,有自动备援,不必”Switch”支援及设定。

相关命令

如何查看机器中的网卡bonding情况

查看是否存在bond网卡:

ip add

如何发现有带有 bondX 名字的网卡,那么说明本机是存在网卡bonding情况的。

然后查看网卡bonding的情况:

cat /proc/net/bonding/bond0

查看内核是否支持网卡bonding功能:

lsmod | grep bonding

配置实例

bond0

环境

2个物理网口分别是:eth0,eth1
绑定后的虚拟口是:bond0
服务器IP是:10.10.10.1

配置设定文件

cat /etc/sysconfig/network-scripts/ifcfg-eth0 
DEVICE=eth0
HWADDR=EC:F4:BB:DC:4C:0C
TYPE=Ethernet
UUID=669f0694-9c52-4792-bd67-22c9d2c17acb
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=none
MASTER=bond0
SLAVE=yes

cat /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
HWADDR=EC:F4:BB:DC:4C:0D
TYPE=Ethernet
UUID=1d2f30f4-b3f0-41a6-8c37-54f03115f7bd
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=none
MASTER=bond0
SLAVE=yes

cat /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
NAME='System bond0'
TYPE=Ethernet
NM_CONTROLLED=no
USERCTL=no
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.1.100
NETMASK=255.255.255.0
BONDING_OPTS='mode=0 miimon=100'
IPV6INIT=no

修改modprobe相关设定文件,并加载bonding模块:

1.在这里,我们直接创建一个加载bonding的专属设定文件/etc/modprobe.d/bonding.conf

vi /etc/modprobe.d/bonding.conf
alias bond0 bonding
options bonding mode=0 miimon=200

miimon=100,每100毫秒 (即0.1秒) 监测一次路连接状态,如果有一条线路不通就转入另一条线路; Linux的多网卡绑定功能使用的是内核中的"bonding"模块。如果修改为其它模式,只需要在BONDING_OPTS中指定mode=Number即可。USERCTL=no --是否允许非root用户控制该设备

2.加载模块(重启系统后就不用手动再加载了)

modprobe bonding

3.确认模块是否加载成功:

lsmod | grep bonding
bonding 100065 0

重启一下网络,然后确认一下状况:

cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth1
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: eth0
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: ec:f4:bb:dc:4c:0c
Slave queue ID: 0
Slave Interface: eth1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: ec:f4:bb:dc:4c:0d
Slave queue ID: 0

从上面的确认信息中,我们可以看到3个重要信息:
1.现在的bonding模式是active-backup
2.现在Active状态的网口是eth0
3.bond0,eth1的物理地址和处于active状态下的eth0的物理地址相同,这样是为了避免上位交换机发生混乱。

任意拔掉一根网线,然后再访问你的服务器,看网络是否还是通的。

系统启动自动绑定、增加默认网关:

vi /etc/rc.d/rc.local
#追加
ifenslave bond0 eth0 eth1  # 只有bond1 主备模式需要此配置
route add default gw 10.10.10.1

交换机侧配置

[DeviceA] interface Bridge-Aggregation 1 //默认静态
[DeviceA-Bridge-Aggregation1] quit

[DeviceA] interface GigabitEthernet 4/0/1
[DeviceA-GigabitEthernet4/0/1] port link-aggregation group 1
[DeviceA-GigabitEthernet4/0/1] quit

[DeviceA] interface GigabitEthernet 4/0/2
[DeviceA-GigabitEthernet4/0/2] port link-aggregation group 1
[DeviceA-GigabitEthernet4/0/2] quit

bond1

具体操作步骤就下面这步不同,其它一致。
vim /etc/modprobe.d/bonding.conf

alias bond0 bonding
options bond0 miimon=100 mode=1    # 模式1

vim /etc/rc.d/rc.local # eth0 eth1的工作顺序(仅在主备模式下需要做这个设置,其他的模式不需要做这个设置)

# 另外如果eth0和eth1没写MASER和SLAVE,则需要增加开机启动脚本在 /etc/rc.d/rc.local里加上
ifenslave bond0 eth0 eth1

注:在高可用的环境下,网卡配置bonding后,vip_nic要为bond0

cat /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
NAME='System bond0'
TYPE=Ethernet
NM_CONTROLLED=no
USERCTL=no
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.1.100
NETMASK=255.255.255.0
BONDING_OPTS='mode=1 miimon=100'
IPV6INIT=no

bond4

具体操作步骤就下面这步不同,其它一致。
```bash
vim /etc/modprobe.d/bonding.conf
alias bond0 bonding
options bond0 miimon=100 mode=4 lacp_rate=1    # 模式4

注意的是:交换机和服务器连接的那块要配置动态的channel-group (需要配置交换机的动态链路聚合)

bond4下启动vlan子接口

实例:未配置VLAN的mode4的网卡配置文件

# cat ifcfg-eth2
DEVICE=eth2
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
MASTER=bond0
SLAVE=yes

# cat ifcfg-eth3
DEVICE=eth3
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
MASTER=bond0
SLAVE=yes

# cat ifcfg-bond0
DEVICE=bond0
TYPE=Ethernet
BOOTPROTO=static
ONBOOT=yes
IPADDR=10.20.42.3
NETMASK=255.255.255.0
GATEWAY=10.20.42.254

# cat /etc/modprobe.d/bonding.conf 
alias bond0 bonding
options bond0 miimon=100 mode=4

实例:配置了VLAN-tag的网卡bond文件

cat ifcfg-eth0 
DEVICE=eth0
IPV6INIT=no
MTU=1500
NM_CONTROLLED=no
ONBOOT=yes
MASTER=bond0
SLAVE=yes
USERCTL=no
BOOTPROTO=none

cat ifcfg-eth1 
DEVICE=eth1
IPV6INIT=no
MTU=1500
NM_CONTROLLED=no
ONBOOT=yes
MASTER=bond0
SLAVE=yes
USERCTL=no
BOOTPROTO=none

cat ifcfg-bond0
DEVICE=bond0
ONBOOT=yes
TYPE=Ethernet
BOOTPROTO=none
BONDING_OPTS='mode=4 miimon=100'

# 此时的VLAN 的tag就是 101
cat ifcfg-bond0.101      
DEVICE=bond0.101
ONBOOT=yes
TYPE=Ethernet
BOOTPROTO=none
IPADDR=10.101.1.7
NETMASK=255.255.255.0
VLAN=yes
GATEWAY=10.101.1.254

# 开机时加载bond模块
cat /etc/modprobe.d/bond.conf   
alias bond0 bonding

# 打了VLAN的,机器必需具备8021q模块才可以配通IP
lsmod |grep 8021q         
8021q                  20362  0 
garp                    7152  1 8021q


# 永久加载8021q module
cat > /etc/sysconfig/modules/8021q.modules << EOF
\#\!/bin/sh
if [ ! `lsmod | grep 8021q` ] ; then
        exec /sbin/modprobe 8021q >/dev/null 2>&1
fi
EOF

# 加载模块
modprobe 8021q 
# vlan子接口,发出去的包是带有vlan tag 110的
vim  /etc/sysconfig/network-scripts/ifcfg-bond0.110  
DEVICE=bond0.110 # vlan子接口要“.”分隔
BOOTPROTO=none
ONBOOT=yes
USERCTL=no
VLAN=yes         # 写配置文件,就不要安装vconfig来配置vlan子接口
IPADDR=192.168.110.3
PREFIX=24

交换机配置

[DeviceA] interface Bridge-Aggregation 1
[DeviceA-Bridge-Aggregation1] link-aggregation mode dynamic
[DeviceA-Bridge-Aggregation1] quit

[DeviceA] interface GigabitEthernet 4/0/1
[DeviceA-GigabitEthernet4/0/1] port link-aggregation group 1
[DeviceA-GigabitEthernet4/0/1] quit

[DeviceA] interface GigabitEthernet 4/0/2
[DeviceA-GigabitEthernet4/0/2] port link-aggregation group 1
[DeviceA-GigabitEthernet4/0/2] quit

bond6

https://www.cnblogs.com/kaishirenshi/p/10245228.html

nmcli

基本命令

# 显示所有设备和连接状态
nmcli device 
DEVICE        TYPE      STATE                   CONNECTION  
eth0          ethernet  connected               System eth0 
cni0          bridge    connected (externally)  cni0        
flannel.1     vxlan     connected (externally)  flannel.1   
docker0       bridge    connected (externally)  docker0     
kube-ipvs0    dummy     unmanaged               --          
veth04bb8e89  ethernet  unmanaged               --          
veth13904ae7  ethernet  unmanaged               --          
veth5925c13a  ethernet  unmanaged               --          
veth5a651252  ethernet  unmanaged               --          
tunl0         iptunnel  unmanaged               --          
lo            loopback  unmanaged               --          

# 显示当前活动连接
nmcli connection show -a
NAME         UUID                                  TYPE      DEVICE    
System eth0  5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03  ethernet  eth0      
cni0         ed270c19-8063-4525-b2e2-33fa9a3be7b7  bridge    cni0      
flannel.1    7670f865-68eb-4144-b505-af4599bb25b5  vxlan     flannel.1 
docker0      8322e203-178f-4249-9cdd-78b8cdd2b7cb  bridge    docker0   


# 查看连接详细信息
nmcli device show eth0 
GENERAL.DEVICE:                         eth0
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         52:54:00:A4:32:6F
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (connected)
GENERAL.CONNECTION:                     System eth0
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/2
WIRED-PROPERTIES.CARRIER:               on
IP4.ADDRESS[1]:                         10.0.8.6/22
IP4.ADDRESS[2]:                         10.0.8.100/32
IP4.GATEWAY:                            10.0.8.1
IP4.ROUTE[1]:                           dst = 0.0.0.0/0, nh = 10.0.8.1, mt = 100
IP4.ROUTE[2]:                           dst = 10.0.8.0/22, nh = 0.0.0.0, mt = 100
IP4.DNS[1]:                             183.60.83.19
IP4.DNS[2]:                             183.60.82.98
IP6.ADDRESS[1]:                         fe80::5054:ff:fea4:326f/64
IP6.GATEWAY:                            --
IP6.ROUTE[1]:                           dst = ff00::/8, nh = ::, mt = 256, table=255
IP6.ROUTE[2]:                           dst = fe80::/64, nh = ::, mt = 256

# 启用网络/断开网络
nmcli device connect/disconnect ens33

# 配置静态IP
## 配置 IP
nmcli connection add type ethernet con-name TEST ifname ens33 ip4 192.168.56.170 gw4 192.168.56.1
## 修改 DNS
nmcli connection modify TEST ipv4.dns "192.168.56.2"
## 启动新网络配置
nmcli connection up TEST ifname ens33
## 查看配置信息
nmcli -p connection show TEST
## 配置 dhcp 启动
nmcli connection add type ethernet con-name TEST ifname ens33

网络组

Bonding 和 nmcli的网络组二者实现的功能一样,但从某种角度,网络组要比Bonding的技术要好

在redhat7.0以上版本中网络方面的相关服务被NetworkManager所接管,所以在配置多网卡绑定时,redhat专门提供了team工具来实现多网卡的绑定。

创建bond网卡

nmcli con  add type team con-name team0 ifname team0 config '{"runner":{"name":"METHOD"}}'

METHOD 是以下的其中一个:broadcast、activebackup、roundrobin、loadbalance 或者 lacp。

  • 第一种模式:mod=0 ,即:(balance-rr)Round-robin policy(平衡抡循环策略)交换机配置Eth-Trunk
  • 第二种模式:mod=1,即: (active-backup)Active-backup policy(主-备份策略)
  • 第三种模式:mod=2,即:(balance-xor)XOR policy(平衡策略)
  • 第四种模式:mod=3,即:broadcast(广播策略)
  • 第五种模式:mod=4,即:(802.3ad)IEEE 802.3ad Dynamic link aggregation(IEEE802.3ad 动态链接聚合)
  • 第六种模式:mod=5,即:(balance-tlb)Adaptive transmit load balancing(适配器传输负载均衡)
  • 第七种模式:mod=6,即:(balance-alb)Adaptive load balancing(适配器适应性负载均衡)

网络组的注意事项

  • 启动网络组接口不会自动启动网络组中的port接口
  • 启动网络组接口中的port接口总会自动启动网络组接口
  • 禁用网络组接口会自动禁用网络组中的port接口
  • 没有port接口的网络组接口可以启动静态IP连接
  • 启用DHCP连接时,没有port接口的网络组会等待port接口的加入

配置实例

创建网络组接口

nmcli con add type team con-name team0 ifname team0 config '{"runner": {"name": "activebackup"}}'

# 配置 IP
nmcli con mod team0 ipv4.addresses '192.168.0.100/24'
nmcli con mod team0 ipv4.method manual

# 分配网卡
nmcli con add type team-slave con-name team0-port1 ifname eno1 master team0
nmcli con add type team-slave con-name team0-port2 ifname eno2 master team0
	
# 查看接口状态
teamdctl team0 state(查看状态)

# 关闭其中一个网口测试
nmcli dev disconnect ens33

网络接口配置:Bonding

# 添加 bonding
nmcli con add type bond con-name mybond0 ifname mybond0 mode active-backup

# 添加从接口
nmcli con add type bond-slave ifname ens7 master mybond0
nmcli con add type bond-slave ifname ens3 master mybond0

# 注:如从属接口没有提供连接名,则该名称是接口名称加类型构成

# 启动从接口
nmcli con up bond-slave-eth0
nmcli con up bond-slave-eth1

# 启动绑定接口
nmcli con up mybond0

# 关闭并删除 bond
nmcli con down mybond0
rm –f /etc/sysconfig/network-scripts/ifcfg-*bond*
nmcli connection reload

虚拟机中配置多网卡绑定注意事项

bond

配置后,修改bond接口配置文件,加入 fail_over_mac=1

vim ifcfg-bond6
TYPE=Bond
BOOTPROTO=none
DEVICE=bond6
ONBOOT=yes
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=114.114.114.114
BONDING_OPTS='miimon=100 mode=6 fail_over_mac=1'

这里需要特别注意的地方:

BONDING_OPTS='miimon=100 mode=6 fail_over_mac=1' 

如果是虚拟机,fail_over_mac=1 是必须要带上的,否则vmware会出现告警信息,配置起来能正常用,但是在进行准备切换时,是无法进行的。切记!

team

创建 team 接口时,加入 "hwaddr_policy":"by_active" 参数

nmcli con add type team ifname team1 con-name team1 config '{"runner":{"name":"activebackup", "hwaddr_policy":"by_active"}}'  ipv4.method manual ipv4.address 192.168.1.100/24 ipv4.gateway 192.168.1.1 ipv4.dns 114.114.114.114

配置完毕,在虚拟机环境中一定要注意 "hwaddr_policy":"by_active" 这个参数意义和 fail_over_mac =1 是一致的,在虚拟机环境中必须添加上,否则网卡高可用失败。

如果已经配置完,但是没有添加 "hwaddr_policy":"by_active" 参数,可以用命令修改当前接口:

nmcli connection modify team0 team.runner-hwaddr-policy by_active

然后up/down team0

nmcli connection down team0
nmcli connection up team0

使用 nmcli connection show team0 | grep hwaddr 确认是否生效

bond接口与team接口的区别

bond接口:仅支持 2块 网卡
网卡bond是通过多张网卡绑定为一个逻辑网卡,实现本地网卡的冗余,带宽扩容和负载均衡,在生产场景中是一种常用的技术

team接口:与bond接口功能类似,区别在于team不需要手动加载相应的内核模块, 它有更强的拓展性,支持8块网卡
team实现的功能跟bond相似,team本质上也是一个虚拟的网卡驱动(networkdevicedriver),只不过并没有真实的物理网卡与之对应,而是由这个虚拟网卡去“管辖”一系列的真实的物理网卡,它的代码结构和一般网卡驱动的代码结构非常类似。

red hat 官方给出的team和bond特性对比
image.png