交换机可以配置链路聚合,提供线路的冗余的同时提高带宽吞吐。服务器也可以通过bond/team技术做网口硬件层面的冗余,防止单个网口应用的单点故障以及提高带吞吐量。bond模式最多可以添加两块网卡,team模式最多可以添加八块网卡。
一、bond模式
-
mode=0(balance-rr)(平衡轮循环策略)
链路负载均衡,增加带宽,支持容错,一条链路故障会自动切换正常链路。交换机需要配置静态链路聚合。
特点:传输数据包顺序是依次传输(即:第1个包走eth0,下一个包就走eth1….一直循环下去,直到最后一个传输完毕),此模式提供负载平衡和容错能力;但是我们知道如果一个连接或者会话的数据包从不同的接口发出的话,中途再经过不同的链路,在客户端很有可能会出现数据包无序到达的问题,而无序到达的数据包需要重新要求被发送,这样网络的吞吐量就会下降。 -
mode=1(active-backup)(主-备份策略)
这个是主备模式,只有一块网卡是active,另一块是备用的standby,所有流量都在active链路上处理。
特点:只有一个设备处于活动状态,当一个宕掉另一个马上由备份转换为主设备。mac地址是外部可见得,从外面看来,bond的MAC地址是唯一的,以避免switch(交换机)发生混乱。此模式只提供了容错能力;由此可见此算法的优点是可以提供高网络连接的可用性,但是它的资源利用率较低,只有一个接口处于工作状态,在有 N 个网络接口的情况下,资源利用率为1/N,连接交换机的两个端口不需要做LACP(链路聚合)。 -
mode=2(balance-xor)(平衡策略)
表示XOR Hash负载分担,和交换机的聚合强制不协商方式配合。(需要xmit_hash_policy,需要交换机配置port channel)
特点:基于指定的传输HASH策略传输数据包。缺省的策略是:(源MAC地址 XOR 目标MAC地址) % slave数量。其他的传输策略可以通过xmit_hash_policy选项指定,此模式提供负载平衡和容错能力。 -
mode=3(broadcast)(广播策略)
表示所有包从所有网络接口发出,这个不均衡,只有冗余机制,但过于浪费资源。此模式适用于金融行业,因为他们需要高可靠性的网络,不允许出现任何问题。需要和交换机的聚合强制不协商方式配合。
特点:在每个slave接口上传输每个数据包,此模式提供了容错能力。 -
mode=4(802.3ad)(IEEE 802.3ad 动态链接聚合)
表示支持802.3ad协议,和交换机的动态链路方式配合(需要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模式 -
mode=5(balance-tlb)(适配器传输负载均衡)
是根据每个slave的负载情况选择slave进行发送,接收时使用当前轮到的slave。该模式要求slave接口的网络设备驱动有某种ethtool支持;而且ARP监控不可用。
特点:不需要任何特别的switch(交换机)支持的通道bonding。在每个slave上根据当前的负载(根据速度计算)分配外出流量。如果正在接受数据的slave出故障了,另一个slave接管失败的slave的MAC地址。
必要条件:
ethtool支持获取每个slave的速率 -
mode=6(balance-alb)(适配器适应性负载均衡)
在5的tlb基础上增加了rlb(接收负载均衡receive load balance),不需要任何switch(交换机)的支持。接收负载均衡是通过ARP协商实现的。
必要条件:
条件1:ethtool支持获取每个slave的速率;
条件2:底层驱动支持设置某个设备的硬件地址,从而使得总是有个slave(curr_active_slave)使用bond的硬件地址,同时保证每个bond 中的slave都有一个唯一的硬件地址。如果curr_active_slave出故障,它的硬件地址将会被新选出来的 curr_active_slave接管。
其实mode=6与mode=0的区别:mode=6,先把eth0流量占满,再占eth1,….ethX;而mod=0的话,会发现2个口的流量都很稳定,基本一样的带宽。而mode=6,会发现第一个口流量很高,第2个口只占了小部分流量。
二、bond配置
- 网卡配置
# 有其他未使用的网卡配置需要移除或者 ONBOOT=NO,否则会影响bond网卡启动
# vim /etc/sysconfig/network-scripts/ifcfg-em1
DEVICE=em1
TYPE=Ethernet
BOOTPROTO=none
NM_CONTROLLED=no
ONBOOT=yes
MASTER=bond0
SLAVE=yes
# vim /etc/sysconfig/network-scripts/ifcfg-em2
DEVICE=em2
TYPE=Ethernet
BOOTPROTO=none
NM_CONTROLLED=no
ONBOOT=yes
MASTER=bond0
SLAVE=yes
# vim /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
TYPE=bond
BOOTPROTO=static
NM_CONTROLLED=no
ONBOOT=yes
IPADDR=10.10.1.112
NETMASK=255.255.255.0
GATEWAY=10.10.1.1
DNS1=114.114.114.114
DNS2=8.8.8.8
- 内核加载bond模块
# modprobe bonding
# lsmod |grep bond
bonding 149864 0
# 写进配置文件, miimon链路检测时间,毫秒
# cat /etc/modprobe.d/bonding.conf
alias bond0 bonding
options bonding mode=0 miimon=100
- 查看bond状态
# cat /proc/net/bonding/bond0
Bonding Mode: load balancing (round-robin)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: em1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 34:73:5a:9a:82:64
Slave queue ID: 0
Slave Interface: em2
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 34:73:5a:9a:82:65
Slave queue ID: 0
三、bond桥接
- 安装brctl命令
# 安装这个命令是为了支持网卡桥接,没有这个命令,不能桥接网卡
# yum install bridge-utils -y
- 对 bond网卡配置桥接,em1和em2配置依旧如上
# vim /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
TYPE=bond
BOOTPROTO=none
NM_CONTROLLED=no
ONBOOT=yes
BRIDGE=br0
# vim /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
TYPE=Bridge
BOOTPROTO=none
ONBOOT=yes
NM_CONTROLLED=no
IPADDR=10.10.1.112
NETMASK=255.255.255.0
GATEWAY=10.10.1.1
DNS1=114.114.114.114
DNS2=8.8.8.8
四、team模式
- team 模式介绍
链路聚合与双网卡绑定几乎相同,可以实现多网卡绑定主从荣誉,负载均衡,提高网络访问流量。但链路聚合与双网卡绑定技术(bond)不同点就在于,双网卡绑定只能使用两个网卡绑定,而链路聚合最多可将8个网卡汇聚同时做绑定,此聚合模式称之为team,team模式是有CentOS 7 才出现的。 - team 模式种类
1、broadcast - 广播容错
2、roundrobin - 平衡轮询
3、activebackup - 主备模式
4、loadbalance - 负载均衡
五、team配置
# 本次直接使用 nmcli 命令行方式管理
# mv /etc/sysconfig/network-scripts/ifcfg-ens* /tmp/backup #删除原有网卡配置文件
# nmcli device status # 查看设备状态
# systemctl restart network
# nmcli connection add type team con-name team0 ifname team0 config '{"runner":{"name":"loadbalance"}}' #创建链路聚合,模式为 loadbalance
# nmcli connection show # 查看网卡状态
# nmcli connection add type team-slave con-name team0-1 ifname em1 master team0
# nmcli connection add type team-slave con-name team0-2 ifname em2 master team0
# nmcli connection up team0-1 # 开启team0-1
# nmcli connection up team0-2 # 开启team0-2
# 添加team0 网卡配置
# nmcli connection modify team0 ipv4.addresses 192.168.3.200/24 ipv4.gateway 192.168.3.254 ipv4.method manual
# nmcli connection up team0 # 开启team0
# ls /etc/sysconfig/network-scripts/ # 可以看到生成了三个有关team模式的配置文件,主接口和两个子接口配置
ifcfg-team0 ifcfg-team0-1 ifcfg-team0-2 ...
# nmcli device status
# teamdctl team0 state # 查看team0链路状态,如果是主备模式可以查看是当前工作的网卡
# ifdown/ifup em1 # 测试断开一个网卡,看丢包情况
六、bond和team差别
- bond只能是双网卡绑定,team不需要手动加载相应内核模块和有更强的拓展性,最高可以绑定8块网卡。
- 其他参数区别
Feature | Bonding | Team |
---|---|---|
broadcast TX policy | Yes | Yes |
round-robin TX policy | Yes | Yes |
active-backup TX policy | Yes | Yes |
LACP (802.3ad) support | Yes | Yes |
hash-based TX policy | Yes | Yes |
TX load-balancing support (TLB) | Yes | Yes |
VLAN support | Yes | Yes |
LACP hash port select | Yes | Yes |
Ethtool link monitoring | Yes | Yes |
ARP link monitoring | Yes | Yes |
ports up/down delays | Yes | Yes |
configurable via Network Manager (gui, tui, and cli) | Yes | Yes |
multiple device stacking | Yes | Yes |
highly customizable hash function setup | No | Yes |
D-Bus interface | No | Yes |
ØMQ interface | No | Yes |
port priorities and stickiness (“primary” option enhancement) | No | Yes |
separate per-port link monitoring setup | No | Yes |
logic in user-space | No | Yes |
modular design | No | Yes |
NS/NA (IPV6) link monitoring | No | Yes |
load-balancing for LACP support | No | Yes |
lockless TX/RX path | No | Yes |
user-space runtime control | Limited | Full |
multiple link monitoring setup | Limited | Yes |
extensibility | Hard | Easy |
performance overhead | Low | Very Low |
RX load-balancing support (ALB) | Yes | Planned |
RX load-balancing support (ALB) in bridge or OVS | No | Planned |
七、总结
在网卡绑定选项上可以根据操作系统来选择,team模式是 CentOS7 加上的,如果是 CentOS7及以上系统可选用team模式绑定,支持更多拓展性以及更节省资源。另外如果是要做桥接网络的话,目前测试只能使用bond模式,team模式无法桥接。
Reference:
- https://blog.csdn.net/mukouping82/article/details/116404780
- https://www.redhat.com/en/blog/if-you-bonding-you-will-love-teaming?source=onsite&key=team
- https://www.cnblogs.com/liuhedong/p/10695969.html