AWS ELB - 如果节点失败,它会重试请求吗?

AWS ELB - will it retry request if node fails?

我有一个 ELB 和它后面的 3 个节点。

谁能解释一下 ELB 在这些情况下会做什么:

  1. 客户端请求 -> ELB -> Node1 在请求中途失败(ELB 超时)
  2. 客户端请求 -> ELB -> Node1 超时(服务器超时和健康检查尚未启动)

特别想知道 ELB 是否会重试对另一个节点的请求?

我做了一个测试,但似乎没有,但也许我错过了一个设置。

谢谢,

AWS Elastic Load Balancing 服务使用健康检查来识别 healthy/unhealthy Amazon EC2 实例。如果实例被标记为不健康,则不会向该服务器发送新流量。一旦被识别为 Heathy,流量将再次发送到该实例。

如果向实例发送请求但未收到响应(因为应用程序失败或触发超时),则请求不会重新发送也不会发送到另一台服务器.重新发送请求将取决于发起者(例如用户或应用程序)。

这可能是时间流逝的问题,但是现在 ELB do 重试中止的请求:

  • 要么是因为空闲超时(默认为 60 秒);
  • 或者因为实例由于健康检查失败而变得不健康,连接耗尽被禁用(默认启用)

但是,这仅在您尚未发送 任何 响应字节时才成立。如果您发送的 headers 不完整,您将收到 408 请求超时 。如果您发送了完整的 headers(但没有发送 body 或发送到一半 body),客户端将收到不完整的响应 as-is.

The experiments I've performed were all with a single HTTP request per connection. If you use Keep-Alive connections, the behavior might be different.