如何为 Elastic Load Balancer 配置自动超时?
Posted
技术标签:
【中文标题】如何为 Elastic Load Balancer 配置自动超时?【英文标题】:How can I configure an automatic timeout for an Elastic Load Balancer? 【发布时间】:2014-04-04 16:19:22 【问题描述】:如果在设定的时间范围内未从上游收到 HTTP 响应,是否有人知道如何让 Amazon 的弹性负载均衡器超时?
Amazon 的 Elastic Beanstalk 有时会导致更新失败,并且对指定资源的任何请求(如果有任何用途,则运行 nginx + Node)将在资源尝试加载时挂起任何请求页面。
我希望将请求超时保持在 2s 以内,如果此时上游服务器没有响应,则自动故障转移到默认的 503 响应。
ELB 可以做到吗?
干杯
【问题讨论】:
您使用的是 Express 还是 Geddy? 我现在在这里使用 Express。 【参考方案1】:您可以通过Configure Health Check Settings 为Elastic Load Balancing 实现此目的:
Elastic Load Balancing 会根据您指定的配置定期检查每个已注册 Amazon EC2 实例的运行状况。如果 Elastic Load Balancing 发现运行状况不佳的实例,它会停止向该实例发送流量并将流量重新路由到运行状况良好的实例。有关配置健康检查的更多信息,请参阅Health Check。
例如,您只需为 HTTP 健康检查指定适当的 Ping 路径、2 秒的 响应超时 和 UnhealthyThreshold 1 以接近您的规格。
有关 ELB 健康检查系统如何工作的更多详细信息,请参阅我对 What does the Amazon ELB automatic health check do and what does it expect? 的回复。【讨论】:
【参考方案2】:TLDR - 在 Nginx 中设置超时。
让我们看看能否解决这些问题。
问题: 客户应该很快得到一些东西。如果是500页就可以了。但是,ELB 当前等待 60 秒直到放弃 (https://forums.aws.amazon.com/thread.jspa?messageID=382182),这意味着需要一分钟才能向用户显示任何内容。
解决方案:
更改 ELB 的超时时间 看起来 AWS 支持将有助于增加超时 (https://forums.aws.amazon.com/thread.jspa?messageID=382182),所以我想您可以要求相反的情况。因此,我们可以看到它不是用户/api 可调的,需要您与支持人员进行交互。这需要一些准备时间,更重要的是,当未来从事该项目的开发人员会对如此短的超时感到惊讶时,这似乎是一个奇怪的调整。
更改nginx服务器的超时时间
这似乎是正确的变化水平。你可以使用proxy_read_timeout
(http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_read_timeout) 来做你正在寻找的东西。将其调整为较小的值(特别是,您可以根据需要将其设置为特定位置)。
更改请求发生的方式。 更改客户端代码的工作方式可能会有所帮助。您可以想象发布一个非常简单的 html/js 页面,该页面 1. ping 以查看工作是否完成,以及 2. 让用户了解进度。这比仅仅抛出 500 页面需要更多的工作。
【讨论】:
【参考方案3】:最近,AWS 增加了一种为 ELB 配置超时的方法。请参阅此博客文章:
http://aws.amazon.com/blogs/aws/elb-idle-timeout-control/
【讨论】:
以上是关于如何为 Elastic Load Balancer 配置自动超时?的主要内容,如果未能解决你的问题,请参考以下文章
Amazon Codedeploy + Elastic Load Balancer - Windows 支持
Elastic Load Balancer 后面的 Elastic beanstalk 实例的 Django ALLOWED_HOSTS 设置
Cloudformation 协助 Elastic Beanstalk 和 Application Load Balancer
AWS - Elastic Load Balancing 是不是真的阻止了 LOAD BALANCER 故障转移?