Linux NIC Bonding 技术可以将多张物理网卡或者虚拟网卡绑定为一张虚拟的逻辑网卡,从而实现网卡的冗余、带宽的扩容以及负载均衡。
网卡绑定的作用
网卡绑定的作用主要有两个方面:
- 提供冗余(负载均衡):网卡绑定最主要的作用,如下图,物理机的多张物理网卡可以上连多个交换机,将网卡绑定为一张虚拟网卡,使用该 bond 虚拟网卡,当其中一个交换机故障时,流量可以自动切换到另一个交换机与物理网卡,提供了网卡的容灾能力。
- 提高吞吐量:由于是多张网卡进行负载均衡,bond 出来的网卡的吞吐量也得到了提升。
网卡绑定模式
Mode 0 — balance-rr(轮询模式)
数据包依次顺序轮询每张网卡传输,即第1个包走 eth0,下一个包就走 eth1….一直轮询下去。
Mode 1 — active-backup(主备模式)
只有一张网卡作为主,承接流量,当主网卡宕机后,启用备网卡。
Mode 2 — balance-xor(异或模式)
基于源 MAC 和目的 MAC 的 Hash 选择网卡
Mode 3 — broadcast(广播模式)
所有数据包在所有网卡上传输。
Mode 4 — link aggregation(动态链接聚合)
Mode 5 — balance-tlb(传输负载均衡)
Mode 6 — balance-alb(适应性负载均衡)
使用 nmcli
绑定网卡
绑定网卡
创建绑定网卡
1
nmcli connection add type bond ifname <绑定网卡名> mode <模式>
例如,创建一张名为
bond0
的主备模式绑定网卡1
2root@ubuntu2404:/# nmcli connection add type bond ifname bond0 mode active-backup
Connection 'bond-bond0' (fed29263-5656-449b-95c8-cf2e23432736) successfully added.查看网络设备,即可看到新建的
bond0
网卡1
2
3
4
5
6
7root@ubuntu2404:/# nmcli device status
DEVICE TYPE STATE CONNECTION
ens160 ethernet connected netplan-ens160
ens256 ethernet connected Wired connection 1
bond0 bond connecting (getting IP configuration) bond-bond0
lo loopback connected (externally) lo
docker0 bridge connected (externally) docker0添加从属网卡
1
nmcli connection add type bond-slave ifname <从属网卡名> master <绑定网卡名>
例如,将
ens160
和ens256
网卡绑定到bond0
网卡上1
2
3
4root@ubuntu2404:/# nmcli connection add type bond-slave ifname ens160 master bond0
Connection 'bond-slave-ens160' (021cce67-1440-4d50-a8a9-5c7faf8a361b) successfully added.
root@ubuntu2404:/# nmcli connection add type bond-slave ifname ens256 master bond0
Connection 'bond-slave-ens256' (f17d7bf7-4313-4f90-8f9c-5c35c0ebe319) successfully added.1
2
3
4
5
6
7
8
9root@ubuntu2404:/# nmcli connection show
NAME UUID TYPE DEVICE
netplan-ens160 febc54dc-e29c-3939-a911-8a11855bd1c8 ethernet ens160
Wired connection 1 ec18620e-37bf-3343-acf5-b57b8928465d ethernet ens256
bond-bond0 fed29263-5656-449b-95c8-cf2e23432736 bond bond0
lo 73b7043c-59f1-42aa-a711-2eb721fc18b4 loopback lo
docker0 5fb2c927-9b29-4d43-99ab-09af694a8927 bridge docker0
bond-slave-ens160 021cce67-1440-4d50-a8a9-5c7faf8a361b ethernet --
bond-slave-ens256 f17d7bf7-4313-4f90-8f9c-5c35c0ebe319 ethernet --配置绑定网卡
1
nmcli connection modify bond-bond0 ipv4.addresses 172.16.19.200/24 ipv4.gateway 172.16.19.2 ipv4.method manual
激活绑定
1
nmcli connection up bond-bond0
激活从属网卡(可不激活,激活后会导致原本的网卡无法直接访问)
1
2nmcli connection up bond-slave-ens160
nmcli connection up bond-slave-ens256
验证网卡冗余
按照上面步骤绑定完网卡后,可以看到多了一张网卡 bond0
1 | root@ubuntu2404:/# ip a |
1 | root@ubuntu2404:/# nmcli connection show |
1 | root@ubuntu2404:/# nmcli device status |
通过 bond0 网卡 IP 连接,单独关掉 ens160 或者 ens256 网卡(ifconfig ens160 down
),连接都不会收到影响。
恢复
1
2
3
4
5
6
7nmcli connection down bond-bond0
nmcli connection down bond-slave-ens160
nmcli connection down bond-slave-ens256
nmcli connection del bond-bond0
nmcli connection del bond-slave-ens160
nmcli connection del bond-slave-ens256