Citrix ADC

如何在GSLB中配置持久性

持久性确保对特定域名的一系列客户机请求被发送到相同的数据中心,而不是负载均衡。如果为特定域配置了持久性,则它优先于配置的GSLB方法。您可以在部署中使用持久性,其中与客户端事务相关的信息本地存储在实例上,该实例为初始请求提供服务。例如,使用购物车的电子商务部署,其中服务器需要维护连接状态以跟踪事务。Citrix ADC设备选择一个数据中心来处理客户机请求。启用持久性后,它将为所有后续域名系统(DNS)请求转发所选数据中心的相同IP地址。如果持久性会话指向一个DOWN的数据中心,Citrix ADC设备将使用配置好的GSLB方法来选择一个新的数据中心。然后,对于来自客户机的后续请求,它变为持久化的。对于GSLB中的持久性,必须在所有数据中心的GSLB虚拟服务器上配置相同的一组持久性标识符(persistID)。GSLB模块使用持久化标识符唯一标识GSLB虚拟服务器。 When Source IP persistence is enabled on the GSLB virtual server, the persistence sessions are also exchanged as part of the metrics exchange. For the Citrix ADC appliance to support persistence across sites, persistence related configuration must be done on all the participating GSLB sites. Citrix recommends persistence in GSLB for stateful applications, which requires clients to reconnect to the same application instance for the subsequent requests.

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

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

GSLB虚拟服务器上的持久性

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

GSLB服务上的站点持久化

站点持久化在处理应用程序请求时变得有效。站点持久性仅适用于HTTP和HTTPS通信,因为持久性是使用HTTP cookie实现的。由于cookie是在HTTP客户端(浏览器)上维护的,因此可以看到位于DNS网关后面的客户端。当您使用cookie为客户机实现持久性时,ADC设备上不会为每个传入客户机消耗任何资源。当您使用延迟时间使GSLB服务DOWN时,该服务将进入到服务退出转换(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网关连接回来,而DNS网关不在所配置的持久掩码范围内,那么站点持久化也可以帮助客户端坚持到为第一个请求提供服务的数据中心。

通过CLI配置基于源IP地址的持久化

在命令提示符下,输入:

set gslb vserver  - persistencetype (SOURCEIP|NONE) - persistenceid  [- persistmask ] - [timeout ] 

例子:

set gslb vserver vserver- gslb -1 -persistenceType SOURCEIP -persistenceId 23 - persistencmask 255.255.255.255 -timeout 2 

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

  1. 导航到交通管理>GSLB>虚拟服务器并双击要更改其方法的GSLB虚拟服务器(例如,vserver-GSLB-1)。
  2. 单击持久性节而,从而持久性下拉列表,选择SOURCEIP并设置如下参数:
    • 持久性Id-persistenceID
    • Time-out-timeout
    • IPv4 Netmask或IPv6 Mask length-persistMask

配置基于HTTP cookie的站点持久化

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

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

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

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

  • 连接代理
  • HTTP重定向

连接代理

在站点持久化的Connection Proxy模式下,接收到后续应用请求的数据中心将执行以下任务建立连接:

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

    注意:

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

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

HTTP重定向

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

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

  • 为参与GSLB的域发送请求。该域从URL/Host头中获取。
  • 本地GSLB服务开启了连接代理。
  • 请求包括一个有效的cookie,其中包含一个活动的远程GSLB服务的IP地址。

请注意

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

有关父子拓扑的详细信息,请参见使用MEP协议部署父子拓扑

使用CLI方式设置基于HTTP cookie的持久性

在命令提示符下,输入:

set gslb service  -sitePersistence (ConnectionProxy [-sitePrefix ] | HTTPredirect -sitePrefix ) 

例子:

设置gslb服务服务- gslb -1 -sitePersistence连接代理设置gslb服务服务- gslb -1 -sitePersistence HTTPRedirect -sitePrefix vserver-GSLB-1 

使用GUI设置基于cookie的持久性

  1. 导航到交通管理>GSLB>服务并选择要为站点持久化配置的服务(例如,service- gslb -1)。
  2. 单击网站的持久性节并设置基于cookie的持久性。