负载分担算法总览
链路聚合把流量分配到成员的依据是哈希:设备对报文的某些字段做散列运算,结果决定这条流走哪个成员口。常用因子有源与目的 MAC、源与目的 IP,以及在此基础上叠加四层端口号。选择算法的目标是让不同的流尽量均匀地落在各个成员上,而不是让某一条流跑得更快——同一会话的报文始终走同一个成员,这是保证不乱序的前提。
基本信息
| 实现方式 | 按哈希因子把流分配到成员口 |
|---|---|
| 常用因子 | 源/目的 MAC、源/目的 IP、IP 加四层端口 |
| 华为命令 | load-balance src-dst-ip |
| 思科命令 | port-channel load-balance src-dst-ip |
| 基本原则 | 同一会话固定走同一成员 |
| 验证方式 | 对比各成员的流量计数是否接近 |
算法与场景
| 哈希因子 | 典型场景 | 说明 |
|---|---|---|
| 源/目的 MAC | 纯二层转发 | 经路由后 MAC 被改写,分布可能变差 |
| 源/目的 IP | 网关与服务器区 | 最常用的选择,兼顾二层与三层网络 |
| IP 加四层端口 | 多会话业务 | 散列更细,四层设备与多连接场景常用 |
| 源 IP 加源端口 | 南北向流量为主 | 适合客户端数量远多于服务端的场景 |
配置与验证
配置与验证
# 华为:聚合口下设置哈希因子
interface Eth-Trunk1
load-balance src-dst-ip # 常用配置,兼顾源与目的
# Cisco:全局设置哈希算法
port-channel load-balance src-dst-ip
# 验证分布是否均匀
show interfaces Port-channel1 | include rate # 思科:看各链路速率
display interface Eth-Trunk 1 # 华为:看成员流量计数选择与调优要点
- 先明确流量特征:以南北向客户端访问为主时按源 IP 散列更均匀
- 服务端数量少时纯按目的 IP 散列容易倾斜,可叠加四层端口
- 算法变更后观察各成员计数,接近才算生效,凭配置回显无法判断
- 同一流量在成员之间重新分布会触发 TCP 重排序与重传,切换窗口内有短时抖动
- 算法无法解决单流带宽瓶颈,需要更高的成员速率才能提升单流性能
没有任何算法能把单条流拆分到多条链路上:单流的上限始终等于单个成员的带宽。想提升单流性能只能提高成员速率,或者改用支持逐包分发的方案。
聚合成员数量变化时,哈希结果会重新分布,原来走某成员的长连接可能被移动到另一条链路,造成 TCP 重排序与重传。变更成员前应评估对长连接业务的影响,尽量安排在窗口期。