AWS Elastic Beanstalk运行状况检查问题

时间:2018-05-29 02:59:37

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

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

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

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

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

我附上了一张拍摄的图像作为参考。

enter image description here

2 个答案:

答案 0 :(得分:2)

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

如果是我的网站,我的登录页面和“关于”页面存在一些问题(可悲的是,这大约是我网站的33%),这就是为什么在上传到EC2之后,我在运行状况检查时出现了5xx错误。我通过简单地使链接在服务器上工作来解决了这个问题(有些功能仅在本地主机上运行,​​而不在AWS上运行,所以我将其修复并在运行状况检查中得到了确定的状态)

我认为删除健康检查没有意义,因为它可以提供有关您网站的重要信息,并且您可能不希望您的网站具有无法访问的页面。

保留日志记录以缩小问题范围。

希望您能找到解决方法。

答案 1 :(得分:1)

在部署代码时,您将得到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服务器实例停机超过一分钟(每次尝试两次,每次30秒),则将其视为中断。恢复状态为“ OK”需要5分钟(每30秒尝试10次)。

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