AWS ECS Fargate:应用程序负载均衡器返回 503 并带有奇怪的模式
Posted
技术标签:
【中文标题】AWS ECS Fargate:应用程序负载均衡器返回 503 并带有奇怪的模式【英文标题】:AWS ECS Fargate: Application Load Balancer Returns 503 with a Weird Pattern 【发布时间】:2020-02-20 06:12:03 【问题描述】:(注意:我已经修改了原来的帖子,因为我现在收集了更多数据。)
在几周没有问题之后,今天才开始发生一些事情,我想不出我所做的任何改变会导致这种情况。
我有一个 Spring Boot 应用程序位于 nginx 代理(全部 Docker 化)后面,所有这些都位于 AWS ECS Fargate 集群中。
部署后,我注意到——随机(例如,有时这不会发生)——对 Spring Boot 提供的服务的调用将 503(在 NGINX 代理之后)。它似乎在每秒部署一次时执行此操作,随后的部署解决了这个问题,即对服务器的调用将成功一段时间(可能是几秒钟;可能是几分钟),然后停止。
我查看了“HealthyHostCount”,并注意到当我收到 503 并且我的主要目标群体说它在任何一个 AZ 中都没有注册/健康的主机时。我不确定什么会导致 TG 取消注册目标,尤其是因为后续部署似乎“修复”了该问题。
任何见解/帮助将不胜感激。
提前致谢。
更新 看起来好像它似乎发生在我从 CodeDeploy 的蓝/绿部署中“终止原始任务集”之后。我想知道这是否是 AZ 问题,即我没有指定足够的任务来同时运行它们。
【问题讨论】:
你有多少个 docker 容器?也许是一个子集导致了问题 在这个集群/服务中,有三个容器。不过,我看不出它们会如何影响事物,特别是因为 Spring Boot 容器响应执行器端点,但同一容器中没有其他端点。 如果有帮助的话,还有一个 Spring Boot 容器、一个 NGINX 容器和一个 Datadog 代理容器。 您是否为您的 Fargate 服务配置了负载平衡规则入站侦听器? @QuỳnhNguyễn 我很确定我做到了,因为它一直到今天都完美无缺。我想不出有什么改变会影响到这一点。事实上,Spring Boot 应用程序中唯一的代码更改是检查两个装箱的 Long 对象的相等性(但我已经更改了更多并且相同的行为仍在继续)。 【参考方案1】:如果其他人在为现有应用创建新环境后遇到此问题,请确保配置安全组。我的环境超时(并且运行状况不佳),因为我的网页无法访问 AWS 上的数据库入站规则。
如果您能够连接到您的应用中未连接到相同网络服务/数据库的 url,您可以查看这是否是您的问题。
【讨论】:
【参考方案2】:事实证明这是我如何配置我的一个目标组和/或 ALB 的问题,虽然确切的问题是什么,但我无法确定,因为我重新创建了 TG 和服务从头开始。
如果让我猜的话,我猜我的 TG 没有配置正确的端口,或者 ALB 的规则/侦听器错误。
【讨论】:
【参考方案3】:我认为您的服务很可能未能通过 TargetGroup 的运行状况检查。
当 TargetGroup 确定现有目标不健康时,它将取消注册它,这将导致 ECS 随后启动一个任务来替换它。与此同时,您通常会看到这样的网关错误。
在 ECS 页面上,单击您的服务,然后单击“事件”选项卡...如果我是正确的,您会在此处看到有关任务停止原因的消息,例如“不健康”或“健康检查超时”。
原因可能很多。一个过载的集群(Fargate 可能不是这种情况)、没有足够的资源、一个耗尽所有内存或 CPU 的失控请求。
您的情况闻起来就像一个启动缓慢的问题。 ECS Web 服务有一个“健康检查宽限期”……也就是说,在健康检查开始之前要等待一段时间。如果您的容器在首次启动时启动时间过长,则前几次健康检查可能会失败并导致任务“循环”。如果您的镜像特别大,新部署可能会更慢,因为 ECS 主机必须下载镜像。一般来说,Fargate 比 EC2 主机要慢一些,因为它设置网络的方式有开销。如果启动缓慢是您的问题,您可以尝试增加此宽限期,但还应该研究如何加快容器启动时间(减小图像大小,其他 nginx 调整以加快初始化等)。
【讨论】:
感谢您的回复。是的,我也是这么想的,但没有看到任何说明为什么目标在事件中被取消注册。我还将健康检查宽限期设置为 2 分钟。您仍然很可能是对的,但奇怪的是所有其他部署都有效。下次我这样做时,我会密切关注事情。 您将图像托管在 ECR 还是 dockerhub 上?我想知道ECS是否偶尔无法下载图像。如果您查看已停止的任务并单击该任务并查看失败原因,您可以在下一次失败时看到这一点。这些可能很难找到,因为停止的任务很快就会收获,尤其是在 FARGATE。 我会记住这一点,尽管我确实看到新集群启动并工作了一段时间。 虽然我应该说,是的,图像在 ECR 中。以上是关于AWS ECS Fargate:应用程序负载均衡器返回 503 并带有奇怪的模式的主要内容,如果未能解决你的问题,请参考以下文章
AWS ECS 中的 Fargate 网络服务器在空闲期后响应时间很长(但有时没有)
AWS 使用 Fargate 对 ECS 服务的多个端口进行负载平衡