选对bond模式需按需求匹配:mode=1主备高可用、不依赖交换机;mode=0轮询需交换机聚合配置,否则丢包;mode=6双向负载均衡、免交换机支持;mode=4需lacp协商。忽略约束易致不通。

bond0 不是自动存在的,得手动创建并明确指定工作模式;选错 mode 或忽略交换机配合要求,会导致流量丢包、负载不均甚至完全不通。
怎么选对 bond 模式:看你要什么,而不是看名字
Linux 网卡绑定本质是内核模块 bonding 的行为策略,不同 mode 解决的问题完全不同:
-
mode=1(active-backup):只有一块网卡发包,另一块纯待命。断线秒切,不依赖交换机,适合高可用优先场景 -
mode=0(balance-rr):轮询发包,带宽能叠加,但必须要求交换机端口配置为聚合组(如 Cisco port-channel),否则交换机会因 MAC 地址漂移丢包 -
mode=6(balance-alb):收发双向自适应负载,主从网卡用不同 MAC 地址,无需交换机配合,普通二层环境就能用 -
mode=4(802.3ad):需交换机启用 LACP,双方动态协商链路状态,稳定性好,但配置稍复杂,xmit_hash_policy选错会导致某条链路长期空闲
别盲目套用教程里的 mode=0 —— 如果你没动过交换机配置,大概率跑不通。
配置文件里最容易漏掉的三处硬性约束
CentOS/RHEL 系统下,/etc/sysconfig/network-scripts/ifcfg-bond0 和从属网卡配置不是写完就生效,以下三项必须同时满足:
-
BONDING_OPTS="mode=1 miimon=100"要写在ifcfg-bond0里(或统一放在/etc/modprobe.d/bond.conf),不能只靠modprobe临时加载 - 所有从属网卡(如
eth0、eth1)的配置中,BOOTPROTO必须设为none,且必须包含MASTER=bond0和SLAVE=yes -
ONBOOT=yes要出现在bond0和每个从属网卡的配置里,否则重启后绑定不生效
少一条,systemctl restart network 后 cat /proc/net/bonding/bond0 就会显示 “No such device” 或只有 “MII Status: down”。
为什么 ip link set bond0 up 失败?检查内核模块和命名冲突
执行 ip link set bond0 up 报错 “Cannot find device ‘bond0’”,常见原因有:
-
bonding模块未加载:lsmod | grep bonding无输出 → 手动运行modprobe bonding - NetworkManager 正在接管接口:
nmcli device status显示eth0状态为 “connected”,需先nmcli connection delete "Wired connection 1"并设置NM_CONTROLLED=no在网卡配置中 - 配置文件名与
DEVICE值不一致:比如文件叫ifcfg-bond0,但里面写了DEVICE=bond1,系统会忽略该文件 - CentOS 7+ 默认用
teamd替代bonding,若已装teamd且服务运行中,bonding可能被屏蔽
验证是否真正绑定成功,只看 ifconfig bond0 不够,要查 cat /proc/net/bonding/bond0 中的 “Slave Interface” 和 “MII Status” 字段。
策略路由 + bond 混用时的典型陷阱
如果服务器既做了网卡绑定,又配了双网关(比如 eth0 走电信、eth1 走联通),千万别把物理网卡直接加进策略路由规则 —— bond0 绑定后,eth0 和 eth1 已失去独立 IP 和路由能力。
- 策略路由应基于
bond0的 IP 或子网(如ip rule add from 192.168.1.0/24 table table_bond),而非原始物理接口 - 若用了
mode=1,绑定后实际只有一个活跃出口,策略路由中针对“备用链路”的规则永远不会命中 -
ip route get查路径时,源地址必须是bond0配置的 IP,否则内核按默认路由表走,绕过你的策略
多网卡绑定本身不解决多出口分流问题;它解决的是单出口的可靠性或吞吐提升。分流得靠策略路由,但必须和绑定层级对齐,否则规则形同虚设。











