跳到主要内容

6. ECMP Considerations (ECMP 考虑因素)

6. ECMP Considerations (ECMP 考虑因素)

等价多路径 (ECMP) 是 Clos 拓扑有效运行的关键技术。本节讨论与在大规模数据中心中使用 ECMP 相关的各种考虑因素和技术。

6.1 Basic ECMP (基本 ECMP)

ECMP 允许路由器通过多条等价路径转发到同一目的地的数据包。在 Clos 拓扑的上下文中, ECMP 用于在从 Tier 2 到 Tier 1 (以及在 5 阶段 Clos 中的其他层之间) 的所有上行链路之间分配流量。

ECMP 如何工作

当路由器具有到同一目的地的多条等价路径时:

  1. 路由器在其转发表中为该目的地安装所有等价下一跳。
  2. 对于每个传出数据包, 路由器执行哈希计算以选择一个下一跳。
  3. 哈希通常基于数据包头字段, 如源/目标 IP, 源/目标端口和协议。
  4. 相同的哈希结果导致相同的下一跳选择, 确保流的一致性。

BGP 中的 ECMP

默认情况下, BGP 只安装到给定目的地的单个最佳路径。要启用 ECMP, 必须配置 BGP 以安装多条路径。这通常通过 maximum-paths 命令完成:

router bgp 64701
maximum-paths 64

此配置告诉 BGP 为单个目的地最多安装 64 条等价路径。该数字应设置为等于或大于 Clos 拓扑中的最大扇出。

BGP 路径等价

对于 BGP 将多条路径视为等价, 它们必须具有:

  • 相同的 LOCAL_PREF
  • 相同的 AS_PATH 长度
  • 相同的 ORIGIN
  • 相同的 MED (如果配置为比较)

在简化的数据中心 EBGP 设计中, 这些条件通常自动满足, 因为:

  • LOCAL_PREF 通常不在 EBGP 会话中设置
  • AS_PATH 长度对于所有通过 Tier 1 的路径是相同的
  • ORIGIN 和 MED 通常是默认值

ECMP 扇出注意事项

Clos 拓扑所需的 ECMP 扇出取决于拓扑的大小。对于 3 阶段 Clos, 典型的扇出可能是 16-64 条路径。某些数据中心可能需要更大的扇出 (例如 128 或 256 条路径)。

重要的是要验证所选网络设备支持所需的 ECMP 扇出, 并且支持在硬件 (ASIC 级别) 而不仅仅是在软件中, 以确保线速性能。

6.2 BGP ECMP over Multiple ASNs (跨多个 ASN 的 BGP ECMP)

在标准的 BGP 实现中, ECMP 要求所有路径具有相同的 AS_PATH 长度。然而, 在某些 Clos 设计中, 路径可能通过具有不同 ASN 的设备, 导致不同的 AS_PATH。

问题

考虑以下场景:

  • Tier 2 设备具有到 Tier 1 的多条路径
  • 每个 Tier 1 设备具有唯一的 ASN
  • 从 Tier 1 学习的路由将具有不同的 AS_PATH (因为它们通过不同的 ASN)

例如:

  • 通过 Tier 1 设备 A (AS 64601) 的路径: AS_PATH = 64601 65001
  • 通过 Tier 1 设备 B (AS 64602) 的路径: AS_PATH = 64602 65001

虽然这些路径具有相同的 AS_PATH 长度 (2), 但它们包含不同的 ASN。标准 BGP 实现可能不认为这些路径是等价的, 用于 ECMP 目的。

解决方案

大多数现代 BGP 实现支持一个称为"BGP 多路径"或"跨 AS 的 ECMP"的功能, 该功能允许 ECMP 跨具有不同 ASN 但相同 AS_PATH 长度的路径。这通常通过以下方式启用:

router bgp 64701
maximum-paths 64
bgp bestpath as-path multipath-relax

bgp bestpath as-path multipath-relax 命令告诉 BGP 在考虑 ECMP 时放松 AS_PATH 必须完全相同的要求, 而只需要 AS_PATH 长度相同。

重要性

此功能对于在使用每设备唯一 ASN 方案的 Clos 拓扑中实现 ECMP 至关重要。没有它, 流量将不会在所有可用路径上均匀分布, 导致次优网络利用率。

6.3 Weighted ECMP (加权 ECMP)

在某些情况下, 可能希望在 ECMP 路径之间不均匀地分配流量。这可以使用加权 ECMP 来实现。

用例

加权 ECMP 在以下情况下很有用:

  • 不均匀的链路容量: 如果某些上行链路具有比其他上行链路更高的带宽, 则可以按比例分配更多流量。
  • 逐步推出: 在向生产流量引入新设备时, 最初可以向其发送较少的流量。
  • 负载均衡调整: 如果某些路径或设备过载, 可以调整权重以重新平衡流量。

实现

加权 ECMP 可以通过多种方式实现:

方法 1: 多条路径到同一下一跳

某些实现允许将同一下一跳多次插入 ECMP 组, 有效地给予它更高的权重。例如, 如果下一跳 A 在 ECMP 组中出现两次, 而下一跳 B 出现一次, 则 A 将接收大约 2/3 的流量, B 将接收 1/3。

方法 2: 基于 BGP 属性的权重

某些实现允许基于 BGP 属性 (如 LOCAL_PREF 或社区) 为路径分配权重。

方法 3: 基于链路利用率的动态权重

高级实现可能支持基于实时链路利用率的动态权重调整。

注意事项

虽然加权 ECMP 可能很有用, 但它增加了复杂性。在大多数情况下, 使用相等权重的标准 ECMP 更简单且同样有效。仅在有特定需求时才应使用加权 ECMP。

6.4 Consistent Hashing (一致性哈希)

在标准 ECMP 中, 当 ECMP 组中的下一跳数量发生变化时 (例如, 由于链路故障或添加), 流到下一跳的映射可能会显著改变。这可能会破坏现有的流, 特别是对于有状态的应用程序。

问题

考虑一个具有 4 个 ECMP 路径的路由器:

  • 流由哈希值标识 (例如, 0-255 范围内的哈希)
  • 哈希 0-63 映射到路径 1
  • 哈希 64-127 映射到路径 2
  • 哈希 128-191 映射到路径 3
  • 哈希 192-255 映射到路径 4

如果路径 2 失败, 传统的 ECMP 重新哈希可能会导致:

  • 哈希 0-85 映射到路径 1
  • 哈希 86-170 映射到路径 3
  • 哈希 171-255 映射到路径 4

在此重新映射中, 大量的流改变了它们的路径, 不仅仅是那些受影响的路径 2 的流。

一致性哈希解决方案

一致性哈希是一种技术, 当 ECMP 组改变时, 最小化流的重新映射。使用一致性哈希:

  • 当下一跳失败时, 只有通过该下一跳的流被重新映射
  • 其他流继续使用它们原来的路径

这减少了网络变化期间的流中断, 并改善了应用程序的稳定性。

实现

一致性哈希通常在硬件级别 (在交换机 ASIC 中) 实现。并非所有网络设备都支持一致性哈希, 因此在选择硬件时重要的是要检查此功能。

某些实现提供配置选项来启用一致性哈希:

ip load-sharing consistent-hash

好处

  • 减少的流中断: 在网络变化期间中断的流更少
  • 改进的应用程序性能: 有状态的应用程序 (例如数据库, 缓存) 受益于更稳定的流路由
  • 更好的用户体验: 更少的流中断意味着更少的连接重置和更好的最终用户体验

权衡

  • 不完美的负载均衡: 在某些情况下, 一致性哈希可能导致比传统 ECMP 稍微不太均匀的负载分布
  • 硬件依赖性: 需要支持的硬件, 并非所有设备都可用

尽管存在这些权衡, 但一致性哈希通常被认为是大规模数据中心的最佳实践, 其中网络稳定性和流一致性至关重要。