跳转到内容

链路聚合 Bond 的模式与配置 ​

机器上插了不止一块网卡,Bond(链路聚合,也叫 NIC teaming)能把它们合并成一个逻辑接口,用来提升带宽或者在一块网卡/一根网线坏掉时自动切换。这篇讲清楚该选哪种模式,以及怎么把它接进现有的 Linux Bridge。

改网络前必须先有退路

配置 Bond 需要改 /etc/network/interfaces 并重新应用配置,操作期间网络会短暂中断,配置错误还可能导致网桥完全起不来。开始前确认你有以下至少一条退路:

  1. 能接显示器和键盘到这台机器上(本机控制台)。
  2. 有 IPMI / BMC / iDRAC / iLO 这类带外管理。
  3. 机器就在手边,改砸了能直接走过去处理。

失联之后的具体自救步骤见改静态 IP 与失联自救,那篇的退路同样适用于 Bond 配错的情况。

为什么需要它 ​

  • 冗余:一块网卡或一根网线坏了,另一块自动接管,客户机网络不中断。
  • 带宽:某些模式能把多块网卡的带宽叠加,适合宿主机之间的存储网络或迁移网络。
  • 不适合的场景:单网口的机器用不上;对普通家庭内网,单网卡 + 路由器冗余通常足够,先确认你的交换机支持你打算用的模式。

开始之前 ​

  • 确认交换机能力:多数 Bond 模式对交换机没有特殊要求,但 802.3ad(LACP)需要交换机同样配置成 LACP 聚合组,且所有参与的网口速率、双工模式要一致。
  • 准备至少两块空闲网卡(或两个未使用的网口),先用 ip link 确认它们的接口名。
  • 先做一次 /etc/network/interfaces 的备份:
sh
# 宿主机 shell
cp /etc/network/interfaces /root/interfaces.bak
  • 集群的 corosync 网络不建议用 Bond,官方建议用多张独立网卡走多个网络,corosync 自己在网络之间切换,某些 Bond 模式反而会干扰它的判断。

认识各种 Bond 模式 ​

模式名称冗余带宽叠加交换机要求
0balance-rr有有(轮询发包)无特殊要求
1active-backup有无(只有一块在工作)无特殊要求
2balance-xor有有(按源/目的 MAC 哈希选口)无特殊要求
3broadcast有无(每个包都发到所有口)无特殊要求
4802.3ad(LACP)有有必须支持 LACP 并配置聚合组
5balance-tlb有有(发送方向)无需特殊支持
6balance-alb有有(收发双向,靠改写 ARP 应答实现)无需特殊支持

该选哪个

  • 交换机支持 LACP:优先选 802.3ad,冗余和带宽都兼顾,是官方文档推荐的选择。
  • 交换机不支持,或者是傻瓜交换机:选 active-backup,配置最简单,唯一代价是不叠加带宽。
  • balance-tlb / balance-alb 不需要交换机配合,但不要在它们上面直接跑挂了客户机的 Linux Bridge——官方文档明确建议避免这个组合,行为可能不符合预期。

操作步骤 ​

第一步:确认接口名 ​

sh
# 宿主机 shell
ip link show

记下要聚合的两个接口名,例如 eno1、eno2。

第二步:编辑配置 ​

Web UI 路径:节点 → System → Network → Create → Linux Bond,选中参与的网卡和模式;或者直接编辑配置文件:

sh
nano /etc/network/interfaces

以 802.3ad 为例,新增一个 bond 接口,再把原来 vmbr0 的上联口从物理网卡改成这个 bond:

text
auto bond0
iface bond0 inet manual
        bond-slaves eno1 eno2
        bond-miimon 100
        bond-mode 802.3ad
        bond-xmit-hash-policy layer2+3

auto vmbr0
iface vmbr0 inet static
        address 192.168.1.10/24
        gateway 192.168.1.1
        bridge-ports bond0
        bridge-stp off
        bridge-fd 0

bond-miimon 100 表示每 100 毫秒检测一次链路状态,用来判断成员口是否掉线。bond-xmit-hash-policy layer2+3 是 802.3ad 和 balance-xor 常用的哈希策略,按源/目的 MAC 加 IP 计算,分流更均匀。

先语法检查,再应用

改完文件不要直接 ifreload -a。先跑一次模拟检查:

sh
ifup --no-act vmbr0

它只报告配置是否有问题,不会真正生效。确认没有报错后再执行:

sh
ifreload -a

当前的 SSH 会话可能会短暂中断,这是正常现象,用同一个地址重新连接即可。如果几分钟内都连不上,按上面的警示块走物理控制台或 IPMI。

Web UI 的做法会先写入 /etc/network/interfaces.new,点击 Apply Configuration 才真正生效,逻辑和改静态 IP 时一样,见改静态 IP 与失联自救里的说明。

第三步(可选):给存储/迁移单独一个网络 ​

如果做 Bond 是为了给 Ceph 或迁移流量提速,通常会给 bond 接口直接配一个固定 IP(不接网桥),单独作为存储网络使用,而不是接进 vmbr0:

text
auto bond0
iface bond0 inet static
        address 10.10.10.2/24
        bond-slaves eno3 eno4
        bond-miimon 100
        bond-mode 802.3ad
        bond-xmit-hash-policy layer2+3

检查结果 ​

sh
# 1. Bond 状态,确认两块网卡都是 Up
cat /proc/net/bonding/bond0

# 2. 接口存在且有 IP(如果直接配了 IP)
ip -4 addr show bond0

# 3. 网桥的上联口已经是 bond0
bridge link show

再做一次故障切换测试:拔掉其中一根网线(或在交换机上关掉一个端口),确认客户机网络不中断,cat /proc/net/bonding/bond0 里能看到掉线的口状态变化。测完记得把线插回去,再检查状态恢复正常。

重启一次再交付

和改 IP 一样,配置生效不代表冷启动也没问题。找个维护窗口重启一次宿主机,确认 Bond 在开机时正常建立。

常见问题 ​

Bond 建好但网速没有变化。 检查模式是否真的支持带宽叠加(active-backup 不会),以及交换机是否正确配置了 LACP 聚合组——单条 TCP 流通常也不会因为 Bond 而变快,带宽叠加体现在多条并发连接上。

LACP 模式下 Bond 状态一直显示 down。 交换机没有把对应端口配置成同一个聚合组,或者两端的 LACP 速率(fast/slow)不一致。查交换机侧的聚合组配置。

拔掉一根网线后客户机断网了几秒才恢复。 这是正常的探测延迟,bond-miimon 决定检测间隔,默认 100 毫秒级别的中断很难完全避免。

改完之后集群失去 quorum 或迁移变慢。 如果 corosync 走的正是这个网络,参考官方建议改用多网络而不是 Bond,具体见集群进阶。

延伸阅读 ​

Proxmox VE 非官方中文使用指南,与 Proxmox Server Solutions GmbH 无隶属关系。