通常,负载均衡器 (NSX Advanced Load Balancer) 为入站请求和出站请求执行地址转换。返回数据包流经负载均衡器,并根据负载均衡器上的配置更改目标地址和源地址。

以下是启用了直接服务器返回 (Direct Server Return, DSR) 时的数据包流程图:

  • 负载均衡器不会对入站请求执行任何地址转换。

  • 流量传送到池成员,而不对源地址和目标地址进行任何更改。

  • 数据包将虚拟 IP 地址作为目标地址以到达服务器。

  • 服务器将虚拟 IP 地址作为源地址以进行响应。到客户端的返回路径不会流经负载均衡器,因此,这称为直接服务器返回。

注:

仅 IPv4 支持该功能。

用例

DSR 通常适用于音频和视频应用程序,因为这些应用程序对延迟比较敏感。

支持的模式

DSR 支持的模式如下所示:

DSR 类型

封装

工作方式

第 2 层 DSR

基于 MAC 的转换

NSX Advanced Load Balancer 控制器 将源 MAC 地址重写为服务引擎接口 MAC 地址,将目标 MAC 地址重写为服务器 MAC 地址。

第 3 层 DSR

IP-in-IP

IP-in-IP 隧道是在 NSX Advanced Load Balancer 和池成员之间创建的,这些成员可能离路由器一个或多个跳段远。

来自客户端的入站数据包是以 IP-in-IP 模式封装的,将源作为服务引擎的接口 IP,并将目标作为后端服务器 IP 地址。

第 3 层 DSR

GRE

第 3 层 DSR 支持通用路由封装 (Generic Routing Encapsulation, GRE) 隧道。在这种情况下,来自客户端的入站数据包封装在 GRE 标头中,后跟外部 IP 标头(传送标头)。

DSR 支持的功能规范包括:

功能

支持

封装

IP-in-IP,基于 MAC 的转换

生态系统

VMware 写入、VMware 无权访问和 Linux 服务器云

数据平面驱动程序

Linux 服务器云支持 DPDK 和 PCAP

BGP

使用 BGP 在前端放置 VIP

负载均衡算法

L2 和 L3 DSR 仅支持一致哈希

TCP UDP

在 L2 和 L3 DSR 中支持 TCP 快速路径和 UDP 快速路径

高可用性 (SE)

N+M、活动-活动、活动-备用

第 2 层 DSR

  • 入站数据包的目标 MAC 地址已更改为服务器 MAC 地址。

  • 支持的模式:通过 TCP 和 UDP 的 DSR。

  • 也支持 TCP 第 2 层 DSR 运行状况监控。

下图显示了第 2 层 DSR 的数据包流程图:



数据包传输
  • 客户端向负载均衡器提供的虚拟 IP (VIP) 发送请求(步骤 1)。

  • LB 确定将请求转发到的实际服务器。

  • LB 执行 MAC 地址转换(步骤 2)。

  • 服务器直接响应客户端,从而绕过 LB(步骤 3)。

第 2 层 - DSR
  • 服务器必须位于直接连接到负载均衡器的网络上。

  • LB 和服务器需要位于同一 L2 网络分段上。

  • 必须为服务器的环回 IP 配置 VIP IP。

为第 2 层 DSR 配置网络配置文件

登录到 NSX Advanced Load Balancer CLI,然后使用 configure networkprofile <profile name> 命令进入 TCP 快速路径配置文件模式。对于第 2 层 DSR,输入 dsr_type_l2 以作为 DSR 类型值。

[admin:10-X-X-X]: > configure networkprofile <profile name>
[admin:10-X-X-X]: networkprofile> profile
[admin:10-X-X-X]: networkprofile profile> tcp_fast_path_profile
[admin:10-X-X-X]: networkprofile profile:tcp_fast_path_profile>dsr_profile dsr_type dsr_type_l2
[admin:10-X-X-X]: networkprofile profile:dsr_profile> save
[admin:10-X-X-X]: networkprofile> save

在创建网络配置文件后,使用上面创建的 DSR 网络配置文件创建一个 L4 应用程序虚拟服务,并将支持 DSR 的服务器附加到与虚拟服务关联的池。

配置服务器

ifconfig lo:0 <VIP ip> netmask 255.255.255.255 -arp up
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 >/proc/sys/net/ipv4/conf/<Intraface of pool server ip configured>/rp_filter

sysctl -w net.ipv4.ip_forward=1