Citrix ADC

如果后端服务器重置 TCP 连接,请求重试

当后端服务器重置 TCP 连接时,请求重试功能会将请求转发到下一个可用服务器,而不是将重置发送到客户端。通过执行重新负载平衡,当设备向下一个可用服务发起同一请求时,客户端会保存 RTT。

后端服务器重置 TCP 连接时请求重试的工作原理

下图显示了组件之间的交互方式。

请求重试如何用于 TCP 连接重置

  1. 该过程首先在设备上启用 appqoe 功能。
  2. 当客户端发送 HTTP 或 HTTPS 请求时,负载平衡虚拟服务器将该请求发送到后端服务器。
  3. 如果请求的服务不可用,则后端服务器将重置 TCP 连接。
  4. 如果 appqoe 配置启用了 “重试” 且指定了所需的重试次数,则负载平衡虚拟服务器将使用配置的负载平衡算法将请求转发到下一个可用的应用程序服务器。
  5. 负载平衡虚拟服务器收到响应后,设备将响应转发给客户端。
  6. 如果可用的后端服务器等于或小于重试计数,如果所有服务器都发送了重置,则设备将响应 500 个内部服务器错误。考虑一个具有五台可用服务器且重试计数设置为 6 台的场景。如果所有五台服务器都重置了连接,则设备将向客户端返回 500 个内部服务器错误。
  7. 同样,如果后端服务器的数量超过重试计数,如果后端服务器重置连接,则设备将重置转发给客户端。考虑一个包含三台后端服务器并将重试计数设置为两台的场景。如果三台服务器重置连接,则设备将向客户端发送重置响应。

为 GET 方法配置请求重试

要为 GET 方法配置重试功能,必须完成以下步骤。

  1. 启用 AppQoE
  2. 添加 AppQoE 操作
  3. 添加 AppQoE 策略
  4. 将 AppQoE 策略绑定到负载平衡虚拟服务器

启用 AppQoE

在命令提示符下,键入: enable ns feature appqoe

添加 AppQoE 操作

您必须配置 AppQoE 操作以指定是否希望设备在 TCP 重置后重试以及重试次数。

add appqoe action reset_action -retryOnReset ( YES | NO ) -numretries <positive_integer>]

示例:

add appqoe action reset_action –retryOnReset YES –numretries 5

其中, retryOnReset. 如果后端服务器重置 TCP 连接,请启用重试。 数字。重试计数。

添加 AppQoE 策略

要实施 AppQoE,您必须将 AppQoE 策略配置为特定队列中传入的 HTTP 或 SSL 请求的优先级。

在命令提示符下,键入:

add appqoe policy <name> -rule <expression> -action <string>

示例:

add appqoe policy reset_policy -rule http.req.method.eq(get) -action reset_action

将 appqoe 策略绑定到负载平衡虚拟服务器

当后端服务器重置 TCP 数据包请求并且希望负载平衡虚拟服务器将请求转发到下一个可用服务时,必须将负载平衡虚拟服务器绑定到 AppQoE 策略。

在命令提示符下,键入:

bind lb vserver <name> ((<serviceName> (-policyName <string> [-priority <positive_integer>] [-gotoPriorityExpression <expression>] [-type ( REQUEST | RESPONSE )]

示例:

bind lb vserver v1 -policyName reset_policy -type REQUEST -priority 1

为 POST 请求配置请求重试

在重新负载平衡请求将数据写入后端服务器时,必须始终谨慎行事。对于此类请求,请确保内容长度很短。如果内容长度很长,则可能会导致资源消耗。按照下面给出的步骤为 POST 请求配置重新负载平衡。

  1. 启用 AppQoE
  2. 添加 AppQoE 操作
  3. 添加 AppQoE 策略
  4. 将 AppQoE 策略绑定到负载平衡虚拟服务器

启用 AppQoE

在命令提示符下,键入:

enable ns feature appqoe

添加 Appqoe 操作

在 TCP 重置和重试次数之后,您必须添加 AppQoE 操作才能重试。

add appqoe action reset_action -retryOnReset ( YES | NO ) -numretries <positive_integer>]

示例:

add appqoe action reset_action –retryOnReset YES –numretries 5

添加 Appqoe 策略

要实施 AppQoE,您必须配置 AppQoE 策略以定义如何将特定队列中的连接排队。

在命令提示符下,键入:

add appqoe policy <name> -rule <expression> -action <string>

示例:

add appqoe policy reset_policy -rule HTTP.REQ.CONTENT_LENGTH.le(2000) -action reset_action

注意 : 如果您希望将请求重试功能限制为内容长度小于 2000,则可以使用此配置。

将负载平衡虚拟服务器绑定到 AppQoE 策略

当后端服务器重置 TCP 数据包请求时,如果您希望负载平衡虚拟服务器通过特定队列将请求转发到下一个可用服务,则必须将负载平衡虚拟服务器绑定到 AppQoE 策略。

在命令提示符下,键入:

bind lb vserver <name> ((<serviceName> (-policyName <string> [-priority <positive_integer>] [-gotoPriorityExpression <expression>] [-type ( REQUEST | RESPONSE )]

示例: bind lb vserver v1 -policyName reset_policy -type REQUEST -priority 1

使用 Citrix ADC GUI 为请求重试配置 AppQoE 策略

  1. 导航到 AppExpert > AppQoE > 策略
  2. 在“AppQoE 策略”页中,单击“添加”。
  3. 在“创建 AppQoE 策略”页中,设置以下参数: a. 名称。AppQoE 策略名称 b. 操作。添加或编辑操作。要创建操作,请参阅 创建 AppQoE 操作 部分。 c. 表达式。选择或输入 HTTP.REQ.CONTENT_LENGTH.le (2000) 策略表达式。
  4. 单击创建关闭

    AppQoE 策略用于请求重试或重新负载平衡

使用 Citrix ADC GUI 为请求重试平衡配置 AppQoE 操作

  1. 导航到 AppExpert > AppQoE > 操作
  2. AppQoE 操作 页面中,单击 添加
  3. 在“创建 AppQoE 操作”页中,为 TCP 重置时重试设置以下参数: a. 在 TCP 重置时重试。选中该复选框可启用 TCP 重置的重试操作。 b. 重试计数。输入重试计数。
  4. 单击创建关闭

    为请求重试平衡配置 AppQoE 操作

在 TCP SYN 建立时后端服务器重置时为 GET 方法配置请求重试

CLI 和 GUI 配置类似于 GET 方法所遵循的步骤。有关更多信息,请参阅 为 GET 方法配置请求尝试 部分。 当后端服务器重置连接部分时。

如果后端服务器重置 TCP 连接,请求重试