【问题标题】:AWS ELB - will it retry request if node fails?AWS ELB - 如果节点失败,它会重试请求吗?
【发布时间】:2015-10-27 10:35:34
【问题描述】:

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

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

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

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

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

谢谢,

【问题讨论】:

  • 不。 ELB 不会重试。 ELB 密切关注哪些服务器的运行状况/连接数,并来回传递数据。它没有任何重试逻辑。

标签: amazon-web-services amazon-elb


【解决方案1】:

这可能只是时间的问题,但现在 ELB确实重试了中止的请求:

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

但是,这仅在您尚未发送任何个响应字节时才成立。如果您发送了不完整的标头,您将收到 408 请求超时。如果您发送了完整的标头(但没有发送正文或正文中途),客户端将按原样收到不完整的响应。

我进行的实验都是针对每个连接的一个 HTTP 请求。如果您使用 Keep-Alive 连接,则行为可能会有所不同。

【讨论】:

  • 我正在尝试查找 AWS 文档的链接,以确认 ELB 是否重试因空闲超时而失败的请求。你能提供这个来源@rix0rrr
【解决方案2】:

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

如果向实例发送请求但未收到响应(因为应用程序失败或触发超时),则请求不会重新发送也不会发送到其他服务器。由发起者(例如用户或应用程序)重新发送请求。

【讨论】:

    猜你喜欢
    • 2016-04-27
    • 2017-11-15
    • 2017-05-01
    • 1970-01-01
    • 2016-07-05
    • 2016-02-25
    • 2013-06-25
    • 1970-01-01
    • 2019-02-09
    相关资源
    最近更新 更多