用于服务器负载平衡的 SNAT 与 PBR

网络工程 思科 纳特 cisco-6500 pbr 负载均衡器
2021-07-02 22:57:03

在单臂 SLB 配置中,SNAT 用于强制返回流量通过 SLB。这有一个负面影响:除非在 XFF (X-Forwarded-For) 标头中传递并且 Web 服务器能够记录日志,否则 Web 日志无法捕获真正的客户端 IP。

另一种方法是使用 PBR(基于策略的路由)将返回流量返回到 SLB,但我尽量避免 PBR,除非没有其他/更好的解决方案在带有 SUP720/PFC3B 的 6500E 平台上——我知道特定的IOS 版本也可能是一个因素——假设 PBR 都是在硬件中完成的,PBR 是否会比执行 SNAT 增加任何延迟? 如果 PBR 是在硬件中仅使用它今天支持的命令来完成的,那么将来升级 IOS 是否有可能将 PBR 更改为在软件/进程交换中完成?

今天,我们的负载平衡器将大部分 Web 服务器 VLAN 直接置于其后面——默认 g/w 指向 SLB——以及非 SLB VLAN 中的其他服务器(如 SQL)。但是,这个 web-sql 流量经过 SLB。我们的目标是避免跨越 SLB,只是将 SQL 流量分开,并且仍然在 Web 日志中保留真正的客户端。我不希望通过 PBR 引入故障排除的复杂性,并且将来可能会处理从硬件到软件的这种更改。 除了前面提到的 XFF 和 SNAT,PBR 是这里唯一的选择吗?保持 PBR 紧密配置的最佳方法是什么?

2个回答

假设 PBR 都是在硬件中完成的,PBR 是否会比做 SNAT 增加任何延迟?

Sup720 在 HW 中支持 PBR,额外的延迟(如果有)可以忽略不计,因为 PBR 不会添加更多的接口排队。我认为 PBR 会让事情变得比他们需要的更难(我仍然不确定它是否会起作用......该选项的具体细节尚不完全清楚)

除了前面提到的 XFF 和 SNAT,PBR 是这里唯一的选择吗?保持 PBR 紧密配置的最佳方法是什么?

PBR 不是唯一的选择。您提出的选项有点不清楚,但 PBR 通常归结为一种更高级的静态路由方式。

通常,这是需要 SQL 查询的负载平衡服务的最佳拓扑...

  • 将您的 VIP 放在前端子网上... 图中的 172.16.1.0/24
  • 将您的服务器池放在后端子网中...图中的 172.16.2.0/24
  • 将您的 SQL 查询放在另一个界面上...图中的 172.16.3.0/24。向所有需要 SQL 查询的服务器添加第二个接口。对这个子网上的地址进行所有 SQL 查询。此拓扑适用于 Unix 和 Windows,因为您只依赖 ARP 或主机路由(取决于您的偏好)进行 SQL 连接。

图表:

LB w SQL 查询网络

这种拓扑还有其他好处:

  • 它将 SQL 接口与 Web 流量分开,因为 SQL 查询是突发的,可能会导致 Web 流量拥塞。
  • 它为您的负载平衡服务(如果它们通过 Internet 传输通常需要保持在 1500 或更低)和您的 SQL 服务(支持巨型帧)提供不同的 MTU。

任何单臂负载平衡器拓扑都是不太理想的选择,因为单臂拓扑最终会将最大吞吐量减少一半。

编辑有关 Sup720 上硬件与软件切换的问题

这是一个很深的话题,但我会给出总结版本...... Sup720 在每个方向(入口/出口)应用一个 ACL,并且 ACL 必须适合基于平台选择的任何合并算法的 TCAM。Sup720 的 Feature Manager(即 fm)负责将特征调入 TCAM 并报告您是否有 punt adjacency(意思是 SW 切换),或者协议和方向的组合是否在 HW 中切换。隔离是否

  1. 首先,确定 PBR 流量可以传输的所有入口和出口 Layer3 接口
  2. 接下来,检查show fm fie int <L3_intf_name> | i ^Interf|Result|Flow|Config(您必须查看步骤 1 中所有接口的入口和出口方向)的输出。如果 CAPS 中的值与您在下面看到的值匹配,您的流量将被硬件切换...请注意,我正在使用的命令的输出与您在show fm fie summary...中看到的非常相似

Tx.Core01#sh fm fie int Vl220 | i ^Interf|Result|Flow|Config
Interface Vl220:
 Flowmask conflict status for protocol IP : FIE_FLOWMASK_STATUS_SUCCESS      <--- in HW
 Flowmask conflict status for protocol OTHER : FIE_FLOWMASK_STATUS_SUCCESS   <--- in HW
 Flowmask conflict status for protocol IPV6 : FIE_FLOWMASK_STATUS_SUCCESS    <--- in HW
Interface Vl220 [Ingress]:
 FIE Result for protocol IP : FIE_SUCCESS_NO_CONFLICT                        <--- in HW
 Features Configured : V4_DEF   - Protocol : IP
 FIE Result for protocol OTHER : FIE_SUCCESS_NO_CONFLICT                     <--- in HW
 Features Configured : OTH_DEF   - Protocol : OTHER
 FIE Result for protocol IPV6 : FIE_SUCCESS_NO_CONFLICT                      <--- in HW
 Features Configured : V6_DEF   - Protocol : IPV6
Interface Vl220 [Egress]:
 No Features Configured
No IP Guardian Feature Configured
No IPv6 Guardian Feature Configured
No QoS Feature Configured
Tx.Core01#

上面的界面没有显示出口输出,但这无关紧要......输出类似于Ingress方向。 如果您想了解有关 TCAM 库/合并结果动态的更多详细信息,Ricky Micky 写了一篇关于“sh fm fie interface”的出色解释

如果您的负载平衡器支持它,直接服务器返回也可以满足您的需求。它需要您的负载均衡器支持,并且存在一些操作系统问题。它涉及在每个服务器中放置“环回”接口,这些接口都具有 VIP 的 IP 地址,负载均衡器虽然具有真实服务器地址,但仅使用真实服务器的 MAC 地址来转发数据包,因为服务器具有与其中的VIP,服务器接受数据包。

您需要咨询特定 LB 供应商的文档,并且您的服务器团队必须能够管理虚拟适配器(我们不使用此功能,因为我们认为我们的自动服务器配置无法管理 MS 环回适配器。

但这在LB中不使用NAT,您不必做PBR。