Citrix ADC

如何在 GSLB 中配置持久性

持久性可确保将针对特定域名的一系列客户端请求发送到同一数据中心,而不是进行负载平衡。如果为特定域配置了持久性,则该持久性优先于配置的 GSLB 方法。在部署中,与客户端事务相关的信息在本地存储在已为初始请求提供服务的实例上,您可以使用持久性。例如,使用购物车的电子商务部署,服务器需要保持连接状态以跟踪交易。Citrix ADC 设备选择数据中心来处理客户端请求。启用持久性后,它会为所有后续域名系统 (DNS) 请求转发所选数据中心的相同 IP 地址。如果持久性会话指向关闭的数据中心,Citrix ADC 设备将使用配置的 GSLB 方法来选择新的数据中心。然后,对于客户端的后续请求,它将变为持久性。 对于 GSLB 中的持久性,必须在所有数据中心的 GSLB 虚拟服务器上配置同一组持久性标识符 (PersiSID)。GSLB 模块使用持久性标识符唯一标识 GSLB 虚拟服务器。在 GSLB 虚拟服务器上启用源 IP 持久性后,持久性会话也将作为指标交换的一部分进行交换。为了使 Citrix ADC 设备支持跨站点的持久性,必须在所有参与计划的 GSLB 站点上执行持久性相关的配置。Citrix 建议对有状态应用程序在 GSLB 中持久化,这要求客户端为后续请求重新连接到同一应用程序实例。

您可以通过以下方式在 GSLB 中实现持久性:

  • GSLB 虚拟服务器上的持久性
  • GSLB 服务上的站点持久性

GSLB 虚拟服务器上的持久性

DNS 请求期间使用 GSLB 虚拟服务器上的持久性。DNS 请求的源 IP 地址用于在客户端和数据中心之间创建持久性会话。DNS 客户端通常是本地 DNS (LDNS) 或 DNS 网关,代理位于它们后面的一组客户端(在 ISP 中)。GSLB 虚拟服务器上的持久性与应用程序协议无关。 通常,客户端网络中配置了多个 DNS 网关或本地域名服务器 (LDNS)。Citrix 建议您配置适当的持久性掩码,因为对于后续 DNS 请求,无论用于连接到 ADC 设备的上游 LDNS 设备,客户端都能够持久保留到已为之前的请求提供服务的同一数据中心。为 LDNS IP 地址创建持久性会话后,所有使用该 LDNS 连接的终端客户端都将获得相同的数据中心 IP 地址。

GSLB 服务上的站点持久性

在处理应用程序请求时,站点持久性会有效。站点持久性仅适用于 HTTP 和 HTTPS 流量,因为持久性是使用 HTTP cookie 实现的。由于 Cookie 是在 HTTP 客户端(浏览器)上维护的,因此它可以查看位于 DNS 网关后面的客户端。当您使用 Cookie 为客户端实现持久性时,ADC 设备上不会为每个传入客户端消耗任何资源。当您在延迟的情况下使 GSLB 服务关闭时,该服务将进入到不服务 (TROFS) 状态的过渡。只要服务处于 UP 或 TROFS 状态,就支持持久性。也就是说,如果同一客户端在某个服务标记为 TROFS 之后的指定延迟时间内发送相同服务的请求,则相同的 GSLB 站点(数据中心)为该请求提供服务。

如果通过别名访问应用程序,请确保也在 Citrix ADC 设备上配置了 CNAME 记录。在父子拓扑中,当您通过别名访问应用程序时,站点持久性不起作用。

注意

如果将连接代理指定为站点持久性方法,并且您还希望在 LB 虚拟服务器上配置持久性,则不建议使用源 IP 持久性。代理连接时,将使用 ADC 设备拥有的 IP 地址,而不是客户端的实际 IP 地址。 配置适当的持久性,该持久性不使用 HTTP (S) 请求的源 IP 来识别客户端,例如 Cookie 持久性或基于规则的持久性。

根据源 IP 地址配置持久性

如果在 GSLB 虚拟服务器上配置了源 IP 持久性,则会为 DNS 请求的源 IP 地址创建持久性会话。根据扩展客户端子网 (ECS) 功能,DNS 请求的源 IP 地址取自以下任一项:

客户端的持久性会话持续到持久性超时为止。超时期满后,现有的持久性会话将被清除。对于后续请求,将做出新的 GSLB 决策,并可能会选择不同的 GSLB 服务 IP 地址。 GSLB 虚拟服务器上的源 IP 持久性和 GSLB 服务上的站点持久性相辅相成。如果在 GSLB 虚拟服务器上禁用源 IP 持久性,则每次 DNS 尝试执行解析时,GSLB 虚拟服务器都会选择不同的 GSLB 服务。客户端还连接到不同的 GSLB 服务,接收应用程序请求的数据中心代理到首先为客户端提供服务的数据中心的连接。这可能会增加一些延迟。因此,通过在 GSLB 虚拟服务器上启用源 IP 持久性,可以避免应用程序请求频繁出现此类多跳。如果源 IP 持久性会话已过期且客户端在此之后重新连接,则站点持久性会将客户端连接回数据中心,该数据中心最初为客户端提供服务。此外,如果客户端通过 DNS 网关重新连接(该网关不在配置的持久掩码范围内),那么站点持久性也有助于客户端坚持使用服务第一个请求的数据中心。

使用 CLI 基于源 IP 地址配置持久性

在命令提示符下,键入:

set gslb vserver <name> -persistenceType (SOURCEIP|NONE) -persistenceId <positive_integer> [-persistMask <netmask>] –[timeout <mins>]
<!--NeedCopy-->

示例:

set gslb vserver vserver-GSLB-1 -persistenceType SOURCEIP -persistenceId 23 -persistMask 255.255.255.255 –timeout 2
<!--NeedCopy-->

使用 GUI 基于源 IP 地址配置持久性

  1. 导航到流量管理 > GSLB > 虚拟服务器,然后双击要更改其方法的 GSLB 虚拟服务器(例如,vServer-GSLB-1)。
  2. 单击持 久性 部分,然后从持 久性 下拉列表中选择 SOURCEIP 并设置以下参数:
    • 持久性 ID - persistenceID
    • 超时-超时
    • IPv4 网络掩码或 IPv6 掩码长度 — 永久掩码

网站持久性是使用 HTTP Cookie(称为 “站点 cookie”)将客户端重新连接到同一台服务器来实现的。当 GSLB 设备通过发送所选 GSLB 站点的 IP 地址来响应客户端 DNS 请求时,客户端会向该 GSLB 站点发送 HTTP 请求。该 GSLB 站点中的应用程序终端节点向 HTTP 标头添加一个站点 cookie,并且站点持久性生效。 如果客户端在客户端缓存过期后发送 DNS 查询,则 DNS 请求可能会被定向到另一个 GSLB 站点。新的 GSLB 站点使用客户端请求标头中存在的站点 cookie 来实现持久性。在以下情况下,站点持久性功能变为活动状态

  • 当主机标头中的域名与其中一个 GSLB 域匹配时
  • 在表示接收应用程序流量的虚拟服务器的 GSLB 服务上启用站点持久性时。

站点 cookie 包含有关客户端具有持久连接的所选 GSLB 服务的信息。如果 Cookie 所指向的 GSLB 服务处于关闭状态或从 GLSB 配置中删除,则接收流量的虚拟服务器将继续处理流量。Cookie 过期取决于 Citrix ADC 设备上配置的 Cookie 超时。如果虚拟服务器名称在所有站点上都不相同,则必须使用持久性标识符。插入的饼干符合 RFC 2109 的要求。

Citrix ADC 支持两种类型的站点持久性:

  • 连接代理
  • HTTP 重定向

连接代理

在站点持久性的连接代理模式下,接收后续应用程序请求的数据中心将执行以下任务来建立连接:

  1. 创建与插入网站 Cookie 的 GSLB 网站的连接。
  2. 将客户端请求代理到原始站点。

    注意:

    理服务器使用以下详细信息建立与原始站点的连接:

    -  新站点的 SNIP 是源 IP 地址。
    
    • 原始站点的 GSLB 服务公有 IP 地址是目标 IP 地址。
    • 临时端口是源端口,GSLB 服务端口是目标端口。
    • 根据 GSLB 服务类型,使用 HTTP 或 HTTPS 协议。
  3. 接收来自原始 GSLB 站点的响应。
  4. 将该响应转发回客户端。
  5. 关闭连接。

HTTP 重定向

如果 GSLB 配置使用 HTTP 重定向持久性,则新站点将请求重定向到最初插入 cookie 的站点。重定向 URL 中的域名是站点域。确保 Cookie 和 SSL 证书同时适用于 GSLB 域和站点域。要同时为 GSLB 和站点域应用 Cookie,Cookie 域必须是 GSLB 域的站点。要将 SSL 证书同时应用于 GSLB 和站点域,绑定到 SSL 虚拟服务器的证书必须是通配符证书。

满足以下条件时,将发生连接代理:

  • 将向参与 GSLB 的域发送请求。域是从 URL/主机标头获取的。
  • 本地 GSLB 服务已启用连接代理。
  • 该请求包含一个包含活动远程 GSLB 服务的 IP 地址的有效 cookie。

注意

在 GSLB 父子配置中,即使未在子站点上配置 GSLB 服务,连接代理也能按预期工作。但是,如果您有额外的配置,例如客户端身份验证、客户端 IP 地址插入或其他特定于 SSL 的要求,则必须在站点上添加显式 GSLB 服务并进行相应配置。

有关父子拓扑的更多信息,请参阅 使用 MEP 协议进行父子拓扑部署

在命令提示符下,键入:

set gslb service <serviceName> -sitePersistence (ConnectionProxy [-sitePrefix <prefix>] | HTTPredirect -sitePrefix <prefix>)
<!--NeedCopy-->

示例:

set gslb service service-GSLB-1 -sitePersistence ConnectionProxy
set gslb service service-GSLB-1 -sitePersistence HTTPRedirect -sitePrefix vserver-GSLB-1
<!--NeedCopy-->
  1. 导航到流量管理 > GSLB > 服务,然后选择要为站点持久性配置的服务(例如 Servic-GSLB-1)。
  2. 单击“网站持久性”部分,并根据 Cookie 设置持久性。
如何在 GSLB 中配置持久性