bond0创建后不生效的根本原因是内核bonding模块未加载或配置位置错误;需手动modprobe bonding,配置写入/etc/modprobe.d/bonding.conf,并按正确顺序配置物理网卡与bond接口。

bond0 创建后不生效,ip link 看不到设备
根本原因通常是内核模块没加载,或者配置写在了错误位置。bonding 模块默认不自动加载,得手动触发。
- 先执行
modprobe bonding,再检查lsmod | grep bonding是否有输出 - 如果重启后失效,把
alias bond0 bonding和options bonding mode=802.3ad miimon=100写进/etc/modprobe.d/bonding.conf(注意不是modprobe.conf) - 别把 bonding 配置直接塞进
/etc/network/interfaces就完事——Debian/Ubuntu 必须配合ifenslave工具,而 RHEL/CentOS 用nmcli或teamd更稳,混用会卡在NO CARRIER
mode=4(802.3ad)下网卡聚合始终 fallback 到 round-robin
这不是 Linux 配置错了,而是交换机侧没开 LACP,或者端口聚合组没统一配置。Linux 的 bonding 驱动看到对端没响应 LACPDU,就会静默降级。
- 在交换机上确认:对应物理口必须加入同一个 LAG(Link Aggregation Group),且协议设为
LACP Active(不能是 Passive) - 检查 Linux 侧:运行
cat /proc/net/bonding/bond0,看LACP partner下的Aggregator ID和Port Key是否非零;全为 0 表示没协商成功 - 别用
mode=0(balance-rr)冒充聚合——它不依赖交换机支持,但实际无法真正提升单流带宽,且多数交换机不兼容
重启 network 服务后 bond0 的 IP 丢了,或子接口起不来
关键在配置顺序:物理网卡(如 eth1、eth2)必须先被设为 master bond0,再让 bond0 配 IP。顺序反了,systemd-networkd 或 ifup 就会跳过绑定步骤。
- Debian/Ubuntu:
/etc/network/interfaces中,auto eth1和auto eth2必须出现在auto bond0之前,且每张物理卡要加slave bond0 - RHEL/CentOS 8+:改用
nmcli,别碰ifcfg-bond0文件——nmcli connection add type bond ifname bond0 mode 802.3ad,再add-slave物理口,最后modify bond0 ipv4.addresses 192.168.1.10/24 - 常见坑:
ONBOOT=yes写在物理口配置里没用,真正起作用的是 bond 接口本身的ONBOOT和MASTER/SLAVE关系是否被 NetworkManager 正确识别
bond0 能通,但 NFS 或数据库连接频繁超时
大概率是 ARP 监测(arp_interval)和 miimon 冲突,或者 MTU 不一致导致分片失败。bonding 默认只检测链路层,对三层异常无感知。
- 启用 ARP 监测:在 bonding 参数中加
arp_interval=1000 arp_ip_target=192.168.1.1(填网关或核心交换机地址),但别同时开miimon和arp_interval——两者共存时,miimon优先级更高,ARP 设置会被忽略 - 所有参与 bond 的物理口、bond0、交换机端口,MTU 必须严格一致(比如都是 9000)。混用 1500 和 9000 会导致大包被丢弃,现象就是小流量正常、大文件传输卡死
-
mode=4下,交换机端口的 LACP 超时时间(lacp-timeout)建议设为fast(即 1 秒),否则 Linux 默认 90 秒才触发故障转移,业务早已中断
真实环境里,最麻烦的从来不是配出来,而是配出来之后没人去查 /proc/net/bonding/bond0 里的 Adaptation rate 和 Current HW address 是否稳定——这两项飘了,说明底层链路或驱动还在抖动,光看 UP RUNNING 没用。










