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 连接,请启用重试。 numretries。重试计数。

添加 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

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

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

使用 NetScaler GUI 配置 AppQoE 操作以实现请求重试平衡

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

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

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

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