Linux网卡绑定真正高可用取决于模式选择、底层链路状态、交换机协同和配置稳定性四环节:mode=1无需交换机配合、秒级切换,mode=4需LACP全匹配才能带宽聚合,mode=6收发双向负载均衡且免交换机配置,同时须确保bonding模块加载、物理链路UP、网卡命名稳定及配置字段准确。

Linux 网卡绑定(Bonding)不是简单“加两块网卡”,而是通过内核模块把多个物理接口聚合成一个逻辑 bond 接口,实现链路冗余或带宽叠加。能否真正高可用,取决于模式选择、底层链路状态、交换机协同和配置稳定性这四个关键环节。
选对模式:按需求匹配高可用或带宽目标
不同 mode 决定故障行为与流量走向,不能只看“名字”:
- mode=1(active-backup):最稳妥的高可用方案。仅一张网卡转发,另一张全程待命;主卡断开后秒级切换,MAC 和 IP 全局不变。无需交换机配合,适合绝大多数业务服务器。
- mode=4(802.3ad / LACP):真带宽聚合(如双千兆≈1.8Gbps),但必须交换机启用 LACP、端口加入同一聚合组,且速率/双工/LACP 参数完全一致,否则 bond0 无法协商上线。
- mode=6(balance-alb):收发双向负载均衡,发送按速率分摊,接收靠 ARP 协商引导;不依赖交换机,但要求网卡驱动支持 ethtool 获取速率信息。
- mode=0(balance-rr)看似简单轮询,实际易引发乱序与 MAC 振荡,生产环境慎用;mode=2/3/5 使用较少,需特定拓扑或内核支持。
稳住基础:模块、链路与命名缺一不可
很多 bond0 起不来或没 IP,问题不在配置文件,而在底层没就绪:
- 确认 bonding 模块已加载:
lsmod | grep bonding;若无输出,执行modprobe bonding,并写入/etc/modules-load.d/bonding.conf保证开机加载。 - 检查两块物理网卡是否真实 UP:
ethtool enp3s0和ethtool enp4s0中 “Link detected: yes” 必须同时成立;一根线松动或交换机端口 shutdown,bond 就无法激活。 - 避免网卡名漂移:系统重启后 enp3s0 变成 enp5s0 会导致配置失效。推荐在 netplan 或 ifcfg 中用 MAC 地址绑定设备名(
match: {macaddress: aa:bb:cc:dd:ee:ff}或HWADDR=)。
配准细节:不同发行版的关键字段不能错
配置写错一个字段,bond0 就可能“存在但不通”:
-
Ubuntu/Debian(Netplan):必须指定
renderer: networkd;物理接口要设managed: false,否则 NetworkManager 会抢管;示例中optional: true防止单卡缺失导致 apply 失败。 -
RHEL/CentOS(ifcfg):bond0 配置里
TYPE=Bond、BONDING_OPTS="mode=1 miimon=100"不可少;从属网卡必须含MASTER=bond0和SLAVE=yes;禁用 NetworkManager:systemctl disable --now NetworkManager。 - 所有模式都建议设置
miimon=100(100ms 链路检测),太小加重内核负担,太大延迟故障切换;mode=1 下可加primary=enp3s0明确主卡,减少 ARP 响应抖动。
验明实效:别只看 ip a,要看内核暴露的状态
验证不能止于“bond0 出现在 ifconfig 里”,得确认它真正在工作:
- 查聚合状态:
cat /proc/net/bonding/bond0—— 看 “Bonding Mode”、“MII Status”、“Slave Interface” 列表及当前 “Primary Slave”。 - 模拟故障测试:
ip link set enp3s0 down,观察是否自动切到 enp4s0,且 ping 网关不中断(通常丢 1–3 个包)。 - 确认流量路径:
watch -n1 'cat /proc/net/bonding/bond0 | grep -A2 "Currently active slave:"',持续观察主备是否按预期切换。


















