wiki/运维/操作系统/Linux/笔记/24.多网卡Bond.md
2025-01-02 10:46:09 +08:00

102 lines
7.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

将多块网卡绑定同一IP地址对外提供服务可以实现高可用或者负载均衡。
## 1、工作模式
##### 1、mode=0(balance-rr)(平衡轮询策略)
链路负载均衡增加带宽支持容错一条链路故障会自动切换正常链路。交换机需要配置聚合口思科叫port channel。
**特点:**传输数据包顺序是依次传输第1个包走eth0下一个包就走eth1….一直循环下去,直到最后一个传输完毕),此模式提供负载平衡和容错能力;但是我们知道如果一个连接
或者会话的数据包从不同的接口发出的话,中途再经过不同的链路,在客户端很有可能会出现数据包无序到达的问题,而无序到达的数据包需要重新要求被发送,这样网络的吞吐量就会下降
##### 2、mode=1(active-backup)(主-备份策略)
主备模式只有一块网卡是active另一块是备用的standby所有流量都在active链路上处理交换机配置的是捆绑的话将不能工作因为交换机往两块网卡发包有一半包是丢弃的。
**特点:**只有一个设备处于活动状态当一个宕掉另一个马上由备份转换为主设备。mac地址是外部可见得从外面看来bond的MAC地址是唯一的以避免switch(交换机)发生混乱。
此模式只提供了容错能力;由此可见此算法的优点是可以提供高网络连接的可用性,但是它的资源利用率较低,只有一个接口处于工作状态,在有 N 个网络接口的情况下资源利用率为1/N
3、mode=2(balance-xor)(平衡策略)
表示XOR Hash负载分担和交换机的聚合强制不协商方式配合。需要xmit_hash_policy需要交换机配置port channel
特点基于指定的传输HASH策略传输数据包。缺省的策略是(源MAC地址 XOR 目标MAC地址) % slave数量。其他的传输策略可以通过xmit_hash_policy选项指定此模式提供负载平衡和容错能力
4、mode=3(broadcast)(广播策略)
表示所有包从所有网络接口发出,这个不均衡,只有冗余机制,但过于浪费资源。此模式适用于金融行业,因为他们需要高可靠性的网络,不允许出现任何问题。需要和交换机的聚合强制不协商方式配合。
特点在每个slave接口上传输每个数据包此模式提供了容错能力
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章节提及的包乱序问题。不同的实现可能会有不同的适应 性。
必要条件:
条件1ethtool支持获取每个slave的速率和双工设定
条件2switch(交换机)支持IEEE 802.3ad Dynamic link aggregation
条件3大多数switch(交换机)需要经过特定配置才能支持802.3ad模式
6、mode=5(balance-tlb)(适配器传输负载均衡)
是根据每个slave的负载情况选择slave进行发送接收时使用当前轮到的slave。该模式要求slave接口的网络设备驱动有某种ethtool支持而且ARP监控不可用。
特点不需要任何特别的switch(交换机)支持的通道bonding。在每个slave上根据当前的负载根据速度计算分配外出流量。如果正在接受数据的slave出故障了另一个slave接管失败的slave的MAC地址。
必要条件:
ethtool支持获取每个slave的速率
7、mode=6(balance-alb)(适配器适应性负载均衡)
在5的tlb基础上增加了rlb(接收负载均衡receive load balance).不需要任何switch(交换机)的支持。接收负载均衡是通过ARP协商实现的.
特点该模式包含了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(交换机)阻截。
必要条件:
条件1ethtool支持获取每个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个口只占了小部分流量。
## 2、配置方法
```shell
root@jumpserver:~# vim /etc/netplan/00-installer-config.yaml
network:
version: 2
ethernets:
eth1:
addresses: [] #绑定单网卡不需要写IP地址
dhcp4: no
eth2:
addresses: []
dhcp4: no
bonds:
bond0:
addresses:
- 192.168.30.10/24
gateway4: 192.168.30.250
nameservers:
addresses:
- 114.114.114.114
interfaces:
- eth1
- eth2
parameters: #参数
mode: balance-alb
```
```shell
/etc/sysconfig/network-scripts/ifcfg-bond0
NAME=bond0
TYPE=bond
DEVICE=bond0
BOOTPROTO=none
IPADDR=10.0.0.100
PREFIX-8
#miimon指定链路监测时间间隔。如果miimon=100那么系统每100ms 监测一次链路连接状态,如果有条线路不通就转入另一条线路
BONDING_OPTS="mode=1 miimon=100 fail_over_mac-1"
/etc/sysconfig/network-scripts/ifcfg-eth0
NAME=eth0
DEVICE=eth0
BOOTPROTO-none
MASTER=bond0
SLAVE=yes
ONBO0T=yes
/etc/sysconfig/network-scripts/ifcfg-eth1
NAME=eth1
DEVICE=eth1
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
ONBO0T=yes
```