多网卡绑定链路聚合提升服务器出口总带宽上限
## 什么是多网卡绑定链路聚合
服务器单张网卡的带宽有限(常见1Gbps或10Gbps),当业务流量接近上限时,可以通过**多网卡绑定(Bonding)**技术将多张物理网卡虚拟成一张逻辑网卡,实现出口带宽叠加。同时链路聚合还能提供冗余,一张网卡出故障时流量自动切换到其他网卡。本文以**CentOS 7/8**为例,手把手带你完成配置。
## 上手前要准备什么
- **硬件**:至少两张同型号、同速率的网卡(建议使用Intel或Broadcom兼容芯片)。
- **交换机**:如果使用需要交换机配合的模式(如802.3ad动态聚合),必须确保交换机支持LACP并正确配置。如果只是简单故障转移或负载均衡(mode=0,1,2),普通交换机即可。
- **系统**:Linux内核已加载bonding模块。CentOS默认包含。
- **网络规划**:记录当前网卡名称(如eth0、eth1),并确保操作时不会导致远程断开(建议通过带外管理或本地控制台操作)。
## 配置步骤
### 1. 加载Bonding模块
```bash
modprobe bonding
# 验证是否加载成功
lsmod | grep bonding
```
如果返回结果包含bonding,说明模块已加载。若没有,执行 `modprobe bonding` 即可。
### 2. 创建绑定虚拟网卡配置文件
在 `/etc/sysconfig/network-scripts/` 目录下创建或编辑 `ifcfg-bond0`:
```bash
vim /etc/sysconfig/network-scripts/ifcfg-bond0
```
内容如下(按实际网络修改IP、网关等):
```ini
DEVICE=bond0
TYPE=Bond
NAME=bond0
BONDING_MASTER=yes
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
BONDING_OPTS="mode=1 miimon=100"
```
> **说明**:`mode=1` 是主备模式(Active-Backup),适合追求稳定性的场景;如需带宽叠加,可改为 `mode=0`(轮询)或 `mode=4`(802.3ad LACP),但需交换机配合。`miimon=100` 表示每100毫秒检测一次链路状态。
### 3. 修改从属网卡配置文件
编辑 `ifcfg-eth0` 和 `ifcfg-eth1`,内容如下(以eth0为例):
```ini
DEVICE=eth0
TYPE=Ethernet
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes
USERCTL=no
```
eth1同理,只修改`DEVICE=eth1`。注意删除原有的IP、网关等参数,这些由bond0统一管理。
### 4. 重启网络服务生效
```bash
systemctl restart network
# 或使用 nmcli 重载(NetworkManager环境)
nmcli connection reload
```
重启后使用 `ip addr show bond0` 查看是否获取到IP。再用 `cat /proc/net/bonding/bond0` 查看绑定状态,确认两个slave网卡已经加入。
## 这些细节最容易踩坑
- **模式选择**:`mode=0`(balance-rr)会将数据包轮询发送到各网卡,能提升带宽但可能导致数据包乱序,适合内部局域网。`mode=1`(active-backup)只使用一张网卡,不提升带宽只提供冗余。`mode=4`(802.3ad)需要交换机支持LACP,且交换机端必须将对应端口划为同一个聚合组。
- **交换机配置**:如果选用mode=4,必须登录交换机配置LACP,否则链路会反复断开。
- **网卡速率必须一致**:混用千兆和万兆网卡会导致协商失败或性能异常。
- **避免远程操作风险**:配置网卡时极易断连,建议在本地终端或通过iDRAC/iLO操作。
- **NetworkManager冲突**:CentOS 7以上默认使用NetworkManager,建议禁用或使用nmcli管理bonding。如果配置后不生效,尝试 `systemctl stop NetworkManager && systemctl disable NetworkManager`,再重启network服务。
## 完成后如何验证结果
### 1. 查看绑定状态
```bash
cat /proc/net/binding/bond0
```
输出应显示两个slave interface均为“up”,并且MII Status为“up”。
### 2. 带宽测试
使用 `iperf3` 进行吞吐测试。启动服务器端:
```bash
iperf3 -s -p 5201
```
客户端测试: ```bash iperf3 -c 服务器IP -p 5201 -P 4 -t 30 ```
对比配置前后的带宽变化。如果mode=0或4且交换机支持,应该能看到接近两倍的单网卡带宽。 ### 3. 故障切换测试 拔掉一张网卡的网线,观察业务是否中断。 ```bash # 查看链路状态变化 watch -n 1 cat /proc/net/bonding/bond0 ``` 正常应看到被拔掉的slave变为down,流量自动切换到另一张。 ## 常见问题解答 **Q:配置后bond0没有IP,且无法ping通网关?** A:检查配置文件是否遗漏`BOOTPROTO=static`或者IPADDR写错。确认从属网卡的`MASTER=bond0`和`SLAVE=yes`是否正确。也可用 `nmcli device status` 查看网卡是否被NetworkManager接管,若被接管建议禁用NetworkManager。 **Q:`mode=0` 为什么带宽没有叠加?** A:`mode=0` 需要交换机开启以太通道或手动将端口绑在一起。另外,如果交换机不支持静态聚合,只能使用`mode=1`或`mode=2`。也有可能是网卡驱动或PCIe带宽瓶颈。 **Q:如何修改bonding模式?** A:修改`/etc/sysconfig/network-scripts/ifcfg-bond0`中的`BONDING_OPTS`参数,例如改`mode=4`,然后重启网络服务。注意切换模式可能需要重新插拔或重启服务器。 **Q:配置后服务器开机启动时卡在“Starting network...”?** A:可能是网卡配置文件中有冲突或从属网卡顺序问题。可进入救援模式,先将所有`ifcfg-*`备份,只保留bond0和需要绑定的两个物理网卡,重新生成配置。 如果你正在处理多网卡绑定链路聚合提升服务器出口总带宽上限的任务,建议先从一台测试服务器开始,确认模式和相关配置无误后再部署到生产环境。遇到异常时,优先回看避坑和高频问题部分。
客户端测试: ```bash iperf3 -c 服务器IP -p 5201 -P 4 -t 30 ```
对比配置前后的带宽变化。如果mode=0或4且交换机支持,应该能看到接近两倍的单网卡带宽。 ### 3. 故障切换测试 拔掉一张网卡的网线,观察业务是否中断。 ```bash # 查看链路状态变化 watch -n 1 cat /proc/net/bonding/bond0 ``` 正常应看到被拔掉的slave变为down,流量自动切换到另一张。 ## 常见问题解答 **Q:配置后bond0没有IP,且无法ping通网关?** A:检查配置文件是否遗漏`BOOTPROTO=static`或者IPADDR写错。确认从属网卡的`MASTER=bond0`和`SLAVE=yes`是否正确。也可用 `nmcli device status` 查看网卡是否被NetworkManager接管,若被接管建议禁用NetworkManager。 **Q:`mode=0` 为什么带宽没有叠加?** A:`mode=0` 需要交换机开启以太通道或手动将端口绑在一起。另外,如果交换机不支持静态聚合,只能使用`mode=1`或`mode=2`。也有可能是网卡驱动或PCIe带宽瓶颈。 **Q:如何修改bonding模式?** A:修改`/etc/sysconfig/network-scripts/ifcfg-bond0`中的`BONDING_OPTS`参数,例如改`mode=4`,然后重启网络服务。注意切换模式可能需要重新插拔或重启服务器。 **Q:配置后服务器开机启动时卡在“Starting network...”?** A:可能是网卡配置文件中有冲突或从属网卡顺序问题。可进入救援模式,先将所有`ifcfg-*`备份,只保留bond0和需要绑定的两个物理网卡,重新生成配置。 如果你正在处理多网卡绑定链路聚合提升服务器出口总带宽上限的任务,建议先从一台测试服务器开始,确认模式和相关配置无误后再部署到生产环境。遇到异常时,优先回看避坑和高频问题部分。