ADC

持久性设置

如果您要在由虚拟服务器表示的服务器上保持连接状态(例如,电子商务中使用的连接),必须对该虚拟服务器配置持久性。然后,设备将使用配置的负载平衡方法进行初始服务器选择,而将来自同一个客户端的所有后续请求都转发到该服务器。

如果配置了持久性,它会在选定服务器之后取代负载平衡方法。如果配置的持久性适用于关闭的服务,设备将使用负载平衡方法来选择新服务,对于来自客户端的后续请求,新服务将具有持久性。如果选定的服务处于“Out Of Service”(中断服务)状态,它仍将继续处理未决请求,但不再接受新的请求或连接。关闭期结束后,现有连接将关闭。下表列出了可以配置的持久性类型。

持久性类型 持续型连接
源 IP、SSL 会话 ID、规则、DESTIP、SRCIPDESTIP 250K
CookieInsert、URL 被动、自定义服务器 ID 内存限制。如果是 CookieInsert 并且超时不为 0,则在达到内存限制之前,连接数目不受限制。

表 1. 并发持续型连接数目限制

如果由于设备缺乏资源而无法保持配置的持久性,将使用负载平衡方法进行服务器选择。持久性将在配置的时间内保持,具体取决于持久性类型。某些持久性类型专用于某些虚拟服务器。下表显示了对应关系。

持久性类型标头 1 HTTP HTTPS TCP UDP/IP SSL_Bridge
源 IP
CookieInsert
SSL Session ID(SSL 会话 ID)
URL Passive(URL 被动)
自定义服务器 ID
规则
SRCIPDESTIP 不适用 不适用 不适用
DESTIP 不适用 不适用 不适用

表 2. 适用于各种虚拟服务器类型的持久性类型

还可以为一组虚拟服务器指定持久性。对一组虚拟服务器启用持久性之后,无论该组中的哪一个虚拟服务器接收到客户端请求,客户端请求都将定向到选定的同一个服务器。在经过配置的持久性时间之后,就可以选择该组中的任何虚拟服务器来处理传入的客户端请求。

两种常用的持久性类型是基于 Cookie 的持久性和基于 URL 中服务器 ID 的持久性。

在启用基于 Cookie 的持久性之后,Citrix ADC 设备会将一个 HTTP Cookie 添加到 HTTP 响应的 Set-Cookie 标头字段中。Cookie 包含关于必须将 HTTP 请求发送到的服务的信息。客户端存储 Cookie 并在所有后续请求中包括该 Cookie,并且 ADC 使用它为这些请求选择服务。您可以在 HTTP 类型或 HTTPS 类型的虚拟服务器上使用此类型的持久性。

Citrix ADC 设备将插入 cookie <NSC_XXXX>= <ServiceIP> <ServicePort>

其中:

  • <<NSC_XXXX> 是从虚拟服务器名称派生的虚拟服务器 ID。
  • <<ServiceIP> 是服务的 IP 地址的十六进制值。
  • <<ServicePort> 是服务的端口的十六进制值。

如果启用 useEncryptedPersistenceCookie 选项,ADC 将在插入 cookie 时使用 SHA2 哈希算法加密 ServiceIP 和 ServicePort,并在收到 cookie 时进行解密。

注意:如果不允许客户端存储 HTTP Cookie,则后续请求不会含有 HTTP Cookie,并且不使用持久性。

默认情况下,ADC 设备发送符合 Netscape 规范的 HTTP Cookie 版本 0。它还可发送符合 RFC 2109 的 Cookie 版本 1。

您可以为基于 HTTP Cookie 的持久性配置超时值。请注意以下问题:

  • 如果使用 HTTP Cookie 版本 0,Citrix ADC 设备将插入 Cookie 到期时间(HTTP Cookie 的 expires 属性)的绝对协调世界时 (GMT),按 ADC 设备中当前 GMT 时间和超时值之和计算。
  • 如果使用 HTTP Cookie 版本 1,ADC 设备将插入相对到期时间(HTTP Cookie 的 Max-Age 属性)。在这种情况下,客户端软件将计算实际的到期时间。

注意:当前安装的大多数客户端软件(Microsoft Internet Explorer 和 Netscape 浏览器)识别 HTTP Cookie 版本 0;但是,某些 HTTP 代理识别 HTTP Cookie 版本 1。

如果将超时值设置为 0,则不论使用哪一个 HTTP Cookie 版本,ADC 设备均不指定到期时间。此时到期时间取决于客户端软件,如果关闭该软件,此类 Cookie 就会无效。这种持久性类型不占用任何系统资源。因此,它可以容纳无数个持久性客户端。

管理员可以更改 HTTP cookie 版本。

在命令提示窗口中,键入:

set ns param [-cookieversion ( 0 | 1 )]
<!--NeedCopy-->

示例:

set ns param -cookieversion 1
<!--NeedCopy-->
  1. 导航到 System(系统)> Settings(设置)。
  2. 在详细信息窗格中,单击 Change HTTP Parameters(更改 HTTP 参数)。
  3. 在 Configure HTTP Parameters(配置 HTTP 参数)对话框中的 Cookie 下,选择 Version 0(版本 0)或 Version 1(版本 1)。

注意:有关参数的信息,请参阅配置基于 cookie 的持久性

在命令提示窗口中,键入以下命令以配置基于 Cookie 的持久性并验证配置:

set lb vserver <name> -persistenceType COOKIEINSERT

show lb vserver <name>
<!--NeedCopy-->

示例:

set lb vserver vserver-LB-1 -persistenceType COOKIEINSERT
Done
show lb vserver vserver-LB-1
    vserver-LB-1 (10.102.29.60:80) - HTTP   Type: ADDRESS
    .
    .
    .
    Persistence: COOKIEINSERT (version 0)
    Persistence Timeout: 2 min
    .
    .
    .
 Done
<!--NeedCopy-->
  1. 导航到 Traffic Management(流量管理)> Load Balancing(负载平衡)> Virtual Servers(虚拟服务器)。
  2. 在详细信息窗格中,选择要为其配置持久性的虚拟服务器(例如 vserver-LB-1),然后单击 Open(打开)。
  3. 在 Configure Virtual Server (Load Balancing)(配置虚拟服务器(负载平衡))对话框中,从 Method and Persistence(方法和持久性)选项卡上的 Persistence(持久性)列表中选择 COOKIEINSERT。
  4. 在 Time-out (min)(超时(分钟))文本框中,键入超时值(例如 2)。
  5. 单击确定。
  6. 选择虚拟服务器并查看窗格底部的 Details(详细信息)部分,确认其持久性配置正确。

配置基于 URL 中服务器 ID 的持久性

Citrix ADC 设备可以根据 URL 中的服务器 ID 维护持久性。在称为 URL 被动持久性的技术中,ADC 从服务器响应中提取服务器 ID,并将其嵌入客户端请求的 URL 查询中。服务器 ID 是指定为十六进制数的 IP 地址和端口组合。ADC 从后续的客户端请求中提取服务器 ID,然后用它来选择服务器。

URL 被动持久性要求配置负载表达式或策略基础结构表达式,指定服务器 ID 在客户端请求中的位置。有关表达式的详细信息,请参阅策略配置和参考

注意:如果无法从客户端请求中提取服务器 ID,系统将根据负载平衡方法来选择服务器。

示例:负载表达式

表达式 URLQUERY 中包含 sid=,将系统配置为从客户端请求的 URL 查询中提取服务器 ID(匹配标记 sid= 之后的部分)。因此,URL 为 http://www.citrix.com/index.asp?\&sid;=c0a864100050 的请求将定向到 IP 地址为 10.102.29.10、端口为 80 的服务器。

超时值不影响此类型的持久性,只要能够从客户端请求中提取服务器 ID,就可以保持这种持久性。此持久性类型不占用任何系统资源,因此可以容纳无数个持久性客户端。

注意:有关参数的信息,请参阅 负载平衡

使用 CLI 基于 URL 中的服务器 ID 配置持久性

在命令提示窗口中,键入以下命令以配置基于 URL 中服务器 ID 的持久性并验证配置:

set lb vserver <name> -persistenceType URLPASSIVE

<show lb vserver <name>
<!--NeedCopy-->

示例:

set lb vserver vserver-LB-1 -persistenceType URLPASSIVE
Done
show lb vserver vserver-LB-1
    vserver-LB-1 (10.102.29.60:80) - HTTP   Type: ADDRESS
    .
    .
    .
    Persistence: URLPASSIVE
    Persistence Timeout: 2 min
    .
    .
    .
Done
<!--NeedCopy-->

使用 GUI 基于 URL 中的服务器 ID 配置持久性

  1. 导航到 Traffic Management(流量管理)> Load Balancing(负载平衡)> Virtual Servers(虚拟服务器)。
  2. 在详细信息窗格中,选择要为其配置持久性的虚拟服务器(例如 vserver-LB-1),然后单击 Open(打开)。
  3. 在 Configure Virtual Server (Load Balancing)(配置虚拟服务器(负载平衡))对话框中,从 Method and Persistence(方法和持久性)选项卡上的 Persistence(持久性)列表中选择 URLPASSIVE。
  4. 在 Time-out (min)(超时(分钟))文本框中,键入超时值(例如 2)。
  5. 在 Rule(规则)文本框中,输入有效的表达式。或者,也可以单击 Rule(规则)文本框旁边的 Configure(配置),使用 Create Expression(创建表达式)对话框来创建表达式。
  6. 单击确定。
  7. 选择虚拟服务器并查看窗格底部的 Details(详细信息)部分,确认其持久性配置正确。
持久性设置