【问题标题】:AWS Elastic Beanstalk health check issueAWS Elastic Beanstalk 运行状况检查问题
【发布时间】:2018-11-07 14:23:46
【问题描述】:

我的网络应用程序是 Django,网络服务器使用 Nginx,使用 Docker 映像和 Elastic Beanstalk 进行部署。

通常没有问题,但是随着负载均衡器扩展 EC2,我的 Web 服务器变成 502 Bad Gateway。

我查看了 Elastic Beanstalk 应用程序日志,大约 16% 的请求返回 5xx 错误,此时负载均衡器扩展 EC2,导致 Web 服务器转换到 502 Bad Gateway 状态,而 Elastic Beanstalk 应用程序转换到 Degraded 状态.

这是负载均衡器执行健康检查时的常见问题吗?如果没有,如何关闭健康检查?

我附上一张捕获的图像以供参考。

【问题讨论】:

  • 感谢您编辑我的帖子。
  • 你找到解决办法了吗?
  • 您有应用程序监控吗?你知道实际抛出了什么错误吗?
  • @Seung 只是实例刚启动的时候吗? (一段时间后,健康检查是否恢复正常?)
  • 负载均衡未扩展,Auto Scaling 服务扩展。 LB 只删除坏实例。您能否澄清问题以及您在哪种情况下看到它

标签: python django amazon-web-services deployment amazon-elastic-beanstalk


【解决方案1】:

据我所知,502 Bad Gateway 错误只能通过手动检查您网站上的主要链接以及是否可以通过简单的 GET 请求访问来缓解。

就我的网站而言,我的登录页面和关于页面存在一些问题(遗憾的是,它约占我网站的 33%),这就是为什么在上传到 EC2 后,我在运行状况检查时收到 5xx 错误。我通过简单地使链接在服务器上工作来解决了这个问题(有一些功能只在 localhost 而不是在 AWS 上运行,所以我修复了这个问题并在运行状况检查中获得了 OK 状态)

我认为删除运行状况检查没有任何意义,因为它会提供有关您网站的重要信息,而且您可能不希望您的网站出现无法访问的页面。

跟踪日志以缩小问题范围。

希望你能找到解决办法。

【讨论】:

  • 感谢您的回复。从当前服务器返回的状态 500 错误已得到修复,并且由于 Nginx 的 access.log 中没有请求历史记录而返回状态 500 错误。但是,ELB 健康检查失败,实例扩展,导致服务器进入 502 Bad Gateway 状态。
  • 我检查了 EB 环境日志,“环境运行状况已从正常转变为降级。对 ELB 的 50% 的请求以 HTTP 5xx 失败(3 分钟前)。”
【解决方案2】:

在部署您的代码时,您将收到 502,因为 EC2 实例未能通过运行状况检查调用。您需要调整负载平衡运行状况检查默认设置,以便有足够的时间完成部署。如果在每次部署后还重新启动服务器,请为部署留出更多时间。

AWS 负载均衡器每 N 秒使用您指定的路径向每个已注册实例发送一个运行状况检查请求。默认间隔秒数为 30 秒。如果您运行的任何实例的运行状况检查失败 N 次(默认为 2 次),则运行状况将更改为“降级”或“严重”,具体取决于未响应实例的百分比。

  1. 发送应返回 200 响应代码的请求。默认为'/index.html'
  2. 在超时前等待 N 秒(默认 5 秒)
  3. N 间隔秒后重试(默认 30 秒)
  4. 如果 N 次连续调用失败,则将健康状态更改为警告或严重(默认不健康阈值为 2)
  5. 连续N次调用成功后,健康状态返回OK(默认为10)。

使用默认设置,如果任何 Web 服务器实例关闭超过一分钟(2 次尝试,每次 30 秒),则视为中断。恢复正常状态需要 5 分钟(每 30 秒尝试 10 次)。

有关详细说明和配置选项,请查看 AWS 文档:Configure Health Checks for Elastic Load Balancing

【讨论】:

  • 感谢您的回复。我试试看。
猜你喜欢
  • 2015-11-16
  • 2020-11-10
  • 2018-11-02
  • 2016-06-14
  • 1970-01-01
  • 2019-07-28
  • 2021-01-16
  • 2013-11-13
  • 2017-12-30
相关资源
最近更新 更多