Elastic Beanstalk 应用程序部署上的 504s(用户 -> ELB -> Elastic Beanstalk mod_wsgi)

mar*_*say 5 mod-wsgi amazon-web-services amazon-elb elastic-beanstalk apache-2.4

我有一个 Python Elastic Beanstalk 负载平衡应用程序。以下是用户请求进入 Elastic Beanstalk 应用程序的路径:

user -> Elastic Beanstalk ELB -> Elastic Beanstalk mod_wsgi

问题:

来自新应用程序版本user之后的前 ~2-4 个请求将从eb deployELB 生成 504 错误。

在这些 ~2-4 个生成 504 的请求之后,一切都很好!200 左右。

当 504 发生时,零请求会Elastic Beanstalk mod_wsgi根据/var/httpd/access_log. 在 ELB 决定重新开始工作后,我才看到 200 年代。

我尝试过但不起作用的事情:

  1. 我将Elastic Beanstalk ELB空闲超时增加到 300 秒
  2. 我按照此处的建议将Elastic Beanstalk mod_wsgiapacheKeepAliveTimeout增加到 300 秒:http : //docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/ts-elb-error-message.html

有人可能会说,“就和 504 一起生活吧!”

但是,实际问题是,在我的生产设置中,我CloudFlareuser和之间Elastic Beanstalk ELB。CloudFlare 设置为积极缓存.css.js文件,因为我将 md5 哈希附加到静态文件 URL。当对这些重要文件的请求失败并显示 504 时,CloudFlare 似乎将这些失败缓存为 404。对这些文件的进一步请求 404,从而在每次部署时破坏站点的视觉样式。

使用相同的应用程序版本再次部署 Elastic Beanstalk 应用程序将解决 CloudFlare 404 问题。这不是一个很好的解决方案。我想继续使用 CloudFlare,因为它可以提供出色的透明 CDN,因此摆脱它也不是解决方案。

很难相信只有我一个人遇到了这个问题,但 Google、stackoverflow/serverfault 和 AWS 论坛都没有提供任何解决方案——甚至没有类似的问题报告。我希望我对这种行为的描述能给这里的某个人敲响警钟。提前致谢。

Phi*_*hil 1

我遇到了完全相同的问题,我真的认为这是 Beanstalk 部署程序的错误。

我使用的是具有 2 个实例和批量大小为 1 的“滚动”部署策略,理论上应该可以实现零停机。但实际上,在部署过程中,ELB 仍有大约 10 - 15 秒的时间响应 504。

查看 beanstalk 配置中的“更新和部署”设置。我发现更改为“滚动附加批次”并使用 100% 的批次大小效果很好,并且在更新期间可以实现零停机。

2018 年 10 月更新- 我不知道它已经工作了多久,但 Elastic Beanstalk 滚动更新现在再次正常工作,对我来说停机时间为零。