Bond网卡IP+端口负载均衡配置指南

将 bond 网卡的负载均衡策略修改为基于 IP + 端口(IP+PORT) 的哈希方式,以实现发送和接收流量都能根据 IP + 端口均匀分布到不同从网卡,以下是完整的修改步骤和验证方法。

一、核心修改步骤(临时生效 + 永久生效)

1. 临时修改(立即生效,重启网络 / 服务器后失效)

bash 复制代码
# 1. 先查看当前的哈希策略(确认当前配置)
cat /sys/class/net/bond0/bonding/xmit_hash_policy

# 2. 修改为基于 IP+端口的哈希策略(值为2)
# 0=仅MAC | 1=仅IP | 2=IP+端口 | 3=自定义
echo 2 > /sys/class/net/bond0/bonding/xmit_hash_policy

# 3. 验证修改是否成功
cat /sys/class/net/bond0/bonding/xmit_hash_policy

说明:xmit_hash_policy 主要控制发送流量 的哈希策略;而接收流量的负载均衡,bond 会自动适配该策略(因为接收侧的哈希逻辑与发送侧同源,IP + 端口的哈希能让不同会话的流量分发到不同从网卡)。

2. 永久修改(重启后不失效,推荐)

不同 Linux 发行版的 bond 配置文件路径不同,以下是主流发行版的配置方法:

(1)CentOS/RHEL 7/8/9(nmcli 或 ifcfg 配置)

  • 方法 1:通过 ifcfg 配置文件(推荐)

    bash 复制代码
    # 编辑 bond0 的配置文件
    vi /etc/sysconfig/network-scripts/ifcfg-bond0

    在文件中添加 / 修改以下行:

    bash 复制代码
    # 新增哈希策略配置
    BONDING_OPTS="mode=balance-xor miimon=100 xmit_hash_policy=layer3+4"
    # 说明:
    # mode=balance-xor 是基础(必须是支持哈希的模式:0/2/4/5/6)
    # miimon=100 是链路检测间隔(根据你的环境调整)
    # layer3+4 等价于 xmit_hash_policy=2(IP+端口)

    保存后重启网络:

    bash 复制代码
    # CentOS 7
    systemctl restart network
    # CentOS 8/9
    nmcli connection reload && nmcli connection up bond0
  • 方法 2:通过 nmcli 命令配置

    bash 复制代码
    # 修改 bond0 的连接配置
    nmcli con mod bond0 bond.xmit-hash-policy layer3+4
    # 重启 bond0 连接
    nmcli con up bond0

(2)Debian/Ubuntu(netplan 配置)

bash 复制代码
# 编辑 netplan 配置文件(通常是 /etc/netplan/00-bond.yaml)
vi /etc/netplan/00-bond.yaml

修改配置内容(确保包含 xmit-hash-policy: layer3+4):

bash 复制代码
network:
  ethernets:
    eth0:
      dhcp4: no
    eth1:
      dhcp4: no
  bonds:
    bond0:
      interfaces: [eth0, eth1]
      dhcp4: no
      addresses: [192.168.1.100/24]  # 替换为你的 bond0 IP
      parameters:
        mode: balance-xor  # 基础模式(可选 balance-rr/802.3ad/balance-tlb/balance-alb)
        miimon: 100
        xmit-hash-policy: layer3+4  # 核心:IP+端口哈希

应用配置:

bash 复制代码
netplan apply

二、关键补充:确保接收流量也能负载均衡

接收流量的负载均衡依赖两个前提,需额外确认:

  1. bond 模式必须支持接收负载均衡

    • ✅ 支持的模式:balance-xor(2)、802.3ad(4)、balance-alb(6)

    • ❌ 不支持的模式:balance-rr(0,仅发送轮询)、active-backup(1)、broadcast(3)如果你当前是 mode 0(balance-rr),建议改为 mode 2(balance-xor)+ layer3+4 哈希,才能实现收发双向的 IP + 端口负载均衡。

  2. 交换机侧需匹配配置(仅 mode 4/802.3ad):如果用 mode 4(802.3ad),需在交换机上配置:

    • 端口聚合模式为 LACP

    • 哈希策略也设置为 "基于 IP + 端口"(而非仅 MAC)否则交换机侧仍会将所有流量发往单张从网卡,导致接收流量不均衡。

三、验证修改效果

修改完成后,通过以下命令验证收发流量是否均衡:

复制代码
# 1. 查看最终的哈希策略配置
cat /proc/net/bonding/bond0 | grep "Xmit Hash Policy"
# 预期输出:Xmit Hash Policy: layer3+4

# 2. 同时监控两张从网卡的流量(以 UDP 端口 5000 为例)
# 开两个终端,分别执行:
tcpdump -i eth0 -n udp port 5000  # 监控 eth0 流量
tcpdump -i eth1 -n udp port 5000  # 监控 eth1 流量

# 3. 用多会话压测(如多源端口/目的端口发送 UDP 包)
# 例如用 hping3 模拟多端口流量:
hping3 -2 -p 5000 -k --spoof 192.168.1.200-210 192.168.1.100  # 多源 IP
# 或
hping3 -2 -p 5000-5010 -k 192.168.1.100  # 多目的端口

如果两张网卡的 tcpdump 都能抓到数据包,说明 IP + 端口的负载均衡已生效。

四、总结

  1. 核心配置 :将 xmit_hash_policy 设为 layer3+4(值为 2),实现基于 IP + 端口的哈希负载均衡。
  2. 模式匹配:接收流量要均衡,需选用 balance-xor/802.3ad/balance-alb 模式(避免 balance-rr)。
  3. 永久生效:需修改 bond 配置文件(而非仅临时 echo),确保重启后配置不丢失。

如果修改后仍有单网卡流量集中,大概率是测试流量的会话单一(如仅一个源 IP + 端口 + 一个目的 IP + 端口),需用多会话压测验证。

相关推荐
我在人间贩卖青春2 小时前
Socket套接字与TCP实现框架
网络·网络协议·tcp/ip·socket
TechubNews2 小时前
Techub News 專訪高鋒集團合夥人、Web3Labs行政總裁黃俊瑯:以資本與生態,賦能傳統企業Web3轉型
大数据·网络·人工智能·区块链
火星数据-Tina2 小时前
体育平台搭建:如何高效引入赛事直播与比分数据
大数据·前端·网络
YangXueChina2 小时前
系统分析师-系统安全性与设计
网络
源远流长jerry2 小时前
dpdk之tcp代码案例
服务器·网络·tcp/ip
Knight_AL2 小时前
深入理解 ZLMediaKit HTTP Hook 机制
网络·网络协议·http
工业引擎Robot2 小时前
安川机器人IO分配修改教程
网络
上海云盾安全满满2 小时前
高防IP怎样应对复杂CC攻击
网络·网络协议·tcp/ip
网安小白的进阶之路2 小时前
B模块 安全通信网络 第二门课 核心网路由技术-2-BGP属性-选路原则-路由优选
网络·安全·智能路由器