如果 HTTP 请求失败,或返回的错误代码是用户指定的错误代码的一部分,则控制器将这些错误消息转发回客户端。可以将 NSX Advanced Load Balancer 配置为重试此类请求。

可配置的选项

默认情况下,将禁用 HTTP 服务器重新选择。可以在各个池中配置该功能。用户可以选择性地选择触发该功能的错误代码。在启用后,该功能适用于所有连接或 SSH 故障场景。

错误代码

池配置指定导致服务器重新选择所需的 HTTP 错误响应代码。可以通过任何以下方法指定错误代码。

  • 明确的代码编号

输入一个或多个单独的错误代码(例如 404)。

  • 代码范围

输入 400-499 范围或 500 到 599 之间的范围(例如 501-503)。

  • 整个代码块

4xx 或 5xx(例如 4xx)。

最大重试次数

默认最大重试次数设置为 4 次。在发送第一个错误响应后,NSX Advanced Load Balancer 最多再向池重新发送 4 次请求,总共尝试 5 次。每次重试将发送到不同的服务器,并且每个服务器只能收到一次尝试。

如果最大重试次数设置高于池中已启用并正在运行的服务器数,其中的每个服务器仍仅收到一次尝试。例如,如果最大重试次数设置为 4 次,但在池中只有 3 个服务器,则最大重试次数仅为 2 次。失败的初始尝试发送到其中的一个服务器,其余 2 个服务器可以接收尝试。如果第二个服务器也发送 4xx 或 5xx 错误代码以响应请求,该请求将发送到池中的最后一个服务器。如果最后一个服务器也发送 4xx 或 5xx,则将该服务器的响应发回到客户端。

服务器重试超时

可以通过 NSX Advanced Load Balancer REST API 或 CLI 设置 srv_retry_timeout 变量。确保将 server_reselect.enabled 设置为 True,以使 srv_retry_timeout 变量设置生效。超时范围是 0-3600000 毫秒(60 分钟)。值为 0 导致超时默认为连接超时值。

幂等请求的服务器重新选择

HTTP 服务器重新选择仅适用于幂等请求方法,因为即使服务器多次收到相同的请求,这种类型的给定请求始终具有相同的结果。根据定义,非幂等请求方法(POST、LOCK、PATCH 和 CONNECT)的多个相同请求不能保证具有与单个此类请求相同的效果。因此,不会为这些请求方法执行 HTTP 服务器重新选择。

配置 HTTP 服务器重新选择

可以在池配置的高级选项卡上启用 HTTP 服务器重新选择。

  1. 导航到应用程序 >

  2. 打开池的配置弹出窗口。

    1. 如果要在现有池中启用该功能,请单击该池的编辑图标。

    2. 要创建新的池,请单击创建池,选择云名称,然后单击下一步。在设置选项卡上输入池的名称,然后在服务器选项卡上选择服务器。

  3. 单击高级选项卡。

  4. 选中 HTTP 服务器重新选择复选框。

  5. 输入触发服务器重新选择的错误响应代码。

  6. 保存更改。

    1. 如果创建新的池,请单击下一步以检查设置,然后单击保存

    2. 如果编辑现有的池,请单击保存

以下示例为所有 4xx 错误代码启用 HTTP 服务器重新选择。



根据该配置,如果该池中的一个服务器使用 4xx 错误代码响应客户端请求,则 NSX Advanced Load Balancer 将请求发送到池中的另一个服务器以重试该请求。最多可以执行 4 次重试过程(发送到 4 个不同的服务器)。

CLI 示例

注:

以下示例仅包含 CLI 输出中感兴趣的重要行。

[admin:10-10-27-18]: > configure pool vs-test-pool
Updating an existing object. Currently, the object is:
+---------------------------------------+------------------------------------------------+
| Field                                 | Value                                          |
+---------------------------------------+------------------------------------------------+
| uuid                                  | pool-8e91b1a6-17bf-490e-b59a-05efd942a3f6      |
| name                                  | vs-test-pool                                   |
.                                                                                        .
.                                                                                        .
.                                                                                        .
| server_reselect                       |                                                |
|   enabled                             | False                                          |
|   num_retries                         | 4                                              |
|   retry_nonidempotent                 | False                                          |
|   srv_retry_timeout                   | 0 milliseconds                                 |
.                                                                                        .
.                                                                                        .
.                                                                                        .
+---------------------------------------+------------------------------------------------+                                                           
[admin:10-10-27-18]: pool> server_reselect enabled
[admin:10-10-27-18]: pool:server_reselect> srv_retry_timeout 5000
Overwriting the previously entered value for srv_retry_timeout
[admin:10-10-27-18]: pool:server_reselect> save
[admin:10-10-27-18]: pool> exit
+---------------------------------------+------------------------------------------------+
| Field                                 | Value                                          |
+---------------------------------------+------------------------------------------------+
| uuid                                  | pool-8e91b1a6-17bf-490e-b59a-05efd942a3f6      |
| name                                  | vs-test-pool                                   |
.                                                                                        .
.                                                                                        .
.                                                                                        .
| server_reselect                       |                                                |
|   enabled                             | True                                           |
|   num_retries                         | 4                                              |
|   retry_nonidempotent                 | False                                          |
|   srv_retry_timeout                   | 5000 milliseconds                              |
.                                                                                        .
.                                                                                        .
.                                                                                        .
+---------------------------------------+------------------------------------------------+

[admin:10-10-27-18]: > configure pool vs-test-pool server_reselect
[admin:10-10-27-18]: pool:server_reselect> no enabled
+---------------------+-------------------+
| Field               | Value             |
+---------------------+-------------------+
| enabled             | False             |
| num_retries         | 4                 |
| retry_nonidempotent | False             |
| srv_retry_timeout   | 5000 milliseconds |
+---------------------+-------------------+
[admin:10-10-27-18]: pool:server_reselect> srv_retry_timeout 0
Overwriting the previously entered value for srv_retry_timeout
[admin:10-10-27-18]: pool:server_reselect> save
[admin:10-10-27-18]: pool> save
+---------------------------------------+------------------------------------------------+
| Field                                 | Value                                          |
+---------------------------------------+------------------------------------------------+
| uuid                                  | pool-8e91b1a6-17bf-490e-b59a-05efd942a3f6      |
| name                                  | vs-test-pool                                   |
.                                                                                        .
.                                                                                        .
.                                                                                        .
| server_reselect                       |                                                |
|   enabled                             | False                                          |
|   num_retries                         | 4                                              |
|   retry_nonidempotent                 | False                                          |
|   srv_retry_timeout                   | 0 milliseconds                                 |
.                                                                                        .
.                                                                                        .
.                                                                                        .
+---------------------------------------+------------------------------------------------+
[admin:10-10-27-18]: >