Linux 链路聚合实战:Bond 与 Team解析
引言
你有没有遇到过这样的场景:某天凌晨,一块网卡突然罢工,整个服务直接中断,半夜被报警电话吵醒。
在运维过程中,单点故障是我们不得不面对的问题。
其实,Linux 系统早就为我们准备好了“网卡抱团”的解决方案——链路聚合。简单说,就是把服务器上多块物理网卡“捆绑”在一起,逻辑上变成一块网卡来用。好处显而易见:带宽叠加(多块网卡并行传输)、故障冗余(一块坏了另一块顶上)。
在 Linux 的世界里,实现链路聚合主要有两大“门派”:Bond 和 Team。很多人刚接触时会懵:这俩到底有啥区别?我该选哪个?今天这篇文章,我们就来彻底搞懂它们。
一、链路聚合是什么?为什么需要它?
先打个比方:原来你的服务器只有一条“单车道”通往外部网络,车流(数据)一多就开始堵车或者“单车道”断了,服务器数据无法发出也无法接收数据。链路聚合就是把两条、四条甚至八条车道合并成一条“多车道高速路”。
链路聚合的核心价值体现在三个方面:
- 带宽聚合
- 冗余备份
- 故障转移
在 Linux 中,实现这一目标有两种主流技术:Bonding(老牌劲旅)和 Teaming(后起之秀)。
二、Bond:Linux 链路聚合的“老牌劲旅”
Bonding 是 Linux 内核自带的原生功能,历史悠久,非常稳定。它的核心是把多块网卡绑定成一个逻辑接口(如 bond0)。
2.1 Bond 的七种模式(Mode 0~6)
Bonding 最让人眼花缭乱但也最关键的是它的七种工作模式。模式选不对,效果可能适得其反。
| | | | |
|---|
| mode 0 | | | 必须 | |
| mode 1 | | | 无 | 最常用 |
| mode 2 | | | | |
| mode 3 | | | | |
| mode 4 | | | 必须 | |
| mode 5 | | | | |
| mode 6 | | | 无 | |
2.2 两种较常用的模式详解
在实际生产环境中,mode 1、mode 4 是最常使用的两种模式。
🔹 Mode 1(主备模式):最稳妥的高可用方案
在追求高可用、对带宽要求不苛刻的场景下最常用的模式。它的逻辑非常简单:
- 同一时刻只有一块网卡(active)在工作,承担所有流量
优点:配置简单,几乎兼容所有网络环境,不需要交换机做特殊配置。
缺点:资源利用率低,N 块网卡的利用率仅为 1/N。
🔹 Mode 4(LACP模式):LACP协议实现负载均衡
数据包会在多条链路间负载均衡,但需要上游交换机也要配置LACP。多数环境中交换机都支持LACP, 故很多环境中都选用这种模式,特别是数据中心用得多。
关键限制:必须配合支持静态链路聚合的交换机使用,让交换机保证同一个会话的流量走同一条物理链路。
有些资料说mode0、mode6也是常用的模式,但博主工作也有十几年了,现实数据中心环境中没见过使用,基本都是使用mode 4。
三、Team:更现代的“后起之秀”
Team 是 Linux 内核 3.3 引入的一种链路聚合驱动,功能和 Bonding 类似,但更灵活、可扩展性更强。
3.1 Team 与 Bond 的核心差异
| | |
|---|
| 出现时间 | | |
| 实现方式 | | |
| 配置格式 | | JSON 格式 |
| 最大网卡数 | | |
| IPv6 支持 | | 更好 |
| 扩展性 | | |
3.2 Team 支持的 Runner 模式
Team 中的“模式”称为 runner,与 Bond 的 mode 一一对应:
| | |
|---|
roundrobin | | |
activebackup | | |
loadbalance | | |
broadcast | | |
lacp | | |
random | | |
3.3 Team 的核心优势
- 更灵活的配置
- 支持更多网卡
- 更好的 IPv6 支持
- 用户空间与内核分离:内核只负责快速数据转发,复杂逻辑在用户空间处理,调试和扩展更方便
- 无需手动加载内核模块
四、实战:手把手配置 Bond 与 Team
4.1 使用nmcli配置链路聚合(Mode 1)
4.1.1 使用 nmcli 配置 Bond(Mode 1 主备模式)
nmcli 是 NetworkManager 的命令行工具,在 CentOS/RHEL 7+ 中广泛使用。
nmcli connection add type bond con-name bond0 ifname bond0 bond.options "mode=1,miimon=100"
- 添加物理网卡到 bond(假设网卡名为 ens33 和 ens36)
nmcli connection add type bond-slave ifname ens33 con-name ens33 master bond0nmcli connection add type bond-slave ifname ens36 con-name ens36 master bond0
nmcli connection modify bond0 ipv4.method manual ipv4.addresses 192.168.32.132/24 ipv4.gateway 192.168.32.2 ipv4.dns 114.114.114.114 autoconnect yes
nmcli connection up bond0nmcli connection up ens33nmcli connection up ens36
注意:在配置bond之前可能已经有网络配置,如下图,已经有ifcfg-ens33的网卡配置文件,在按上述方法配置bond时,会重新新建一个配置文件ifcfg-ens33-1,这种情况下,可以将ifcfg-ens33备份到其他目录,然后执行删除,重命名ifcfg-ens33-1为ifcfg-ens33,然后删除ifcfg-ens33中uuid的配置即可,另一个网卡可执行类似操作。
[root@centos7-test network-scripts]# rm -rf ifcfg-ens33 root@centos7-test network-scripts]# mv ifcfg-ens33-1 ifcfg-ens33 [root@centos7-test network-scripts]# systemctl restart network
- 查看 bond 状态并做切换测试 cat /proc/net/bonding/bond0
💡 参数说明:miimon=100 表示每 100ms 检查一次链路状态。
断掉主网卡ens33,ens36变为主网卡,ping测试依然可以连通。
4.1.2 使用 nmcli 配置 Team(activebackup 模式)
- 创建 team 接口(activebackup 主备模式)
nmcli connection add type team con-name team0 ifname team0 config '{"runner": {"name": "activebackup"}}'
nmcli connection add type team-slave ifname ens33 con-name team0-slave1 master team0nmcli connection add type team-slave ifname ens36 con-name team0-slave2 master team0
nmcli connection modify team0 ipv4.method manual ipv4.addresses 192.168.32.150/24 ipv4.gateway 192.168.32.2 ipv4.dns 114.114.114.114 autoconnect yes
4. 启动所有接口
nmcli connection up team0nmcli connection up team0-slave1nmcli connection up team0-slave2
注意:此时使用teamdctl team0 state和teamnl team0 ports查看team的状态是不正常的,备份ifcfg-ens33和ifcfg-ens36后删除这两个配置文件,然后重命名ifcfg-team0-slave1为ifcfg-ens33,ifcfg-team0-slave2为ifcfg-ens36,编辑ifcfg-ens33:删除uuid,name修改为ens33;配置文件ifcfg-ens36也进行类似操作。 5. 查看 team 状态
teamdctl team0 stateteamnl team0 ports
4.2 通过修改配置文件配置链路聚合(Mode 4)
4.2.1 配置bonding
创建bond0配置文件:
cd /etc/sysconfig/network-scripts/vim ifcfg-bond0BONDING_OPTS="mode=4 miimon=100 lacp_rate=fast xmit_hash_policy=layer3+4"TYPE=BondBONDING_MASTER=yesBOOTPROTO=staticNAME=bond0DEVICE=bond0ONBOOT=yesIPADDR=192.168.32.132PREFIX=24GATEWAY=192.168.32.2DNS1=114.114.114.114
网卡ens33配置:
cd /etc/sysconfig/network-scripts/vim ifcfg-ens33TYPE=EthernetNAME=ens33DEVICE=ens33ONBOOT=yesMASTER=bond0SLAVE=yes
网卡ens36配置
TYPE=EthernetNAME=ens36DEVICE=ens36ONBOOT=yesMASTER=bond0SLAVE=yes
配置完成后,重启网络服务 systemctl restart network
4.2.2 bonding验证
1.验证聚合状态:cat /proc/net/bonding/bond0
2.查看网络地址配置信息 ip address show
4.2.3 配置teamd
在 /etc/sysconfig/network-scripts/ 目录下创建 ifcfg-team0
TEAM_CONFIG="{\"runner\": {\"name\":\"lacp\",\"active\":true,\"fast_rate\":true, \"tx_hash\":[\"ipv4\"], \"ports\":{\"ens33\":{}, \"ens36\":{}}}}"NAME=team0DEVICE=team0ONBOOT=yesBOOTPROTO=staticDEVICETYPE=TeamIPADDR=192.168.32.150PREFIX=24GATEWAY=192.168.32.2DNS1=114.114.114.114
网卡ens33配置:
NAME=ens33DEVICE=ens33ONBOOT=yesTEAM_MASTER=team0DEVICETYPE=TeamPort
网卡ens36配置:
NAME=ens36DEVICE=ens36ONBOOT=yesTEAM_MASTER=team0DEVICETYPE=TeamPort
4.2.4 teamd验证
teamdctl team0 state teamnl team0 ports
五、Bond vs Team:一张表看懂怎么选
| | |
|---|
| 稳定性 | | |
| 配置复杂度 | | |
| 最大网卡数 | | |
| IPv6 支持 | | |
| 调试便利性 | | teamdctl |
| 适用系统 | | |
| 扩展性 | | |
选型建议:
- 追求稳定、配置简单 → 选 Bond(尤其是 mode 1),绝大多数场景够用
- 需要绑定 2 块以上网卡
- 需要更灵活的配置和更好的 IPv6 支持
- 维护老旧系统
六、生产环境最佳实践与避坑指南
6.1 选择合适的工作模式
| | |
|---|
| 追求高可用、对带宽不敏感 | Bond mode 1 / Team activebackup | |
| 需带宽叠加且能配置交换机 | | |
| 需带宽叠加但不想动交换机 | Bond mode 6 / Team loadbalance | |
6.2 避坑指南
① 不同品牌的网卡不建议绑定在一起
不同厂商网卡的驱动和性能特性差异可能影响聚合效果。
② 参与聚合的网卡速率必须相同
千兆 + 万兆混合绑定时需注意性能平衡。速率不同的网卡绑定后,慢速网卡会成为瓶颈。
③ Mode 0 必须配交换机
如果只在服务器侧配置 mode 0 而交换机没有做端口聚合,交换机会因为“一个 MAC 对应多个端口”而无法正常转发数据包。
④ 配置修改前先备份
# 备份当前网络配置cp -r /etc/sysconfig/network-scripts/ /tmp/network-scripts-backup/
⑤ 生产环境务必配置监控告警
定期测试故障转移功能,确保备链路在关键时刻能顶上。
6.3 验证与调试命令
# Bond 状态查看cat /proc/net/bonding/bond0# Team 状态查看teamdctl team0 stateteamnl team0 ports# 查看所有网络接口ip link show# 查看聚合接口的 IP 配置ip addr show bond0ip addr show team0# 测试故障转移(拔掉一根网线后观察)ping -I bond0 192.168.1.1
总结
从 Bond 到 Team,Linux 链路聚合技术走过了一条从“稳定可靠”到“灵活强大”的演进之路。
记住三句话:
- Bond 是“老牌劲旅”:内核原生,稳定可靠,mode 1 主备模式是生产环境最稳妥的选择。
- Team 是“后起之秀”:设计更现代,支持更多网卡、JSON 配置、更好的 IPv6,是未来的方向。
- 模式选对最重要:追求高可用选主备(mode 1 / activebackup),追求带宽叠加且能配交换机选 LACP(mode 4 / lacp),不想动交换机选自适应(mode 6 / loadbalance)。
链路聚合是构建高可用网络架构的基石。掌握了 Bond 和 Team,你就能让服务器的网络从“单点脆弱”变成“多路冗余”——把网络故障的风险降到最低,把带宽的潜力发挥到最大。
如果你有任何问题或经验分享,欢迎在评论区留言讨论!