Ubuntu18.04网卡绑定

模块检查

1
2
3
modinfo bonding | more
sudo modprobe bonding
sudo lsmod | grep bonding

绑定模式说明

1
2
3
4
5
6
7
0:(balance-rr) Round-robin policy: (平衡轮询策略):传输数据包顺序是依次传输,直到最后一个传输完毕,此模式提供负载平衡和容错能力。
1:(active-backup) Active-backup policy:(活动备份策略):只有一个设备处于活动状态。一个宕掉另一个马上由备份转换为主设备。mac地址是外部可见得。此模式提供了容错能力。
2:(balance-xor) XOR policy:(平衡策略):传输根据[(源MAC地址xor目标MAC地址)mod设备数量]的布尔值选择传输设备。 此模式提供负载平衡和容错能力。
3:(broadcast) Broadcast policy:(广播策略):将所有数据包传输给所有设备。此模式提供了容错能力。
4:(802.3ad) IEEE 802.3ad Dynamic link aggregation. IEEE 802.3ad 动态链接聚合:创建共享相同的速度和双工设置的聚合组。此模式提供了容错能力。每个设备需要基于驱动的重新获取速度和全双工支持;如果使用交换机,交换机也需启用 802.3ad 模式。
5:(balance-tlb) Adaptive transmit load balancing(适配器传输负载均衡):通道绑定不需要专用的交换机支持。发出的流量根据当前负载分给每一个设备。由当前设备处理接收,如果接受的设 备传不通就用另一个设备接管当前设备正在处理的mac地址。
6:(balance-alb) Adaptive load balancing: (适配器负载均衡):包括mode5,由 ARP 协商完成接收的负载。bonding驱动程序截获 ARP在本地系统发送出的请求,用其中之一的硬件地址覆盖从属设备的原地址。就像是在服务器上不同的人使用不同的硬件地址一样。

netplan配置

mode1:active-backup

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
###注意 YAML 语法这里语法并不是很标准可以去网上找标准一点的,下面中文备注自己删除一下。
root@ubuntu:~# cat /etc/netplan/01-netcfg.yaml
network:
ethernets:
enp7s0:
dhcp4: no
optional: true
enp8s0:
dhcp4: no
optional: true
version: 2
renderer: networkd
bonds:
bond1:
addresses: [192.168.0.61/24]
gateway4: 192.168.0.254
nameservers:
addresses: [ 223.5.5.5 ]
interfaces:
- enp7s0
- enp8s0
parameters:
mode: active-backup
mii-monitor-interval: 100 #监测时间 100ms
lacp-rate: fast
transmit-hash-policy: layer3+4 # 这里 hash 算法选择 3+4 是为让流量平均分发,具体的需要去论坛上面看看。如果使用 layer2 ,可能达不到 聚合的带宽增加的效果。

注明:

  • miimon=time_in_milliseconds

    以毫秒为单位指定 MII 链接监控的频率。这在需要高可用性时有用,因为 MII 是用来验证网卡是否激活。要验证某个支持 MII 工具的具体网卡的驱动程序,请作为 root 运行以下命令:

  • downdelay=time_in_milliseconds

    以毫秒为单位指定从链接失败到禁用该链接前要等待的时间。该值必须是 miimon 参数中的多个数值。默认将其设定为 0,即禁用该功能。

  • updelay=time_in_milliseconds

    以毫秒为单位指定启用某个链接前要等待的时间。该数值必须是在 miimon 参数值指定值的倍数。默认设定为 0,即禁用该参数。

mode2: XOR policy

bond mode=2,即:(balance-xor) XOR policy(平衡策略)需要交换机配置

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# This file describes the network interfaces available on your system
# For more information, see netplan(5).
network:
version: 2
renderer: networkd
ethernets:
eno0:
dhcp4: no
optional: true
eno1:
dhcp4: no
optional: true
bonds:
bond0:
interfaces:
- eno0
- eno1
parameters:
mode: balance-xor
mii-monitor-interval: 100
addresses:
- "192.168.1.101/24"
gateway4: "192.168.1.1"
nameservers:
addresses:
- "192.168.1.101"
- "8.8.8.8"
- "8.8.4.4"

mode4:lacp动态聚合

bond mode=4,即:(802.3ad) IEEE 802.3adDynamic link aggregation(IEEE 802.3ad 动态链接聚合)需要交换机配置

特点:创建一个聚合组,它们共享同样的速率和双工设定。根据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模式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
###注意 YAML 语法这里语法并不是很标准可以去网上找标准一点的,下面中文备注自己删除一下。
root@ubuntu:~# cat /etc/netplan/01-netcfg.yaml
network:
ethernets:
enp7s0: {} # 这种写法也可以,或着像上面那样指定dhcp4:no
enp8s0: {}
version: 2
renderer: networkd
bonds:
bond4:
addresses: [192.168.0.61/24]
gateway4: 192.168.0.254
nameservers:
addresses: [ 223.5.5.5 ]
interfaces:
- enp7s0
- enp8s0
parameters:
mode: 802.3ad # 模式 bond4 IEEE 802.3ad 链路聚合 LACP
mii-monitor-interval: 100 #监测时间 100ms
lacp-rate: fast
transmit-hash-policy: layer3+4 # 这里 hash 算法选择 3+4 是为让流量平均分发,具体的需要去论坛上面看看。如果使用 layer2 ,可能达不到 聚合的带宽增加的效果。

已测试过的配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# Let NetworkManager manage all devices on this system
# /etc/netplan/02-bond4-config.yaml
network:
version: 2
renderer: networkd
ethernets:
enp171s0f0np0:
dhcp4: no
dhcp6: no
optional: true
enp171s0f1np1:
dhcp4: no
dhcp6: no
optional: true
bonds:
bond4:
interfaces:
- enp171s0f0np0
- enp171s0f1np1
parameters:
mode: 802.3ad
mii-monitor-interval: 100
lacp-rate: fast
transmit-hash-policy: layer3+4
addresses: [10.11.23.25/24]
gateway4: 10.11.23.254
nameservers:
addresses: [192.168.45.29,192.168.45.31]

生效

1
2
sudo netplan try   # 测试配置文件,在18.04上会有一个警告报错可以忽略掉
sudo netplan apply

bond检查

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
	root@ubuntu:~# cat /proc/net/bonding/bond6 
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
Bonding Mode: IEEE 802.3ad Dynamic link aggregation
Transmit Hash Policy: layer3+4 (1)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

802.3ad info
LACP rate: fast
Min links: 0
Aggregator selection policy (ad_select): stable
System priority: 65535
System MAC address: c6:f0:56:6c:9a:b4
Active Aggregator Info:
Aggregator ID: 1
Number of ports: 2
Actor Key: 9
Partner Key: 4
Partner Mac Address: 80:05:88:f1:9a:26

Slave Interface: enp8s0
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 4
Permanent HW addr: 00:13:92:09:05:4d
Slave queue ID: 0
Aggregator ID: 1
Actor Churn State: none
Partner Churn State: none
Actor Churned Count: 1
Partner Churned Count: 3
details actor lacp pdu:
system priority: 65535
system mac address: c6:f0:56:6c:9a:b4
port key: 9
port priority: 255
port number: 1
port state: 63
details partner lacp pdu:
system priority: 4096
system mac address: 80:05:88:f1:9a:26
oper key: 4
port priority: 32768
port number: 53
port state: 63

Slave Interface: enp7s0
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 3
Permanent HW addr: 00:13:92:09:05:4c
Slave queue ID: 0
Aggregator ID: 1
Actor Churn State: none
Partner Churn State: none
Actor Churned Count: 3
Partner Churned Count: 3
details actor lacp pdu:
system priority: 65535
system mac address: c6:f0:56:6c:9a:b4
port key: 9
port priority: 255
port number: 2
port state: 63
details partner lacp pdu:
system priority: 4096
system mac address: 80:05:88:f1:9a:26
oper key: 4
port priority: 32768
port number: 21
port state: 63
root@ubuntu:~#

ethtool bondx