负载均衡流量的粘性
从 Contrail 网络 23.2 版开始,CN2 支持流量粘性。流粘性有助于最大限度地减少负载平衡系统中等价多路径 (ECMP) 组之间的流重新映射。
传统的 ECMP 通过多个可用路径对流向目标的流量进行负载平衡。当一条路径发生故障(纵向扩展)或添加新路径(纵向扩展)时,流量将重新洗牌到可用路径数上。流粘性可减少被重新映射的流,并在 ECMP 组的成员更改时保留具有原始路径的流。当流受到成员更改的影响时,vRouter 会重新编程流表并重新平衡流。
图 1 显示了将新成员添加到 3 成员 ECMP 负载平衡系统时发生的流重新映射方案示例。
图 1:纵向扩展方案
示例
在此示例中,流请求发送到 IP 地址:172.16.0.20。由于这三个成员组的虚拟 IP 地址为:172.16.0.20,因此 vRouter 会根据流哈希计算将请求发送到 pod1。将新成员 (pod4) 添加到同一虚拟 IP 组时,请求将被转移并根据流哈希重新计算重定向到 pod4。
流粘性可减少被重新映射的流,并通过新成员 (pod4) 保留到 pod1 的原始路径的流。如果添加 pod4 影响流,vRouter 会重新编程流表并使用 pod1 重新平衡流。
表 1 显示了纵向扩展和缩减方案的正常哈希和流粘性的预期结果。
示例方案 | 正常(静态)哈希结果 | 流粘性结果 |
---|---|---|
ECMP 组大小为 3。 | 根据流哈希,流量被定向到 pod1。 | 根据流哈希,流量被定向到 pod1。 |
向同一服务再添加一个 Pod。ECMP 组大小为 4。 | 可以重新分配流量,并且可以将流量重定向到另一个 Pod。 | 流量继续定向到 pod1。 |
从同一服务中删除一个容器。ECMP 组大小为 2。 | 可以重新分配流量,并且可以将流量重定向到另一个 Pod。 | 除非删除 pod1,否则流量将继续定向到 pod1。如果删除 pod1,则必须从客户端重新启动会话。 |
注意:
流粘性仅支持纵向扩展前后的 ECMP 流(从一个 Pod 纵向扩展到多个 Pod 时不会保持粘性)。我们建议您至少向 ECMP 组添加两个容器,然后纵向扩展。