如果 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 服务器重新选择。
导航到
。打开池的配置弹出窗口。
如果要在现有池中启用该功能,请单击该池的编辑图标。
要创建新的池,请单击创建池,选择云名称,然后单击下一步。在设置选项卡上输入池的名称,然后在服务器选项卡上选择服务器。
单击高级选项卡。
选中 HTTP 服务器重新选择复选框。
输入触发服务器重新选择的错误响应代码。
保存更改。
如果创建新的池,请单击下一步以检查设置,然后单击保存。
如果编辑现有的池,请单击保存。
以下示例为所有 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]: >