即使池和服务器在特定持续时间内处于“已启动”状态,也会在 NSX Advanced Load Balancer 日志中出现 470 错误。本主题详细介绍对此错误进行故障排除和解决的步骤。
可能会出现以下 470 错误:
请求异常终止: 没有可用的服务器 (Request ended abnormally: no available servers)
仅当虚拟服务附加了内容交换策略时,才会出现此错误。虚拟服务日志表现出以下行为:
失败的 POST 请求命中 HTTP 请求策略和网络安全策略,但 NSX Advanced Load Balancer 无法将该流量发送到内容交换机池中指定的后端服务器。
从虚拟服务日志和 Wireshark 捕获中可以看到,请求数据在失败和工作场景中类似。
解决方案
如果使用内容交换,但已为虚拟服务禁用连接多路复用,则会出现此问题。
要解决此问题,请为关联的内容交换虚拟服务启用连接多路复用。
错误原因
内容切换(关闭连接多路复用)实质上意味着前端和后端连接是固定的。当前端连接上的第一个请求到达时,将根据适用的策略或其他设置选择服务器,并建立与服务器的连接。建立后端连接后,将绑定 FE 和 BE 连接。如果稍后出现另一个请求,并且由于某个策略选择了另一个池,则该请求无法继续绑定的后端连接,并且需要建立新的连接,这会打破连接交换的概念。因此,在关闭连接多路复用的情况下,内容交换将不起作用。
在某些情况下,请求是该前端连接上的第一个请求,没有任何现有后端连接,因此即使使用内容交换,请求也可能会起作用。
观察
以下是在故障排除期间观察到的几个问题:
从 Safari 浏览器中发现,当您第一次转到 NSX Advanced Load Balancer 上托管的网站并尝试登录时,会失败并显示错误登录失败 (login failed)。在虚拟服务日志中出现以下错误:
Req Policy Rule: redirect_apiNetwork Security Rule: permit1Significance:Request ended abnormally: no available serversRequest ended abnormally: response code 4xx.,
但是,如果刷新一两次浏览器,则会正常工作。
在 Chrome 浏览器中,观察到相同的模式,但最初的 2 个 POST 会失败。正常工作的浏览器会自动启动,您无需刷新 Chrome 浏览器。
后端服务器稳定。
从数据包捕获中,可以观察到 NSX Advanced Load Balancer 正在接收 POST 请求,但会关闭连接,并且不会发起与后端服务器的连接。
刷新浏览器后,浏览器将正常工作。当另一个类似的 POST 请求出现时,NSX Advanced Load Balancer 会建立与后端服务器的连接。