【发布时间】:2017-12-09 09:17:55
【问题描述】:
我正在为我的应用程序使用带有应用程序负载均衡器的 Amazon Web Services EC2 容器服务。当我部署一个新版本时,我得到 503 Service Temporarily Unavailable 大约 2 分钟。它比我的应用程序的启动时间多一点。 这意味着我现在无法进行零停机部署。
是否有设置在启动时不使用新任务?或者我在这里错过了什么?
更新:
ALB 目标组的健康检查号如下:
Healthy threshold: 5
Unhealthy threshold: 2
Timeout: 5 seconds
Interval: 30 seconds
Success codes: 200 OK
健康阈值是“在考虑不健康目标健康之前需要连续成功的健康检查次数”
不健康阈值是“连续健康检查失败的次数在考虑目标不健康之前需要。'
超时是“没有响应意味着健康检查失败的时间量,以秒为单位。”
间隔 是“单个目标的健康检查之间的大致时间量”
更新 2: 因此,我的集群由两个 EC2 实例组成,但可以根据需要进行扩展。所需的最小计数是 2。我每个实例运行一个任务,因为我的应用程序需要一个特定的端口号。在我部署(jenkins 运行 aws cli 脚本)之前,我将实例数设置为 4。没有这个,AWS 无法部署我的新任务(这是另一个需要解决的问题)。网络模式为桥接。
【问题讨论】:
-
您的 ALB 到 ECS 健康检查轮询间隔是多少?我的猜测是您在分钟内有这个数字,这会导致 ALB 刷新延迟。
-
@kosa 谢谢你的评论!我添加了目标组健康检查的号码。你觉得间隔太大了吗?
-
5 * 30 秒 = ALB 切换到健康状态需要 2 分半钟,这大致符合您的观察。如果您降低这些数字,您将看到快速响应。
-
@kosa 这不应该意味着我的新实例更长时间处于不健康状态吗?所以一个实例开始时是不健康的,如果间隔更高,它会在以后变得健康吗?到那时,旧实例仍保留在 ALB 中?
-
这是一部分问题,还有一部分是TTL(生存时间)设置,这个设置会缓存DNS设置。这些组合将决定 1) 新实例何时可用 2) 何时转发请求新实例。
标签: amazon-web-services amazon-elb amazon-ecs http-status-code-503