25G网卡 Bond2 (Balance-XOR) 极限测试:28Gbps 并发与故障无缝切换实战

前言

在服务器双网卡绑定的测试中,bond4 (802.3ad/LACP) 往往是实现带宽叠加的首选。但是,如果你的交换机不支持 LACP,或者由于某种业务限制只能配置静态链路聚合 ,那么 bond2 (Balance-XOR) 就是你实现多口负载均衡的唯一选择。

最近在测试环境中对 25G 双口网卡进行了 bond2 模式的性能与故障切换压测。本文记录了完整的拓扑、配置、实测数据(最高 28Gbps 完美均分)以及跳过的坑,供大家参考。

一、 测试环境与拓扑

为了避免单一客户端源 IP 导致哈希算法无法分散流量,本次测试采用了三机拓扑(双客户端并发,模拟不同源 IP 的流量):

  • Server A (被测服务端) :25G 双口网卡,配置 bond2,IP: 10.0.0.1。

  • Client B (客户端 1) :单口独立网卡,IP: 10.0.0.2。

  • Client C (客户端 2) :单口独立网卡,IP: 10.0.0.3。

  • 交换机:二层交换机,采用手工静态聚合。

拓扑连线:

  • Server A 的双口(eth0, eth1)分别接交换机的 1口、2口,配置为 Eth-Trunk 1(静态聚合)。

  • Client B 接交换机的 3口,Client C 接交换机的 4口。

二、 核心配置

1. 交换机配置 (以华为/H3C风格为例)

注意:bond2 对端交换机绝对不能配 LACP,必须配手工静态聚合。

复制代码
system-view

# 创建 Server A 的静态聚合组 (1、2口)
interface Eth-Trunk 1
 mode manual load-balance
 trunkport 1/0/1 to 1/0/2
 port link-type access
 port default vlan 1
 load-balance src-dst-ip   # 建议配置基于IP的哈希
 quit

# 客户端独立接口 (3、4口)
interface 1/0/3
 port link-type access
 port default vlan 1
 quit
interface 1/0/4
 port link-type access
 port default vlan 1
 quit

2. 服务端 A (Linux) 配置

使用 nmcli 创建 bond2,并务必指定 layer3+4 的哈希策略(默认的 layer2 极难均分流量)。

复制代码
# 清理旧配置(如有)
nmcli connection delete bond4 2>/dev/null

# 创建 bond2
nmcli connection add type bond con-name bond2 ifname bond2 \
  bond.options "mode=balance-xor,miimon=100,xmit_hash_policy=layer3+4" \
  ipv4.method manual ipv4.addresses 10.0.0.1/24

# 添加网卡
nmcli connection add type ethernet con-name bond2-slave-eth0 ifname eth0 master bond2
nmcli connection add type ethernet con-name bond2-slave-eth1 ifname eth1 master bond2

# 启动
nmcli connection up bond2-slave-eth0
nmcli connection up bond2-slave-eth1
nmcli connection up bond2

# 调优内核参数消除 TCP Warning
sysctl -w net.core.wmem_max=4194304
sysctl -w net.core.rmem_max=4194304
sysctl -w net.ipv4.tcp_wmem="4096 87380 4194304"
sysctl -w net.ipv4.tcp_rmem="4096 87380 4194304"

三、 数据实测(硬核干货)

在两台客户端上同时运行 iperf 发送 -P 1 单流,并在服务端运行 sar -n DEV 1 观察网卡吞吐:

1. 初始均衡状态

复制代码
03:33:58 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   ...  %ifutil
03:33:58 PM     eno80 1206400.00  53862.00 1783680.31 ...         58.45
03:33:58 PM     eno81 1206400.00  53862.00 1783681.25 ...         58.45
03:33:58 PM     bond2 2412800.00  53862.00 3567361.56 ...         58.45

分析 :eno80 和 eno81 的流量完美 1:1 对等,各承载约 14.2 Gbps ,bond2 总带宽达到 28.4 Gbps。哈希算法完美地把两台客户端的流量分开了。

2. 模拟链路 A(eno81)故障

保持打流,物理拔掉 Server A 的 eno81 光模块:

复制代码
03:34:45 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   ...  %ifutil
03:34:45 PM     eno80       0.00      0.00       0.00 ...           0.00
03:34:45 PM     eno81 2031660.00  60427.00 3003833.14 ...         98.43
03:34:45 PM     bond2 2031612.00  60425.00 3003762.17 ...         98.43

分析 :eno81 归零,eno80 瞬间飙升,单口扛下所有流量,利用率达到 98.43%(约 24 Gbps 实际线速)。业务在断线 1 秒内极速恢复,无彻底中断。

bash 复制代码
sar -n DEV 1

3. 链路修复,恢复均衡

插回 eno81 光纤,观察状态:

复制代码
03:35:28 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   ...  %ifutil
03:35:28 PM     eno80 1192448.00  53231.00 1763053.00 ...         57.77
03:35:28 PM     eno81 1192448.00  53231.00 1763053.00 ...         57.77
03:35:28 PM     bond2 2384960.00  53227.00 3526200.62 ...         57.77

分析:系统自动自愈,流量再次均分,各占一半。

四、 避坑指南(重要)

本次测试中间遇到过一个非常折腾的"坑",记录一下:

现象 :客户端配置好 IP 后,互相 ping 报 Destination Host Unreachable(目标不可达)。

排查 :检查网卡状态、bond2 绑定状态均正常,底层接口 UP。

根因 :在交换机上执行 display interface 1/0/3 发现,客户端接入的端口 PVID = 10(VLAN 10),而服务端的聚合组 Trunk 1 放行的是 VLAN 1。客户端的 ARP 请求包进交换机后被打上 VLAN 10 标签,到了 Trunk 1 被直接丢弃,导致服务端收不到包。

解决 :统一交换机的 VLAN 划分。执行 port default vlan 1 将客户端接口的 PVID 改回 1,网络瞬间恢复。

五、 测试总结

  1. 带宽叠加 :得益于 layer3+4 哈希策略和多客户端源 IP,bond2 在静态聚合下成功实现了 28.4 Gbps 的双向负载均衡,总吞吐甚至逼近了双 25G 的线速极限。

  2. 故障切换:具备与 LACP 相当的高可用性。物理断线后,流量能瞬间压向单口(高达 24 Gbps),业务短暂掉速后快速自愈。

  3. 适用场景 :如果你的交换机无法配置 LACP,bond2 + 静态聚合是非常可靠的替代方案。但切记两点:服务端必须指定 xmit_hash_policy=layer3+4,且交换机侧必须保证 VLAN 配置的一致性。

相关推荐
Purple Coder1 小时前
超导性能对比
1024程序员节
小此方1 小时前
Re:Mysql数据库基础篇(四):一文吃透MySQL数据类型:精度陷阱、长度限制与存储机制
1024程序员节
lazy H1 小时前
【计算机网络】第 5 篇:TCP 和 UDP 有什么区别?从 Java 后端场景理解两种传输协议
经验分享·后端·网络协议·tcp/ip·计算机网络·1024程序员节
*小海豚*1 小时前
C盘占用大,windows系统清理C盘各软件 MSI 安装/修复缓存
1024程序员节
域智盾-终端安全管理1 小时前
终端安全管理系统:从“边界信任”到“终端零信任”的工程化落地
1024程序员节·终端安全管理系统
xiaogai_gai1 小时前
旺店通采购订单查询接口字段手册:queryWithDetail 实战权威教程
1024程序员节
黑旋风小威1 小时前
新手做网文漫改怎么提速 知漫剧自动拆分剧情分镜
人工智能·1024程序员节
爱读书的小胖1 小时前
LeetCode 274 H 指数 C 语言解题分析
c语言·算法·leetcode·1024程序员节
B2_Proxy1 小时前
Scrapy 代理 IP 调度进阶:基于 Redis 与中间件的高可用架构实战
python·scrapy·1024程序员节