Appearance
HASH 负载分担不均问题处理
《H3C RoCE 网络开局一本通》拆分章节,文档版本:6W102。
7.1 什么是负载分担不均
我们希望流量能较为均匀的分配到等价路由的多条路径或者聚合的多个成员端口转发,如果出现流量集中到 1 条或者其中几条路径转发,其他路径分配到很少的流量或者没有流量,即发生了负载分担不均。负载分担不均时,一是影响链路利用率,二是负载大的链路可能会导致业务异常。
7.2 负载分担不均一般处理原则
优先调整本地 ECMP 或聚合 HASH;本地调整无效时,调整上级设备的 ECMP HASH 算法,同时注意对下级设备的 HASH 影响。
建议按如下步骤调整:
(1) 排除 HASH 极化问题。 HASH 极化的处理建议请参考 HASH 极化。
(2) 调整哈希因子:总体原则为分析流量变化的因子,将 HASH 因子配置为变化丰富的项目,例如转发报文的 MAC 地址变化,而设置的负载分担方式为
source-ip,则无法负载分担。另外分析流量从多个端口进入的还是从单个端口进来的,如果是从多个端口进入,可以增加 ingress port 作为 HASH 因子。(3) 调整 HASH 算法。
(4) 调整 Seed 值。
(5) 调整 Shift 值。
(6) 调整成员端口数量,建议成员口总数为 2 的 N 次方。
HASH 因子、 HASH 算法、 Seed 值、 Shift 值的配置方法请参考表 7-1。
7.3 HASH 负载分担调整命令
在负载分担不均时,可以通过调整 HASH 算法、 seed 值、 shift 值调整 HASH 计算结果。不同型号的产品支持情况有差异,具体的支持情况轻易设备实际情况为准。
表 7-1 HASH 负载分担调整命令
| 调整项目 | ECMP HASH | 聚合HASH |
|---|---|---|
| HASH因子 | ip load-sharingmode | link-aggregation global load-sharing mode(系统视图) link-aggregation load-sharing mode(接口视图) |
| HASH算法 | ip load-sharingmode per-flowalgorithm | link-aggregation global load-sharing algorithm |
|---|---|---|
| Seed | ip load-sharing | |
| 当网络中存在 | mode per-flow | |
| 多个厂商设备 | algorithm | link-aggregation global load-sharing seed |
| 时,建议不同厂 | algorithm-number | |
| 商配置为一致 | seedseed-number | |
| Shift | ip load-sharing | |
| 当网络中存在 | mode per-flow | |
| 多个厂商设备 | algorithm | link-aggregation global load-sharing offset |
| 时,建议不同厂 | algorithm-number | |
| 商配置为一致 | shiftshift-number |
7.4 HASH 极化
1. HASH 极化简介
HASH 极化是指流量进行 2 次或 2 次以上 HASH 后出现的 HASH 不均匀的情况。如下情况中可能出现 HASH 极化:
第一级设备进行 ECMP HASH,第二级再设备进行 ECMP HASH;
第一级设备进行 ECMP HASH,第二级进行聚合 HASH;
同一级设备, ECMP 路径的其中一条或多条路径的出接口是聚合接口,流量先进行 ECMP HASH,再进行聚合 HASH。
如图 7-1 所示, SW1 接收了 2 条流量,根据设备的负载分担配置可以将流量均匀的 HASH 到 2 个出接口。流量 1 (绿色标识)到达 SW2 后,如果 SW2 计算负载分担的方式和 SW1 一致或相似, 可能出现流量仅 HASH 到部分接口,另外一部分接口完全 HASH 不到流量或流量很少的情况。 SW3 的情况类似。
图 7-1 HASH 极化

- 如何避免 HASH 极化
(1) 多级设备组网中,相邻级别设备避免采用 HASH 算法相同和相似的设备。
(2) 多级设备组网中,第一次 HASH 和第 2 次 HASH 配置不同的 HASH 算法 /HASH 因子。例如第一级设备采用算法 1,第二级设备采用算法 4;第一级设备基于源 IP 负载分担,第二级设备基于目的 IP 负载分担。
(3) 第 1 次 HASH 和第 2 次 HASH 的出接口数目互质。
例如:第 1 级设备进行聚合 HASH,存在 2 条物理出接口,第 2 级设备进行 ECMP HASH, 存在 3 条物理出接口, 2 和 3 互质。
7.5 跨 IRF 成员设备 ECMP 或聚合是否开启了本地优先转发功能
跨 IRF 成员设备 ECMP 或聚合的转发流程如图 7-2 所示。 ECMP 或聚合采用本地优先转发时,本地设备出接口间可以负载均匀,不同设备间成员口负载不均匀。 ECMP 或聚合关闭本地优先转发时, 流量可在所有成员设备的出接口间负载均匀。但是由于部分报文会经过 IRF 链路再转发,会增加 IRF 物理链路负担。
数据中心交换机的 ECMP 和聚合本地优先转发功能缺省处于开启状态。
ECMP 和聚合本地优先转发功能配置命令如下,需要时可以调整配置。
ip load-sharing local-first enable(系统视图)link-aggregation load-sharing mode local-first(系统视图)
图 7-2 跨 IRF 成员设备 ECMP 或聚合负载分担转发流程
IRF 中,进入某成员设备的报文出接口为 ECMP/ 聚合接口,且 ECMP 出口 / 聚合成员口分布在多个成员设备上

7.6 增加成员接口数量,建议出接口总数目为 2 的 N 次方
增加 ECMP 等价路径数目,或者聚合成员端口数量也可以改变负载分担结果。增加接口数量时,建议接口总数目为 2 的 N 次方。 2 的 N 次方个出口与报文发送周期的时隙更匹配,可以使负载分担更均匀。
7.7 其他常见 HASH 功能
1. 聚合弹性负载分担
本功能的支持情况请以设备的实际情况为准。
聚合弹性负载分担和等价路由增强功能类似,用于实现在聚合成员链路增加或减少时,尽量少的切换链路上的流量,只有部分流量进行链路切换。
例如,有一个聚合组中包含 3 条成员链路,根据聚合负载分担进行数据转发,其中一条链路故障无法转发数据时:
未配置弹性负载分担情况下另外两条链路会重新分配流量。
配置了弹性负载分担,另外两条链路上之前分配的流量不会发生变化,只是将故障链路上的流量大致均匀地分配到这两条链路上,这样对业务造成的影响较小。
当故障链路恢复后,会从这两条链路卸载一部分流量到故障恢复的这条链路上,各链路的流量分配和故障前流量分配也不会完全一致。
采用弹性负载分担后,如果链路没有增加或减少,则根据聚合缺省的负载分担方式对流量进行负载分担。
聚合弹性负载分担配置命令为: link-aggregation load-sharing mode resilient (聚合接口视图)。
2. 对称 HASH (同源同宿)
开启对称 HASH 功能后,同一条数据流的往返报文将负载分担到同一条路径。
在某些场景下,例如交换机旁挂两台 Firewall 对流量进行安全防护,交换机 HASH 流量给两台 Firewall,两台 Firewall 各自为自己负责的流量(占总流量的一半)建立了 session;返程流量到达交换机时将被再次 HASH 分发,如若返程 HASH 分发与去程 HASH 分发不一致(不对称),则 Firewall 上会重复建立 session,不仅浪费了 Firewall 的资源,而且对流量的安全防护做得不够准确。在该场景下,需要启用“对称 HASH ”以保证双向流量走相同的链路。
图 7-3 交换机旁挂防火墙上行流量和下行流量对称 HASH (一)

图 7-4 交换机旁挂防火墙上行流量和下行流量对称 HASH (二)

对称 HASH 的配置命令为 ip load-sharing symmetric enable (系统视图)。