linux多网卡负载均衡无通用配置,需按目标选模式:mode=6(balance-alb)免交换机配合但需miimon=100;mode=4(lacp)需交换机同步配置;跨isp必须用策略路由+多路由表。

Linux 多网卡负载均衡没有通用配置,必须先明确目标:你要的是带宽叠加、故障自动切换,还是多出口分流?选错模式,流量照样只走一张网卡。
mode=6(balance-alb)适合交换机不支持LACP的场景
这是唯一无需交换机配合、又能实现收发双向负载的模式。它通过源/目的 IP + 端口哈希分发发送流量,再用 ARP 协商让对端把响应包发回当前活跃口,避免乱序。
-
modprobe bonding mode=6 miimon=100必须带miimon=100,否则链路故障检测延迟可达数分钟 - 纯无线网卡不支持该模式,内核会拒绝加载,报错
Unsupported device type for mode=6 -
BONDING_OPTS="mode=6 miimon=100 primary=ens33"建议显式指定primary,避免初始路由混乱 - 配置文件中
TYPE=bond和BONDING_MASTER=yes缺一不可,否则ifup bond0会静默失败
mode=4(802.3ad/LACP)需要交换机端同步启用聚合
这是真正能榨干双万兆网卡性能的方案,但前提是交换机必须开启 LACP 并将对应端口加入同一个聚合组。否则数据包会大量丢弃或 MAC 抖动。
- 服务器侧加载模块:
modprobe bonding mode=4 miimon=100 lacp_rate=fast - 检查聚合状态:
cat /proc/net/bonding/bond0中必须看到Aggregator ID和多个Slave Interface处于Active - 若显示
Aggregator ID: N/A或所有从属接口为Standby,基本是交换机没配好 - 速率不一致(如一块千兆一块万兆)或双工模式不同,会导致绑定失败,
dmesg | grep bonding会报错
策略路由才是多ISP出口分流的正解
当两张网卡连的是不同子网甚至不同 ISP(比如电信 + 联通),bonding 模式全部失效——因为它们根本不在同一二层域。此时必须用策略路由 + 多路由表。
- 先在
/etc/iproute2/rt_tables添加自定义表名,例如:100 tab_tel和200 tab_unicom - 为每张网卡单独建路由表:
ip route add default via 192.168.1.1 dev eth0 table tab_tel - 添加规则绑定源地址:
ip rule add from 192.168.1.100/32 table tab_tel - 禁用反向路径过滤:
sysctl -w net.ipv4.conf.eth0.rp_filter=0,否则回包被丢弃
nmcli team 配置最容易漏掉的四个动作
在 RHEL/CentOS 7+ 或银河麒麟上用 nmcli 配置 team 接口,抄命令大概率失败,关键步骤不能跳:
- 执行
nmcli connection down "System ens33"—— 即使显示 disconnected,只要它还关联着连接名,后续加 slave 就报device is already managed - 创建 team 主接口时,
config参数里的 JSON 必须用单引号包裹,且runner.name字段不能拼错:'{"runner": {"name": "activebackup"}}'少个 r 就静默失败 -
master指的是连接名(con-name),不是设备名(ifname)。你写nmcli connection add ... con-name team0,那加 slave 时就必须写master team0 -
teamd守护进程只在第一个nmcli connection up team0-ens33时启动;顺序必须是先 up slave,最后 up team 主连接,否则整个 team 接口始终 unmanaged
真正容易被忽略的点是:bonding 模式只解决“同一子网内多链路”的问题,而跨子网、跨 ISP、跨运营商的流量调度,必须跳出 bonding 思维,转向策略路由或应用层标记(如 iptables -t mangle + fwmark)。否则调再久,流量也只会走默认路由那一张卡。











