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 如何工作
当路由器具有到同一目的地的多条等价路径时:
- 路由器在其转发表中为该目的地安装所有等价下一跳。
- 对于每个传出数据包, 路由器执行哈希计算以选择一个下一跳。
- 哈希通常基于数据包头字段, 如源/目标 IP, 源/目标端口和协议。
- 相同的哈希结果导致相同的下一跳选择, 确保流的一致性。
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 稍微不太均匀的负载分布
- 硬件依赖性: 需要支持的硬件, 并非所有设备都可用
尽管存在这些权衡, 但一致性哈希通常被认为是大规模数据中心的最佳实践, 其中网络稳定性和流一致性至关重要。