Linux 多网卡负载均衡配置

11次阅读

linux 多网卡负载均衡可通过四种方法实现:一、bonding 主备模式保障高可用;二、bonding 平衡轮询模式提升吞吐但需交换机支持;三、策略路由按源 ip 分流适用于多 isp;四、tc+ifb 哈希分流实现会话级均衡。

Linux 多网卡负载均衡配置

如果您在 Linux 系统中部署了多块物理网卡,但流量始终只通过其中一张网卡转发,导致带宽利用率不均或单点故障风险升高,则可能是未正确配置链路聚合或负载均衡策略。以下是实现 Linux 多网卡负载均衡的几种可行方法:

一、基于 bonding 驱动的主备模式(active-backup)

该模式下仅有一张网卡处于活动状态,另一张作为热备份;虽不提供带宽叠加,但可实现高可用性与故障自动切换,适用于对可靠性要求高于吞吐量的场景。

1、确认内核已加载 bonding 模块:modprobe bonding

2、创建 bonding 接口配置文件,例如 /etc/sysconfig/network-scripts/ifcfg-bond0,内容包含:DEVICE=bond0、BOOTPROTO=static、IPADDR=192.168.1.100、NETMASK=255.255.255.0、ONBOOT=yes、BONDING_OPTS=”mode=active-backup miimon=100 primary=eth0″。

3、修改原网卡配置文件 ifcfg-eth0ifcfg-eth1,设置 MASTER=bond0、SLAVE=yes、ONBOOT=yes,并注释掉 IPADDR 等地址相关字段。

4、重启网络服务:systemctl restart network(CentOS/RHEL)或 sudo systemctl restart networking(Debian/Ubuntu)。

二、基于 bonding 的平衡轮询模式(balance-rr)

该模式按数据包顺序轮流从各成员网卡发出,理论上可提升总吞吐量,但要求交换机端口必须聚合且支持相同 MAC 地址多端口转发,否则可能引发 MAC 地址抖动或丢包。

1、编辑 /etc/sysconfig/network-scripts/ifcfg-bond0,将 BONDING_OPTS 中的 mode 改为 balance-rr,并保留 miimon=100 参数。

2、确保交换机已启用端口汇聚(如 Cisco 的 EtherChannel 或华为的 Eth-Trunk),且所有参与 bonding 的物理端口加入同一组、配置为静态 LACP 或 on 模式。

3、检查 bonding 状态:cat /proc/net/bonding/bond0,确认 MII Status 全为 up,且当前模式显示为 balance-rr。

4、验证流量分布:在持续传输大文件时,分别执行 watch -n1 ‘cat /proc/net/dev | grep eth’,观察各 eth 接口 RX/TX 字节数是否交替增长。

三、基于策略路由(policy routing)的源地址分流

该方法不依赖 bonding 驱动,而是利用 Linux 内核的多路由表与 ip rule 规则,根据源 IP 地址将出向流量导向不同网关及物理接口,适用于多 ISP 接入或跨子网出口分离场景。

1、为每张网卡配置独立 IP 与默认路由,例如 eth0 对应 192.168.10.2/24,网关 192.168.10.1;eth1 对应 192.168.20.2/24,网关 192.168.20.1。

2、添加自定义路由表,在 /etc/iproute2/rt_tables 中追加两行:100 table_eth0101 table_eth1

3、为每个表填充路由:执行 ip route add 192.168.10.0/24 dev eth0 src 192.168.10.2 table table_eth0ip route add default via 192.168.10.1 table table_eth0;同理配置 table_eth1。

4、添加策略规则:运行 ip rule add from 192.168.10.2 table table_eth0ip rule add from 192.168.20.2 table table_eth1,使对应源地址流量强制走指定路由表。

四、基于 tc + ifb 的出向流量哈希分流

此方案通过流量控制子系统(tc)配合虚拟接口 ifb(Intermediate Functional Block),在 egress 方向依据五元组进行哈希分发,实现更细粒度的会话级负载均衡,无需交换机配合,但需手动维护流分类规则。

1、加载 ifb 模块:modprobe ifb numifbs=2,然后启用接口:ip link set dev ifb0 upip link set dev ifb1 up

2、将 eth0 和 eth1 的出向流量重定向至 ifb 接口:tc qdisc add dev eth0 handle ffff: ingress,再执行 tc filter add dev eth0 parent ffff: protocol ip u32 match ip dst 0.0.0.0/0 action mirred egress redirect dev ifb0;同理配置 eth1 → ifb1。

3、在 ifb0 和 ifb1 上分别配置 fq_codel 队列并绑定 cls_u32 分类器,使用 hash keys nfkuid 实现基于源 / 目的 IP+ 端口的哈希分流。

4、为每个 ifb 接口设置不同速率上限,例如 tc qdisc add dev ifb0 root tbf rate 500mbit burst 32kbit latency 400ms,以避免单接口过载。

text=ZqhQzanResources