linux多网卡绑定成功需满足三点:加载bonding模块并开机生效、slave网卡禁用ip且正确配置master/slave、bond模式与交换机能力匹配;否则bond0无法创建或无法正常切换。

Linux 多网卡负载均衡不能靠“配完就通”,必须选对 mode、配对交换机、禁用 slave 网卡 IP,三者缺一不可;否则 bond0 会显示 UP 但无流量、或单流带宽不叠加、甚至 SSH 断连。
怎么确认 bonding 模块已真正加载且开机生效
运行 lsmod | grep bonding 有输出 ≠ 永久生效。临时加载的模块重启即丢,bond 接口根本创建不了。
- Debian/Ubuntu:往
/etc/modules追加一行bonding,然后sudo update-initramfs -u - RHEL/CentOS 7+:新建
/etc/modules-load.d/bonding.conf,内容仅bonding,无需 alias 或 options - 验证是否内核原生支持:检查
/boot/config-$(uname -r)中是否存在CONFIG_BONDING=m或=y,否则modprobe bonding会静默失败
为什么 bond0 起来了却没 IP 或 ping 不通网关
最常见原因是物理网卡没真正 up,或配置顺序/参数错位。别只看 ip a,先查链路层。
- 用
ethtool eth0和ethtool eth1确认Link detected: yes,且速率/双工匹配 -
ifcfg-bond0中不能写GATEWAY(应放/etc/sysconfig/network或用DEFROUTE=yes) - 两个 slave 配置文件(如
ifcfg-eth0)中必须同时含:BOOTPROTO=none、MASTER=bond0、SLAVE=yes、ONBOOT=yes;删掉所有IPADDR、NETMASK、DHCP相关行 - 启动顺序关键:
ifup eth0 && ifup eth1必须在ifup bond0之前完成,否则绑定失败
mode=0 / mode=4 / mode=6 负载均衡模式怎么选才不翻车
所谓“负载均衡”不是自动生效的,每种 mode 对硬件和配置的要求差异极大。
-
mode=0(balance-rr):不依赖交换机协商,但要求交换机端口必须配置为静态 trunk 或 802.3ad 聚合组,否则数据包乱序、TCP 重传飙升;单流带宽不会提升 -
mode=4(802.3ad):必须交换机启用 LACP Active,且聚合组内所有端口速率/双工/MTU 一致;Linux 侧需加lacp_rate=1(快速模式),否则协商超时 -
mode=6(balance-alb):唯一无需交换机配合的双向负载模式,但接收方向依赖 ARP 协商,客户端需支持 gratuitous ARP;虚拟化环境宿主机网卡要开混杂模式
验证 bonding 是否真生效,别只信 ifconfig
ip a 显示 bond0 有 IP,不代表流量走对了路径,更不代表故障能切换。必须读内核暴露的状态接口。
- 执行
cat /proc/net/bonding/bond0,重点看:-
Currently Active Slave—— 当前主网卡是谁 -
MII Status全是up才算链路正常 -
LACP partner下的Aggregator ID非零 →mode=4协商成功
-
- 手动模拟故障:
ifconfig eth0 down,2 秒内观察cat /proc/net/bonding/bond0中Currently Active Slave是否切换,且业务连接不中断 - 注意:某些老旧交换机不支持
fail_over_mac=1,启用后反而泛洪,务必在测试环境拔线验证
最容易被忽略的是:网卡名不稳定(如 eth0 变成 enp3s0)会导致配置文件失效;生产环境建议用 MAC 地址绑定设备名,或在 netplan/nmcli 中显式 match。











