ADC

如何在 GSLB 中配置持久性

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

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

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

GSLB 虚拟服务器上的持久性

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

GSLB 服务上的网站持久化

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

如果您通过别名访问应用程序,请确保在 NetScaler 设备上也配置了 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. 单击“持久性”部分,然后从“持久性”下拉列表中选择 S OURCEIP 并设置以下参数:
    • 持久性 ID —持久性 ID
    • 超时—超时
    • 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 的过期时间基于 NetScaler 设备上配置的 cookie 超时时间。如果并非所有站点上的虚拟服务器名称都相同,则必须使用持久性标识符。插入的 Cookie 符合 RFC 2109。

NetScaler 支持两种类型的站点持久化:

  • 连接代理
  • 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 服务已启用连接代理。
  • 该请求包含一个有效的 cookie,其中包含活动远程 GSLB 服务的 IP 地址。

注意

在 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 > 服务 ,然后选择要为站点持久性配置的服务(例如 Service-GSLB-1)。
  2. 单击“站点持久化”部分并基于 cookie 设置持久性。
如何在 GSLB 中配置持久性