持久性设置

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

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

持久性类型 持续型连接
源 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 被动)
Custom Server ID(自定义服务器 ID)
规则
SRCIPDESTIP 不适用 不适用 不适用
DESTIP 不适用 不适用 不适用

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

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

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

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

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

其中:

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

ADC 在插入 Cookie 时对 ServiceIP 和 ServicePort 进行加密,在收到 Cookie 时对它们进行解密。

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

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

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

  • 如果使用 HTTP cookie 版本 0,Citrix ADC 设备会插入 Cookie 过期的绝对协调世界时间 (GMT)(HTTP Cookie 的过期属性),该时间为 ADC 设备上当前 GMT 时间的总和和和超时值计算。
  • 如果使用 HTTP cookie 版本 1,则 ADC 设备会插入相对过期时间(HTTP cookie 的最大时间属性)。在这种情况下,客户端软件将计算实际的到期时间。

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

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

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

在命令提示符下,键入;

set ns param [-cookieversion ( 0 | 1 )]

示例:

set ns param -cookieversion 1
  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>

示例:

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
  1. 导航到 Traffic Management(流量管理)> Load Balancing(负载平衡)> Virtual Servers(虚拟服务器)。
  2. 在详细信息窗格中,选择要为其配置持久性的虚拟服务器(例如,虚拟服务器 LB-1),然后单击“打开”。
  3. 在“配置虚拟服务器(负载平衡)”对话框中的“方法和持久性”选项卡上的“持久性”列表中,选择“COOKIEINSERT”。
  4. 在 Time-out (min)(超时(分钟))文本框中,键入超时值(例如 2)。
  5. 单击确定。
  6. 通过选择虚拟服务器并查看窗格底部的“详细信息”部分,验证您为其配置了持久性的虚拟服务器是否已正确配置。

根据 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>

示例:

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

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

  1. 导航到 Traffic Management(流量管理)> Load Balancing(负载平衡)> Virtual Servers(虚拟服务器)。
  2. 在详细信息窗格中,选择要为其配置持久性的虚拟服务器(例如,虚拟服务器 LB-1),然后单击“打开”。
  3. 在“配置虚拟服务器(负载平衡)”对话框中的“方法和持久性”选项卡上的“持久性”列表中,选择 URLPASSIVE。
  4. 在 Time-out (min)(超时(分钟))文本框中,键入超时值(例如 2)。
  5. 在“规则”文本框中,输入有效的表达式。或者,单击“规则”文本框旁边的“配置”,然后使用“创建表达式”对话框创建表达式。
  6. 单击确定。
  7. 通过选择虚拟服务器并查看窗格底部的“详细信息”部分,验证您为其配置了持久性的虚拟服务器是否已正确配置。