网卡Bonding介绍
1. 概述
网络接口绑定(Network Interface Bonding),也称为链路聚合(Link Aggregation)或NIC Teaming,是将多个物理网络接口聚合成一个逻辑接口,以提高带宽和提供冗余性的技术。这种技术广泛应用于服务器和高性能计算环境中,以确保网络的高可用性和高性能。
2. 优势
- 增加带宽:通过聚合多个网络接口,整体带宽增加,从而提升网络吞吐量。
- 高可用性:在一个接口发生故障时,其他接口可以继续工作,确保网络连接的连续性。
- 负载均衡:数据流量可以在多个接口之间均衡分配,避免单一接口成为瓶颈。
- 简化管理:将多个接口管理为一个逻辑接口,简化了网络配置和管理。
3. Bonding 模式
Linux 支持多种 Bonding 模式,每种模式都有其独特的特点和应用场景:
- mode=0 (balance-rr):循环方式(Round-robin),每个数据包依次从每个接口发送。提供负载均衡和容错功能。
- mode=1 (active-backup):主备模式(Active-backup),一个接口为主接口,其他接口为备份接口。当主接口失败时,备份接口接管。提供高可用性。
- mode=2 (balance-xor):根据传输散列算法选择接口。提供负载均衡和容错功能。
- mode=3 (broadcast):广播模式,所有数据包通过所有接口发送。提供容错功能。
- mode=4 (802.3ad):动态链路聚合(LACP),需要交换机支持 IEEE 802.3ad。提供负载均衡和高可用性。
- mode=5 (balance-tlb):基于发送负载的自适应传输负载均衡(Adaptive Transmit Load Balancing)。无需特殊交换机支持。
- mode=6 (balance-alb):基于接收负载的自适应负载均衡(Adaptive Load Balancing)。无需特殊交换机支持。
4. 配置示例
以下是使用 systemd-networkd
配置 Bonding 的示例。
4.1. 配置物理接口
首先,配置要绑定的物理接口。例如,enp26s0f0
和 enp26s0f1
:
创建文件 /etc/systemd/network/10-enp26s0f0.network
:
[Match]
Name=enp26s0f0
[Network]
Bond=bond0
创建文件 /etc/systemd/network/10-enp26s0f1.network
:
[Match]
Name=enp26s0f1
[Network]
Bond=bond0
4.2. 配置 Bonding 接口
创建文件 /etc/systemd/network/bond0.netdev
来定义 Bonding 接口:
[NetDev]
Name=bond0
Kind=bond
[Bond]
Mode=802.3ad
MIIMonitorSec=1s
LACPTransmitRate=fast
4.3. 配置 Bonding 接口的网络设置
创建文件 /etc/systemd/network/10-bond0.network
来配置 Bonding 接口的网络设置:
[Match]
Name=bond0
[Network]
Address=192.168.1.10/24
Gateway=192.168.1.1
DNS=8.8.8.8
DNS=8.8.4.4
4.4. 应用配置
保存配置文件后,重新启动 systemd-networkd
服务以应用新的网络配置:
sudo systemctl restart systemd-networkd
4.5. 检查配置
或者查看具体接口的详细信息:
# networkctl status bond0
● 8: bond0
Link File: /usr/lib/systemd/network/99-default.link
Network File: /run/systemd/network/10-netplan-bond0.network
State: degraded (configured)
Online state: online
Type: bond
Kind: bond
Driver: bonding
Hardware Address: 4e:0e:43:ba:f7:82
MTU: 1500 (min: 68, max: 65535)
QDisc: noqueue
IPv6 Address Generation Mode: eui64
Mode: 802.3ad
Miimon: 100ms
Updelay: 0
Downdelay: 0
Number of Queues (Tx/Rx): 16/16
Auto negotiation: no
Speed: 20Gbps
Duplex: full
Address: xxx::4c0e:43ff:feba:xxx
Activation Policy: up
Required For Online: yes
DHCP6 Client DUID: DUID-EN/Vendor:0000ab111fbd6366525ac0ea
5. 通过命令配置bond
5.1. 通过IP命令做bond
#!/bin/bash
# 安装必要的软件包
sudo apt-get update
sudo apt-get install -y ifenslave
# 创建 Bond 接口
sudo ip link add bond0 type bond
# 设置 Bond 模式
sudo ip link set bond0 type bond mode 802.3ad
或者
modprobe bonding mode=4 miimon=100 lacp_rate=1 xmit_hash_policy=1
# 添加从接口到 Bond 接口
sudo ip link set enp26s0f0 down
sudo ip link set enp26s0f0 master bond0
sudo ip link set enp26s0f1 down
sudo ip link set enp26s0f1 master bond0
# 配置 Bond 接口的 IP 地址
sudo ip addr add 192.168.1.10/24 dev bond0
# 启用 Bond 接口
sudo ip link set bond0 up
# 启用从接口
sudo ip link set enp26s0f0 up
sudo ip link set enp26s0f1 up
echo "Bond 接口配置完成"
查看bond状态
cat /proc/net/bonding/bond0
使用 modprobe 工具配置网络接口的 Bond(绑定)操作是另一种在 Linux 上设置链路聚合的方法。modprobe 用于加载和卸载内核模块,而 bonding 模块是用于实现网络接口绑定的内核模块。
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.