linux双网卡负载均衡核心是通过bonding将多网卡虚拟为单逻辑接口(如bond0),仅在bond0配置ip,物理网卡作从属设备;常用模式:mode=0需交换机聚合支持、mode=1为主备高可用、mode=6为免交换机配置的双向自适应负载均衡。

Linux中设置双网卡负载均衡,核心不是“给两个网卡配两个IP再手动分流”,而是通过 网卡绑定(Bonding) 把多块物理网卡虚拟成一个逻辑接口(如 bond0),由内核 bonding 驱动统一调度流量。IP 地址只配置在 bond0 上,物理网卡(如 ens33、ens37)不设 IP,仅作为从属设备参与负载或冗余。
✅ 选对模式是关键
不同场景对应不同 bonding 模式,企业常用三种:
-
mode=0 (balance-rr):轮询分发数据包,真正带宽叠加(如两块千兆 = 理论2Gbps),但必须交换机端配置链路聚合(LACP 或静态聚合),否则可能丢包、乱序。 -
mode=1 (active-backup):主备模式,只有一块网卡干活,另一块待命;故障切换快(无需交换机配合,适合纯高可用场景。 -
mode=6 (balance-alb):自适应负载均衡,发送+接收双向分流,自动根据网卡速率和负载分配流量,且不需要交换机做任何配置,是免改造环境的首选。
⚠️ 注意:纯无线网卡不支持
mode=6;所有模式都要求物理网卡速率、双工模式一致(如均为 1000Mbps/全双工)。
✅ 配置步骤(以 mode=6 为例,CentOS/RHEL 7+)
1. 创建 bond0 主接口配置
编辑 /etc/sysconfig/network-scripts/ifcfg-bond0:
DEVICE=bond0 TYPE=Bond NAME=bond0 BOOTPROTO=static IPADDR=192.168.100.54 PREFIX=24 GATEWAY=192.168.100.1 ONBOOT=yes USERCTL=no NM_CONTROLLED=no BONDING_MASTER=yes BONDING_OPTS="mode=6 miimon=100"
2. 配置物理网卡为从属(例如 ens33 和 ens37)
编辑 /etc/sysconfig/network-scripts/ifcfg-ens33:
DEVICE=ens33 BOOTPROTO=none ONBOOT=yes MASTER=bond0 SLAVE=yes USERCTL=no NM_CONTROLLED=no
同样配置 ifcfg-ens37,仅修改 DEVICE 值。
3. 加载 bonding 模块并开机生效
写入 /etc/modprobe.d/bonding.conf:
alias bond0 bonding options bond0 mode=6 miimon=100
或直接依赖 BONDING_OPTS(上一步已写),无需额外模块加载命令。
4. 重启网络服务
systemctl restart network # 或 ifdown bond0 && ifup bond0
5. 验证状态
cat /proc/net/bonding/bond0
正常输出应显示:
-
Bonding Mode: adaptive load balancing -
Currently Active Slave: ens33(或ens37) - 两个
Slave Interface的MII Status: up Link Failure Count: 0
✅ 补充说明:策略路由 ≠ Bonding
如果你有两张网卡连不同网络(如双宽带出口),想按源 IP 或目标网段走不同线路(比如内网流量走 A 口、公网走 B 口),那就不是 bonding,而是 策略路由(Policy Routing):
- 需要定义多个路由表(如
tab_eth0,tab_eth1) - 用
ip rule指定源地址或目标网段匹配哪张表 - 每张表里配独立网关和直连路由
这和 bonding 是两类方案:bonding 是“合二为一”,策略路由是“分而治之”。
不复杂但容易忽略细节。











