LAG 和 ECMP 散列算法
了解用于 LAG 和 ECMP 的散列算法,以及如何配置散列算法。
了解用于对 LAG 捆绑进行散列处理并出口下一跃点 ECMP 流量的算法
在启用等价多路径 (ECMP) 时,瞻博网络 EX 系列和 QFX 系列使用散列算法来确定如何通过链路聚合组 (LAG) 束转发流量,或转发至下一跳设备。
散列算法根据各个数据包字段中的值以及一些内部值(如源端口 ID 和源设备 ID)做出散列决策。您可以配置散列算法使用的一些字段。
本主题包含以下部分:
了解散列算法
散列算法用于在启用 ECMP 时对进入 LAG 束的流量或退出交换机的流量做出流量转发决策。
对于 LAG 捆绑包,散列算法确定进入 LAG 捆绑包的流量如何放置到捆绑包的成员链路上。散列算法尝试通过跨捆绑包中的成员链路平均均衡所有传入流量来管理带宽。
对于 ECMP,散列算法决定了传入流量如何转发到下一跳设备。
散列算法根据各个数据包字段中的值以及一些内部值(如源端口 ID 和源设备 ID)做出散列决策。散列算法使用的数据包字段因数据包的 EtherType 而异,在某些情况下还因交换机上的配置而异。散列算法识别以下 EtherType:
IP(IPv4 和 IPv6)
MPLS
MAC 中的 MAC
如果流量无法被识别为属于其中任何一种 EtherType,则会根据第 2 层标头进行散列处理。当用户将散列模式配置为第 2 层标头时,还会根据第 2 层标头对 IP 和 MPLS 流量进行散列处理。
您可以配置散列算法用于做出流量转发决策的一些字段。但是,无法配置散列算法如何使用标头中的某些值。
请注意有关散列算法的以下几点:
为散列选择的字段仅基于数据包类型。这些字段不基于任何其他参数,包括转发决策(桥接或路由)或出口 LAG 捆绑配置(第 2 层或第 3 层)。
相同的字段用于对单播和组播数据包进行散列。但是,单播和组播数据包的散列方式不同。
散列算法使用相同的字段来对 ECMP 和 LAG 流量进行散列,但散列算法对 ECMP 和 LAG 流量的散列方式不同。LAG 流量使用中继散列,而 ECMP 则使用 ECMP 散列。LAG 和 ECMP 都使用相同的 RTAG7 种子,但使用该 128B 种子的不同偏移量以避免极化。HASH 函数使用中继和 ECMP 偏移的初始配置在 PFE 初始化时设置。不同的散列可确保当 LAG 捆绑包属于 ECMP 下一跃点路径时流量不会极化。
无论交换机是否加入混合或非混合虚拟机箱或虚拟机箱交换矩阵 (VCF),都将使用相同的字段进行散列处理。
以下部分将讨论用于每个 EtherType 散列的字段以及第 2 层标头使用的字段。
IP(IPv4 和 IPv6)
当 IPv4 或 IPv6 数据包需要放置在 LAG 捆绑包中的成员链路上或在启用 ECMP 时发送至下一跳设备时,散列算法会使用 IPv4 和 IPv6 数据包中的有效负载字段。
默认情况下,散列模式设置为第 2 层有效负载字段。当散列模式设置为第 2 层有效负载时,IPv4 和 IPv6 有效负载字段用于散列。
如果散列模式配置为第 2 层标头,则将使用第 2 层标头字段对 IPv4、IPv6 和 MPLS 数据包进行散列处理。如果希望传入 IPv4、IPv6 和 MPLS 数据包由源 MAC 地址、目标 MAC 地址 或 EtherType 字段进行散列处理,则必须将散列模式设置为第 2 层标头。
表 1 显示了默认情况下散列算法使用的 IPv4 和 IPv6 有效负载字段。
✓ - 默认情况下,哈希算法使用字段。
Χ—默认情况下,散列算法不使用字段。
(可配置) — 字段可配置为由散列算法使用或不使用。
在 EX2300 交换机上,当需要将 IPv4 或 IPv6 数据包放置在 LAG 捆绑包中的成员链路上或在启用 ECMP 时发送至下一跳设备时,散列算法会使用 IPv4 和 IPv6 数据包中的以下有效负载字段:
对于 LAG - SIP、DIP、L4SP、L4DP 上的单播流量
对于 LAG 上的已知组播流量 - 源 IP、目标 IP、入口 Mod ID 和入口端口 ID
对于 LAG 上的广播、未知单播和未知组播流量 - 源 MAC、目标 MAC、入口 Mod ID 和入口端口 ID
ECMP 负载平衡:目标 IP、第 4 层源端口和第 4 层目标端口
Fields |
EX3400 |
EX4300 |
QFX5100 |
QFX5110 and QFX5120 |
QFX5200 |
|||||
|---|---|---|---|---|---|---|---|---|---|---|
LAG |
ECMP |
LAG |
ECMP |
LAG |
ECMP |
LAG |
ECMP |
LAG |
ECMP |
|
源 MAC |
X |
Χ |
X |
Χ |
Χ |
Χ |
Χ |
Χ |
Χ |
X |
目标 MAC |
Χ |
Χ |
Χ |
Χ |
Χ |
Χ |
Χ |
Χ |
Χ |
Χ |
EtherType |
Χ |
Χ |
Χ |
Χ |
Χ |
Χ |
Χ |
Χ |
Χ |
Χ |
VLAN ID |
Χ (可配置) |
Χ (可配置) |
Χ (可配置) |
Χ (可配置) |
Χ (可配置) |
Χ (可配置) |
Χ (可配置) |
Χ (可配置) |
Χ (可配置) |
Χ (可配置) |
源 IP 或 IPv6 |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
目标 IP 或 IPv6 |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
协议(仅限 IPv4) |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
下一个报头(仅限 IPv6) |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
第 4 层源端口 |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
第 4 层目标端口 |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
IPv6 流标签(仅限 IPv6) |
Χ |
Χ |
Χ |
Χ |
Χ |
Χ |
Χ |
Χ |
Χ |
Χ |
入口 Mod ID |
✓ (可配置) |
Χ |
Χ |
Χ |
Χ |
Χ |
Χ |
Χ |
Χ |
Χ |
入口端口 ID |
✓ (可配置) |
Χ |
Χ |
Χ |
Χ |
Χ |
Χ |
Χ |
Χ |
Χ |
MPLS
散列算法使用源 IP、目标 IP、MPLS标签 0、MPLS标签 1、MPLS标签 2 和 MPLS 3 字段对数据包MPLS进行散列处理。ECMP 使用以下字段在标签交换路由器路由器上进行散列:
第 3 层 VPN:MPLS 标签(前 3 个标签)、源 IP、目标 IP 和入口端口 ID
第 2 层电路:MPLS 标签(前 3 个标签)和入口端口 ID
使用 功能资源管理器 确认平台和版本对特定功能的支持。
表 2 显示了默认情况下散列算法使用的 MPLS 有效负载字段:
✓ - 默认情况下,哈希算法使用字段。
Χ—默认情况下,散列算法不使用字段。
散列算法用于 MPLS 数据包散列的字段不可由用户配置。
源 IP 和目标 IP 字段并不总是用于散列。对于未终止的 MPLS 数据包,如果数据包中出现堆栈底部 (BoS) 标志,则会检查有效负载。如果有效负载为 IPv4 或 IPv6,则 IP 源地址和 IP 目标地址字段将与 MPLS 标签一起用于散列。如果数据包中未看到 BoS 标志,则仅使用 MPLS 标签进行散列。
Field |
EX3400 |
EX4300 |
QFX5100 |
QFX5110 and QFX5120 |
QFX5200 |
|
|---|---|---|---|---|---|---|
源 MAC |
Χ |
Χ |
Χ |
Χ |
Χ |
|
目标 MAC |
Χ |
Χ |
Χ |
Χ |
Χ |
|
EtherType |
Χ |
Χ |
Χ |
Χ |
Χ |
|
VLAN ID |
Χ |
Χ |
Χ |
Χ |
Χ |
|
源 IP |
✓ |
✓ |
✓ |
✓ |
✓ |
|
目标 IP |
✓ |
✓ |
✓ |
✓ |
✓ |
|
协议(用于 IPv4 数据包) |
Χ |
Χ |
Χ |
Χ |
Χ |
|
下一个报头(用于 IPv6 数据包) |
Χ |
Χ |
Χ |
Χ |
Χ |
|
第 4 层源端口 |
Χ |
Χ |
Χ |
Χ |
Χ |
|
第 4 层目标端口 |
Χ |
Χ |
Χ |
Χ |
Χ |
|
IPv6 流实验室 |
Χ |
Χ |
Χ |
Χ |
Χ |
|
MPLS 标签 0 |
Χ |
✓ |
✓ |
✓ |
✓ |
|
MPLS 标签 1 |
✓ |
✓ |
✓ |
✓ |
✓ |
|
MPLS 标签 2 |
✓ |
✓ |
✓ |
✓ |
✓ |
|
MPLS 标签 3 |
✓ |
X |
X |
X |
X |
|
入口端口 ID |
✓ (标签交换路由器和 L2 电路) |
X |
X |
X |
✓ (标签交换路由器和 L2 电路) |
✓ (标签交换路由器和 L2 电路) |
MAC-in-MAC 数据包散列
散列算法会使用第 2 层有效负载源 MAC、第 2 层有效负载目标 MAC 和第 2 层有效负载 EtherType 字段对使用 MAC-in-MAC EtherType 的数据包进行散列。见 表 3.
在版本 13.2X51-D20 的 EX4300 交换机上首次支持使用 MAC-in-MAC EtherType 数据包中的字段进行散列。早期版本不支持使用 MAC-in-MAC EtherType 中的字段进行散列。
散列算法用于 MAC-in-MAC 散列的字段不可由用户配置。
✓ - 默认情况下,哈希算法使用字段。
Χ—默认情况下,散列算法不使用字段。
Field |
EX3400 |
EX4300 |
QFX5100 |
QFX5110 and QFX5120 |
QFX5200 |
||
|---|---|---|---|---|---|---|---|
第 2 层有效负载源 MAC |
✓ |
✓ |
✓ |
✓ |
✓ |
||
第 2 层有效负载目标 MAC |
✓ |
✓ |
✓ |
✓ |
✓ |
||
第 2 层有效负载 EtherType |
✓ |
✓ |
✓ |
✓ |
✓ |
||
第 2 层有效负载外部 VLAN |
✓ |
Χ |
Χ |
Χ |
Χ |
||
2 层标头散列
当数据包的 EtherType 未被识别为 IP(IPv4 或 IPv6)、MPLS 或 MAC-in-MAC 时,散列算法会使用第 2 层标头字段。当散列模式设置为第 2 层标头时,第 2 层标头字段还用于散列 IPv4、IPv6 和 MPLS 流量,而非有效负载字段。
✓ - 默认情况下,哈希算法使用字段。
Χ—默认情况下,散列算法不使用字段。
(可配置) — 字段可配置为由散列算法使用或不使用。
Field |
EX3400 |
EX4300 |
QFX5100 |
QFX5110 and QFX5120 |
QFX5200 |
||
|---|---|---|---|---|---|---|---|
源 MAC |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
||
目标 MAC |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
||
EtherType |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
✓ (可配置) |
||
VLAN ID |
Χ (可配置) |
Χ (可配置) |
Χ (可配置) |
✓ (可配置) |
✓ (可配置) |
||
散列参数
从 Junos OS 19.1R1 版开始,在交换机的QFX5000系列上,您可以更改已实施的现有算法的散列参数。您可以更改入口和出口缓冲区分区的共享缓冲池阈值,也可以更改散列函数选择、散列算法和其他附加参数。请参阅本文档后面的配置其他散列参数。
配置用于对 LAG 束和 ECMP 流量进行散列处理的算法中的字段
瞻博网络 EX 系列和 QFX 系列交换机使用散列算法来确定如何在启用等价多路径 (ECMP) 时通过链路聚合组 (LAG) 束转发流量或转发到下一跳设备。
使用 链路聚合组 (LAG) 捆绑包散列配置 来确认平台和版本对特定功能的支持。
散列算法根据各个数据包字段中的值做出散列决策。您可以配置散列算法使用的一些字段。
在进入捆绑包的大多数流量相似且需要在 LAG 捆绑包中管理流量的情况下,配置散列算法使用的字段非常有用。例如,如果所有传入流量的 IP 数据包的唯一区别是源 IP 地址和目标 IP 地址,则可以通过将算法配置为仅使用这些字段做出散列决策,从而调整散列算法,以更有效地做出散列决策。
配置散列算法以使用第 2 层报头中的字段进行散列
要将散列算法配置为使用第 2 层标头中的字段进行散列:
配置散列算法以使用 IP 有效负载中的字段进行散列
要将散列算法配置为使用 IP 有效负载中的字段进行散列:
配置散列算法以使用 IPv6 有效负载中的字段进行散列
要将散列算法配置为使用 IPv6 有效负载中的字段进行散列:
配置其他散列参数
要为 ECMP 或 LAG 流量配置散列参数:
示例:配置 QFX 系列交换机与聚合交换机之间的链路聚合
QFX 系列产品允许您将多个以太网链路组合到一个逻辑接口中,以实现更高的带宽和冗余。以这种方式组合在一起的端口称为链路聚合组 (LAG) 或束。可组合成 LAG 的以太网链路数量取决于您的 QFX 系列产品型号。您可以配置 LAG 将 QFX 系列产品或 EX4600 交换机连接到其他交换机,如聚合交换机、服务器或路由器。此示例介绍如何配置 LAG 以将 QFX3500、QFX3600、EX4600、QFX5100 和 QFX10002 交换机连接到聚合交换机。
要求
此示例使用以下软件和硬件组件:
Junos OS QFX3500 和 QFX3600 交换机使用 11.1 或更高版本,QFX5100 和 EX4600 交换机使用 Junos OS 13.2 或更高版本,QFX10002 交换机使用 Junos OS 15.1X53-D10 或更高版本。
一台 QFX3500、QFX3600、EX4600、QFX5100 或 QFX10002 交换机。
概述和拓扑
在此示例中,交换机有一个包含两个 10 千兆以太网接口的 LAG。此 LAG 在端口模式中继(或接口模式中继)中配置,以便交换机和分配到它的 VLAN 可以发送和接收流量。
将以太网接口配置为 LAG 具有以下优点:
如果一个物理端口因任何原因丢失(电缆拔出或交换机端口出现故障),逻辑端口将以透明方式继续在剩余物理端口上运行。
可以选择配置链路聚合控制协议 (LACP) 来进行链路监控以及自动添加和删除单个链路,无需用户干预。
如果 LAG 链路的远程端是安全设备,则可能不支持 LACP,因为安全设备需要确定性配置。在这种情况下,请勿配置 LACP。除非交换机检测到以太网物理层或数据链路层内的链路故障,否则 LAG 中的所有链路将永久运行。
此示例中使用的拓扑结构由一台交换机组成,其交换机的两个 10 千兆以太网接口之间配置了一个 LAG。交换机连接到聚合交换机。
表 5 详细介绍了此配置示例中使用的拓扑。
| 主机名 | 基本硬件中 | 继端口 |
|---|---|---|
开关 |
QFX3500、QFX3600、EX4600、QFX5100 或 QFX10002 交换机 |
|
配置
在两个 10 千兆以太网接口之间配置 LAG。
程序
CLI 快速配置
要在交换机上的两个 10 千兆以太网接口之间快速配置 LAG,请复制以下命令并将其粘贴到交换机终端窗口中:
要使用增强型第 2 层软件配置 LAG(例如,在 EX4600、QFX5100 或 QFX10002 交换机上),请使用 interface-mode 语句代替 port-mode 语句。有关 ELS 的详细信息,请参阅 使用增强型第 2 层软件 CLI。
[edit] set chassis aggregated-devices ethernet device-count 1 set interfaces ae0 aggregated-ether-options minimum-links 1 set interfaces ae0 aggregated-ether-options link-speed 10g set interfaces ae0 unit 0 family ethernet-switching vlan members green set interfaces xe-0/0/2 ether-options 802.3ad ae0 set interfaces xe-0/0/3 ether-options 802.3ad ae0 set interfaces ae0 unit 0 family ethernet-switching port-mode trunk set interfaces ae0 aggregated-ether-options lacp active set interfaces ae0 aggregated-ether-options lacp periodic fast
分步程序
要在 QFX 系列交换机和聚合交换机之间配置 LAG:
指定要在交换机上创建的 LAG 数量:
[edit chassis] user@switch# set aggregated-devices ethernet device-count 1
指定 LAG 接口
up需要ae0存在的链路数:[edit interfaces] user@switch# set ae0 aggregated-ether-options minimum-links 1
指定链路的
ae0介质速度:[edit interfaces] user@switch# set ae0 aggregated-ether-options link-speed 10g
指定要包含在聚合以太网捆绑包中的成员:
[edit interfaces] user@switch# set interfaces xe-0/0/2 ether-options 802.3ad ae0 [edit interfaces] user@switch# set interfaces xe-0/0/3 ether-options 802.3ad ae0
为链路分配中继
ae0的端口模式:注意:要使用增强型第 2 层软件配置 LAG(例如,在 EX4600、QFX5100 或 QFX10002 交换机上),请使用
interface-mode语句代替port-mode语句。有关 ELS 的详细信息,请参阅 使用增强型第 2 层软件 CLI。[edit interfaces] user@switch# set ae0 unit 0 family ethernet-switching port-mode trunk
或
[edit interfaces] user@switch# set ae0 unit 0 family ethernet-switching interface-mode trunk
将 LAG 分配给 VLAN:
[edit interfaces] user@switch# set ae0 unit 0 family ethernet-switching vlan members green vlan-id 200
(可选):将 LAG 的一端指定为 LACP 的活动状态:
[edit interfaces] user@switch# set ae0 aggregated-ether-options lacp active
(可选): 指定接口发送 LACP 数据包的间隔和速度:
[edit interfaces] user@switch# set ae0 aggregated-ether-options lacp periodic fast
结果
显示 QFX3500 或 QFX3600 交换机上的配置结果:
[edit]
chassis {
aggregated-devices {
ethernet {
device-count 1;
}
}
}
green {
vlan-id 200;
}
}
interfaces {
ae0 {
aggregated-ether-options {
link-speed 10g;
minimum-links 1;
}
unit 0 {
family ethernet-switching {
port-mode trunk;
vlan {
members green;
}
}
}
xe-0/0/2 {
ether-options {
802.3ad ae0;
}
}
xe-0/0/3 {
ether-options {
802.3ad ae0;
}
}
}
验证
要验证交换是否正常运行以及是否已创建一个 LAG,请执行以下任务:
验证是否已创建 LAG ae0.0
目的
验证交换机上是否已创建 LAG ae0.0 。
行动
show interfaces ae0 terse
Interface Admin Link Proto Local Remote ae0 up up ae0.0 up up eth-switch
意义
输出将确认 ae0.0 链路已开启,并显示分配给此链路的 family 和 IP 地址。
LAG 和 ECMP 组上的弹性散列
弹性散列有助于最大程度地减少负载平衡系统中等价多路径 (ECMP) 组和 LAG 之间的流量重新映射。以下主题讨论弹性散列在链路聚合组 (LAG) 和 ECMP 组上的工作、使用和配置。
了解如何使用弹性散列将 LAG/ECMP 组中的流量重新映射降至最低
使用弹性散列可最大程度地减少负载平衡系统中 LAG/ECMP 组成员之间的流量重新映射。您可以在 LAG 和 ECMP 组中配置弹性散列。
为什么您可能想要使用弹性散列及其如何与静态散列配合使用
弹性散列与默认的静态散列算法配合使用。将成员添加到 LAG/ECMP 组或从 LAG/ECMP 组中删除时,静态散列算法可能会重新映射目标路径。借助弹性散列,如果流的路径不受 LAG/ECMP 组成员更改的影响,则重新映射流的可能性很小。当流量受到成员更改的影响时,数据包转发引擎会通过对 FlowSet 表进行重新编程来重新平衡流量。
使用 弹性散列实现负载平衡 ,以确认平台和版本对特定功能的支持。
因此,弹性散列提供了以下好处:
在 LAG/ECMP 组中添加成员或删除成员时,最大限度减少 LAG/ECMP 组成员之间的流量分配不平衡。
在添加新成员或从组中删除现有成员时,最大程度地减少对绑定到未受影响成员的流的影响。
在正常的基于散列的负载平衡中,仅使用静态散列算法时,流将通过数学 mod (%) 运算分配给成员。组成员数量的任何增加或减少都会导致流完全重新映射到成员 ID,如以下示例所示:
成员 ID = Hash(密钥)mod(组中的成员数)
例:
哈希(密钥)= 10
10 mod 5 = 0(为流选择 ID 为 0 的成员)
10 mod 4 = 2(当成员数减少 1 时,为同一流选择 ID 为 2 的成员)
添加或删除 LAG/ECMP 组中的成员时,弹性散列可最大限度地减少目标路径的重新映射。
当流受到组中成员更改的影响时,弹性散列会通过对 FlowSet 表进行重新编程来重新平衡流。
LAG/ECMP 组大小 |
正常(静态)散列结果 |
弹性散列结果 |
笔记 |
|---|---|---|---|
4 |
哈希 (10) % 4 = 2 流分配给成员 ID 2。 |
根据 FlowSet 表条目将流分配给四个组成员之一。 |
原始 LAG/ECMP 组大小为 4。 |
3 |
哈希 (10) % 3 = 1 流被分配给成员 ID 1。 |
流被分配给与前一个案例中的同一成员。 |
从原始 LAG/ECMP 组中删除一个成员。LAG/ECMP 组大小为 3。 |
5 |
哈希 (10) % 5 = 0 流分配给成员 ID 0。 |
从其他成员到此新添加成员的流量重新分配最小。 |
将一个成员添加到原始 LAG 组。LAG/ECMP 组大小为 5。 |
弹性散列的限制和注意事项
请注意弹性散列功能的以下限制和注意事项:
-
弹性散列仅适用于单播流量。
-
弹性散列最多支持 1024 个 LAG,每个组最多有 256 个成员。
-
弹性散列并不能保证流量在所有组成员之间均匀分布,这取决于流量模式和硬件中弹性散列 FlowSet 表的组织。在将成员添加到组或从组中删除时,弹性散列 可最大限度地减少 将流量重新映射到目标链路的情况。
-
如果在 LAG 或 ECMP 组上启用了弹性散列,并且与以下选项之一一起使用,则
set forwarding-options enhanced-hash-key某些流量可能会更改目标链路。原因是新的哈希参数可能会为流生成新的哈希索引。hash-modeinetinet6layer2
-
VCP 链路不支持弹性散列。
LAG 上的弹性散列
LAG 将以太网接口(成员)组合在一起,形成逻辑点对点链路,从而增加带宽、提供可靠性并允许负载平衡。当从 LAG 添加或删除新成员时,弹性散列可以最大限度地减少目标重新映射行为。
LAG 上的弹性散列配置基于每个聚合以太网接口。
ECMP 上的弹性散列
路由的 ECMP 组在路由表中包含同一目标的多个下一跃点等价地址。等价路径具有相同的优先级和度量值。
Junos OS 使用静态散列算法选择要安装在转发表中的 ECMP 组中的下一跃点地址之一。在 ECMP 组中添加或删除新成员时,弹性散列可以最大程度地减少目标重新映射行为,从而增强 ECMP。
ECMP 上的弹性散列配置是全局的,它适用于所有 ECMP 组。
为 LAG/ECMP 组配置弹性散列
使用弹性散列可最大程度地减少负载平衡系统中 LAG/ECMP 组成员之间的流量重新映射。您可以在 LAG 和 ECMP 集中配置弹性散列。
.
本主题包括:
在 LAG 上配置弹性散列
要为 LAG 启用弹性散列:
在 ECMP 组上配置弹性散列
要为 ECMP 组启用弹性散列:
[edit forwarding-options] user@switch# set enhanced-hash-key ecmp-resilient-hash
添加或移除弹性散列后,将重新编程给定流量的 ECMP 组所有成员之间的流量分布,因此,某些流量可能会重新映射到新的 ECMP 组成员。
使用弹性散列技术将流量重新映射降至最低
在网络端点之间的部署中,有必要保留已建立的连接以及关联的第 2 层和第 3 层路径。如果网络发生任何变化,例如网络设备或服务器发生故障,数据包将采用新的路径。
弹性散列可减少网络更改带来的影响。每个具有弹性散列的 ECMP 都会在负载均衡表(也称为宏流表)中分配一个 256 个条目的区域。表中的每个条目都存储分配给该宏流的成员链路 ID。
弹性散列的工作原理如下所述:
-
将传入数据包散列到这些宏流条目或存储桶之一。
-
然后,将数据包链接到 ECMP 组中的路径。
如果我们使用“篮子”来表示每个成员链路/路径,则弹性哈希作可以建模为将桶(宏流)放入其中一个篮子中。
如果 ECMP 组有 N 个存储桶和 P 路径,请使用以下顺序:
-
初始存储桶映射是使用轮询方法生成的。因此,所有存储桶在 ECMP 组成员之间的分布几乎相等 (N/P)。稍后,存储桶会根据路径添加或删除事件移动。
如果 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
变更历史表
是否支持某项功能取决于您使用的平台和版本。使用 功能资源管理器 确定您的平台是否支持某个功能。