我正在使用EC2容器服务和应用程序负载均衡器作为我的应用程序。当我部署一个新版本时,我得到503服务暂时不可用大约2分钟。它比我的应用程序的启动时间要多一点。这意味着我现在不能进行零停机部署。
在新任务启动时是否有不使用新任务的设置?或者我在这里错过了什么?
更新:
ALB目标群体的健康检查编号如下:
Healthy threshold: 5
Unhealthy threshold: 2
Timeout: 5 seconds
Interval: 30 seconds
Success codes: 200 OK健康门槛是“在考虑不健康目标健康之前,需要连续进行多少次健康检查”
不健康阈值是“在考虑目标不健康之前所需的连续健康检查失败次数”。
超时是“以秒为单位的时间量,在此期间没有响应意味着健康检查失败。”
Interval是“个体目标健康检查之间的大致时间”。
更新2:所以,我的集群由两个EC2实例组成,但是如果需要的话可以扩展。我每个实例运行一个任务,因为我的应用程序需要一个特定的端口号。在部署之前(jenkins运行aws脚本),我将实例数设置为4个。否则,AWS无法部署我的新任务(这是另一个需要解决的问题)。网络模式就是桥梁。
发布于 2017-07-20 13:04:53
因此,问题似乎在于任务定义中容器设置的端口映射。在我使用80作为主机和8080作为集装箱港口之前。我想我需要使用这些,但是主机端口实际上可以是任何值。如果将其设置为0,则ECS将在32768-61000范围内分配一个端口,因此可以向一个实例添加多个任务。为了使其工作,我还需要更改我的安全组,让流量从ALB到这些端口上的实例。
因此,当ECS能够在同一个实例上运行多个任务时,50/200 min/最大健康百分比是有意义的,并且可以在不需要添加新实例的情况下部署新的任务修订。这也确保了零停机时间的部署。
谢谢大家的提问或评论!
发布于 2017-07-12 16:44:01
既然您正在使用AWS ECS,我可以问一下服务的“最低健康百分比”和“最大健康百分比”是什么?
确保您的“最大健康百分比”为200,“最低健康百分比”为50,这样在部署期间,您的所有服务都不会下降。
请查阅这两个术语的文件定义:
最大百分比提供了部署期间运行任务数量的上限,使您能够定义部署批处理大小。 最低健康百分比为部署期间运行的任务数量提供了一个较低的限制,使您能够在不使用额外群集容量的情况下进行部署。
“最低健康百分比”的限制为50,将确保在部署新版本的容器之前,只杀死一半的服务容器,也就是说,如果服务的期望任务值为"2“,而部署时只有"1”旧版本容器将首先被杀死,新版本部署后,第二个旧容器将被杀死,新版本容器将被部署。这将确保在任何给定的时间都有处理请求的服务。
类似地,“最大健康百分比”的上限为200,这告诉ecs代理,在部署期间的给定时间,该服务的容器最多可以达到所需任务的两倍。
如有任何问题,请通知我。
发布于 2017-07-12 22:15:05
使用您的设置,您的应用程序启动应该需要超过30秒,才能通过2次健康检查,并被标记为不健康(假设第一次检查后,您的应用程序立即关闭)。它将需要至少2分钟,最多3分钟,然后才能再次被标记健康(在最好的情况下,在你的应用程序恢复后立即进行第一次检查,或者在最坏的情况下,在应用程序恢复之前立即进行第一次检查)。
因此,一个快速和肮脏的修正是增加不健康的阈值,这样它就不会在更新期间被标记为不健康。并可降低健康阈值,使其再次被标记为健康更快。
但是如果你真的想达到零停机时间,那么你应该使用你的应用程序的多个实例,并告诉AWS按照Manish Joshi的建议进行部署(这样你的ELB后面总是有足够的健康实例来保持站点的运行)。
https://stackoverflow.com/questions/44930719
复制相似问题