外观
链路聚合 Bond 的模式与配置
机器上插了不止一块网卡,Bond(链路聚合,也叫 NIC teaming)能把它们合并成一个逻辑接口,用来提升带宽或者在一块网卡/一根网线坏掉时自动切换。这篇讲清楚该选哪种模式,以及怎么把它接进现有的 Linux Bridge。
改网络前必须先有退路
配置 Bond 需要改 /etc/network/interfaces 并重新应用配置,操作期间网络会短暂中断,配置错误还可能导致网桥完全起不来。开始前确认你有以下至少一条退路:
- 能接显示器和键盘到这台机器上(本机控制台)。
- 有 IPMI / BMC / iDRAC / iLO 这类带外管理。
- 机器就在手边,改砸了能直接走过去处理。
失联之后的具体自救步骤见改静态 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 模式
| 模式 | 名称 | 冗余 | 带宽叠加 | 交换机要求 |
|---|---|---|---|---|
| 0 | balance-rr | 有 | 有(轮询发包) | 无特殊要求 |
| 1 | active-backup | 有 | 无(只有一块在工作) | 无特殊要求 |
| 2 | balance-xor | 有 | 有(按源/目的 MAC 哈希选口) | 无特殊要求 |
| 3 | broadcast | 有 | 无(每个包都发到所有口) | 无特殊要求 |
| 4 | 802.3ad(LACP) | 有 | 有 | 必须支持 LACP 并配置聚合组 |
| 5 | balance-tlb | 有 | 有(发送方向) | 无需特殊支持 |
| 6 | balance-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 0bond-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,具体见集群进阶。