链路聚合模式
七种模式
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的介绍中有描述)。
是否需要交换机配置
整体配置情况:
- 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组进行互操作。
服务器网卡绑定模式 | 策略 | 交换机对接方式 | 说明 |
---|---|---|---|
Mode0 | balance-rr(round-robin),轮询模式 | 配置手工模式链路聚合 | 服务器所绑定的网卡修改成相同的MAC地址,需要交换机通过手工模式链路聚合与之对接 |
Mode1 | active-backup,主备倒换模式 | 配置对接接口在同一个 VLAN | 一个处于主状态,一个处于从状态,所有数据通过主状态的端口传输。当主状态的端口对应链路重修按故障时,数据通过从状态端口传输。因为此交换机对应的两个端口建议配置在同一个 VLAN |
Mode2 | balance-xor,基于HASH算法的负载均衡模式 | 配置手工模式链路聚合 | 服务器的多网卡基于指定的HASH策略传输数据包,需要交换机配置手工模式链路聚合与之对接 |
Mode3 | broadcast,广播模式 | 采用两台交换机对接且配置在不同VLAN | 服务器的多网卡对于同一份报文会复制两份分别从两个端口传输,建议使用两台交换机,且配置不同VLAN与之对接 |
Mode4 | 802.3ad | 配置LACP自动链路聚合 | 服务器的多网卡采用 LACP 模式绑定,对应的交换机采用 LACP 模式的链路聚合与之对接 |
Mode5 | transmit load balancing,适配器输出负载均衡模式 | 采用两台交换机对接 | 服务器的多网卡采用适配器传输负载均衡,交换机不需要配置 |
Mode6 | adaptive 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特性对比