Linux操作系统-链路聚合(bond与team)

📅 2026/7/19 17:44:33 👁️ 阅读次数 📝 编程学习
Linux操作系统-链路聚合(bond与team)

Linux 链路聚合实战:Bond 与 Team解析

引言

你有没有遇到过这样的场景:某天凌晨,一块网卡突然罢工,整个服务直接中断,半夜被报警电话吵醒。

在运维过程中,单点故障是我们不得不面对的问题。

其实,Linux 系统早就为我们准备好了“网卡抱团”的解决方案——链路聚合。简单说,就是把服务器上多块物理网卡“捆绑”在一起,逻辑上变成一块网卡来用。好处显而易见:带宽叠加(多块网卡并行传输)、故障冗余(一块坏了另一块顶上)。

在 Linux 的世界里,实现链路聚合主要有两大“门派”:BondTeam。很多人刚接触时会懵:这俩到底有啥区别?我该选哪个?今天这篇文章,我们就来彻底搞懂它们。

一、链路聚合是什么?为什么需要它?

先打个比方:原来你的服务器只有一条“单车道”通往外部网络,车流(数据)一多就开始堵车或者“单车道”断了,服务器数据无法发出也无法接收数据。链路聚合就是把两条、四条甚至八条车道合并成一条“多车道高速路”。

链路聚合的核心价值体现在三个方面:

  1. 带宽聚合:将多网卡带宽叠加,突破单网卡性能瓶颈
  2. 冗余备份:当某条物理链路故障时,其他链路自动接管
  3. 故障转移:网络拥堵或硬件故障时,智能切换保证连续性

在 Linux 中,实现这一目标有两种主流技术:Bonding(老牌劲旅)和Teaming(后起之秀)。

二、Bond:Linux 链路聚合的“老牌劲旅”

Bonding 是 Linux 内核自带的原生功能,历史悠久,非常稳定。它的核心是把多块网卡绑定成一个逻辑接口(如bond0)。

2.1 Bond 的七种模式(Mode 0~6)

Bonding 最让人眼花缭乱但也最关键的是它的七种工作模式。模式选不对,效果可能适得其反。

模式名称核心特点交换机要求适用场景
mode 0balance-rr(轮询)数据包依次轮询分发到各网卡必须配置链路聚合需交换机配合,注意TCP乱序风险
mode 1active-backup(主备)仅1块网卡工作,故障时自动切换特殊要求最常用,追求高可用、对带宽不敏感
mode 2balance-xor(异或)基于MAC/IP哈希决定流量走哪条链路需配置静态聚合同一会话流量固定走一条链路,避免乱序
mode 3broadcast(广播)所有数据包复制到所有网卡发送金融等高可靠性场景,但资源浪费严重
mode 4802.3ad(LACP)IEEE 802.3ad 动态链路聚合必须配置LACP需交换机支持,实现智能负载均衡
mode 5balance-tlb(适配器传输负载均衡)发送流量根据当前负载分配仅均衡发送流量,接收不均衡
mode 6balance-alb(自适应负载均衡)收发双向负载均衡+容错特殊要求兼顾负载均衡和易用性的优选方案

2.2 两种较常用的模式详解

在实际生产环境中,mode 1、mode 4 是最常使用的两种模式

🔹 Mode 1(主备模式):最稳妥的高可用方案

在追求高可用、对带宽要求不苛刻的场景下最常用的模式。它的逻辑非常简单:

  • 同一时刻只有一块网卡(active)在工作,承担所有流量
  • 其他网卡(standby)完全处于热备状态
  • 一旦主网卡或线路故障,备卡会在毫秒级内切换上来

优点:配置简单,几乎兼容所有网络环境,不需要交换机做特殊配置。

缺点:资源利用率低,N 块网卡的利用率仅为 1/N。

🔹 Mode 4(LACP模式):LACP协议实现负载均衡

数据包会在多条链路间负载均衡,但需要上游交换机也要配置LACP。多数环境中交换机都支持LACP, 故很多环境中都选用这种模式,特别是数据中心用得多。

关键限制:必须配合支持静态链路聚合的交换机使用,让交换机保证同一个会话的流量走同一条物理链路。

有些资料说mode0、mode6也是常用的模式,但博主工作也有十几年了,现实环境中没见过使用。

三、Team:更现代的“后起之秀”

Team 是 Linux 内核 3.3 引入的一种链路聚合驱动,功能和 Bonding 类似,但更灵活、可扩展性更强

3.1 Team 与 Bond 的核心差异

对比维度BondTeam
出现时间早期 Linux 内核内核 3.3+(约 2012 年)
实现方式纯内核模块小内核驱动 + 用户空间守护进程(teamd)
配置格式传统配置文件JSON 格式,更规范
最大网卡数通常 2 块最多8 块
IPv6 支持基础支持更好地支持 IPv6
扩展性功能相对固定更强,支持 hash 加密等

3.2 Team 支持的 Runner 模式

Team 中的“模式”称为runner,与 Bond 的 mode 一一对应:

Team Runner对应 Bond Mode说明
roundrobinmode 0轮询分发
activebackupmode 1主备模式
loadbalancemode 2/6基于哈希的负载均衡
broadcastmode 3广播所有端口
lacpmode 4LACP 动态聚合
random随机选择端口

3.3 Team 的核心优势

  1. 更灵活的配置:使用 JSON 格式,易于编程化管理
  2. 支持更多网卡:最多可绑定 8 块网卡
  3. 更好的 IPv6 支持
  4. 用户空间与内核分离:内核只负责快速数据转发,复杂逻辑在用户空间处理,调试和扩展更方便
  5. 无需手动加载内核模块:有更强的扩展性

四、实战:手把手配置 Bond 与 Team

4.1 使用nmcli配置链路聚合(Mode 1)

4.1.1 使用 nmcli 配置 Bond(Mode 1 主备模式)

nmcli是 NetworkManager 的命令行工具,在 CentOS/RHEL 7+ 中广泛使用。

  1. 创建 bond 接口(mode 1 主备模式)
nmcli connectionaddtypebond con-name bond0 ifname bond0 bond.options"mode=1,miimon=100"
  1. 添加物理网卡到 bond(假设网卡名为 ens33 和 ens36)
nmcli connectionaddtypebond-slave ifname ens33 con-name ens33 master bond0 nmcli connectionaddtypebond-slave ifname ens36 con-name ens36 master bond0
  1. 设置 IP 地址
nmcli connection modify bond0 ipv4.method manual ipv4.addresses192.168.32.132/24 ipv4.gateway192.168.32.2 ipv4.dns114.114.114.114 autoconnectyes
  1. 启动所有接口
nmcli connection up bond0 nmcli connection up ens33 nmcli 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

  1. 查看 bond 状态并做切换测试
    cat /proc/net/bonding/bond0

💡参数说明miimon=100表示每 100ms 检查一次链路状态。

断掉主网卡ens33,ens36变为主网卡,ping测试依然可以连通。

4.1.2 使用 nmcli 配置 Team(activebackup 模式)
  1. 创建 team 接口(activebackup 主备模式)
nmcli connectionaddtypeteam con-name team0 ifname team0 config'{"runner": {"name": "activebackup"}}'
  1. 添加物理网卡到 team
nmcli connectionaddtypeteam-slave ifname ens33 con-name team0-slave1 master team0 nmcli connectionaddtypeteam-slave ifname ens36 con-name team0-slave2 master team0
  1. 设置 IP 地址
nmcli connection modify team0 ipv4.method manual ipv4.addresses192.168.32.150/24 ipv4.gateway192.168.32.2 ipv4.dns114.114.114.114 autoconnectyes


4. 启动所有接口

nmcli connection up team0 nmcli connection up team0-slave1 nmcli 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 state teamnl team0 ports

4.2 通过修改配置文件配置链路聚合(Mode 4)

4.2.1 配置bonding

创建bond0配置文件:

cd/etc/sysconfig/network-scripts/vimifcfg-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/vimifcfg-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:一张表看懂怎么选

对比维度BondTeam
稳定性⭐⭐⭐⭐⭐ 内核原生,久经考验⭐⭐⭐⭐ 较新,但已广泛使用
配置复杂度简单直接稍复杂(JSON 配置)
最大网卡数2 块8 块
IPv6 支持基础更好
调试便利性查看/proc/net/bonding/teamdctl命令更丰富
适用系统所有 Linux 发行版CentOS/RHEL 7+、主流现代发行版
扩展性功能固定更强,支持 hash 加密等

选型建议

  • 追求稳定、配置简单→ 选Bond(尤其是 mode 1),绝大多数场景够用
  • 需要绑定 2 块以上网卡→ 选Team
  • 需要更灵活的配置和更好的 IPv6 支持→ 选Team
  • 维护老旧系统→ 选Bond(兼容性更好)

六、生产环境最佳实践与避坑指南

6.1 选择合适的工作模式

场景推荐方案原因
追求高可用、对带宽不敏感Bond mode 1 / Team activebackup配置简单,故障切换快
需带宽叠加且能配置交换机Bond mode 4 / Team lacpLACP 标准协议,智能负载均衡
需带宽叠加但不想动交换机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 state teamnl team0 ports# 查看所有网络接口iplinkshow# 查看聚合接口的 IP 配置ipaddr show bond0ipaddr show team0# 测试故障转移(拔掉一根网线后观察)ping-Ibond0192.168.1.1

总结

从 Bond 到 Team,Linux 链路聚合技术走过了一条从“稳定可靠”到“灵活强大”的演进之路。

记住三句话

  1. Bond 是“老牌劲旅”:内核原生,稳定可靠,mode 1 主备模式是生产环境最稳妥的选择。
  2. Team 是“后起之秀”:设计更现代,支持更多网卡、JSON 配置、更好的 IPv6,是未来的方向。
  3. 模式选对最重要:追求高可用选主备(mode 1 / activebackup),追求带宽叠加且能配交换机选 LACP(mode 4 / lacp),不想动交换机选自适应(mode 6 / loadbalance)。

链路聚合是构建高可用网络架构的基石。掌握了 Bond 和 Team,你就能让服务器的网络从“单点脆弱”变成“多路冗余”——把网络故障的风险降到最低,把带宽的潜力发挥到最大。

如果你有任何问题或经验分享,欢迎在评论区留言讨论!