使用弹性哈希来最大程度地减少流重新映射
在网络端点之间的部署中,必须保留已建立的连接以及关联的第 2 层和第 3 层路径。如果网络中有任何变化,例如网络设备或服务器发生故障,数据包将采用新的路径。
弹性散列可减少网络更改带来的影响。每个具有弹性散列的 ECMP 都会在负载平衡表(也称为宏流表)中分配一个包含 256 个条目的区域。表中的每个条目都存储分配给该宏流的成员链接 ID。
弹性散列的工作原理如下所述:
-
将传入数据包散列到其中一个宏流条目或存储桶。
-
然后,将数据包链接到 ECMP 组中的路径。
如果我们使用“篮子”来表示每个成员链接/路径,则可以将弹性散列操作建模为将桶(宏流)放入其中一个篮子中。
如果我们有 N 个存储桶和 ECMP 组的 P 路径,请使用以下顺序:
-
初始存储桶映射是使用轮询方法生成的。因此,所有存储桶几乎平均 (N/P) 分布在 ECMP 组成员之间。稍后,存储桶会根据路径添加或删除事件四处移动。
如果 N=64 个存储桶且 P=4 个路径,则以轮询方式分配所有 64 个存储桶。由于您有 4 条路径,因此有 4 个堆栈。每个堆栈对应一个路径。每个堆栈具有相同数量的存储桶,N/P=16。
Last_processed_path= 0(请参阅算法的步骤 5)。
-
如果出现路径故障或删除,您会突然从故障路径/堆栈中删除所有存储桶,并以循环循环方式将它们推送到剩余的路径/堆栈中。
如果删除路径 3(上图中的堆栈 3),则需要将所有存储桶从堆栈 3(下图中的橙色)移动到剩余堆栈。
-
如果添加了路径,您会突然以循环方式从现有路径中删除 N/(P+1) 个存储桶,并将它们推送到新添加的路径/堆栈中。
如果添加新路径,则需要从现有堆栈(堆栈 0、1、2)中移动 N/P+1=64/4=16 个存储桶。所有橙色存储桶现在都回到堆栈 3 中,蓝色堆栈不会移动并且完好无损。
Last_processed_path= 0
-
步骤 2 和步骤 3 的圆形循环方向相反。确定循环轮询开始的第一个堆栈非常重要。您保留一个索引指针,该指针
last_processed_path
为步骤 2 提供起始堆栈索引,为步骤 3 提供启动堆栈之前索引。 -
5. 要设置
last_processed_path
,请执行以下操作:-
当您按照步骤 2 中推送存储桶时,
last_processed_path
是您在其中推送最后一个存储桶的最后一个堆栈的下一个堆栈。 -
如步骤 3 中所示移除存储桶时,
last_processed_path
是从中删除存储桶的最后一个堆栈。
-
弹性哈希的限制和注意事项
-
弹性散列仅在基于等价 BGP 路由的 ECMP 组上受支持。配置优先级高于 BGP 路由的其他协议或静态路由时,不支持弹性哈希。
-
混合速度 LAG 不支持弹性哈希。
-
当前设计不支持 128 路 ECMP 弹性散列。仅支持 64 路 ECMP 弹性散列。
-
当前弹性散列设计不支持混合速率聚合以太网 (AE) 和自适应负载平衡 (ALB) AE。
为 ECMP 配置弹性散列
为聚合以太网接口配置弹性散列
user@router# set interface ae1 aggregated-ehter-options resilient-hash