iBl*_*aun 7 amazon-web-services amazon-ecs amazon-elb
当弹性负载平衡器(ELB)与自动缩放组关联时,可以指定宽限期,在此期间新的EC2实例将不会被终止,即使它们被ELB标记为不健康.是否可以指定类似的宽限期,在此期间,即使正在运行任务的ECS实例已被ELB标记为不健康,新的ECS任务也不会被其关联的ECS服务终止并重新启动?
更新:
在我们当前的用例中,作为ECS任务运行的docker容器包含一个JBoss实例,它在启动时加载了许多缓存.这些缓存可能需要几分钟才能加载.但是,一旦容器启动,ECS服务就会使用ELB注册容器实例.这意味着可以在准备接受流量之前将流量路由到新容器.我们可以在ELB上增加运行状况检查间隔和"健康/不健康阈值",以防止ELB将流量路由到实例,并防止ECS服务重新启动容器,直到缓存已加载.但是,不希望增加运行状况检查间隔和阈值,因为如果在加载缓存后将实例标记为运行状况不佳,
因此,是否可以应用宽限期,在此期间ELB不会将流量路由到新容器,并且ECS服务不会重新启动容器(即使它未通过运行状况检查)?或者失败了,对于我们的用例解决方案有什么建议吗?
与支持团队讨论后,发现 ECS 无法支持我们当前的用例。
有一种解决方法可以解决我们面临的问题之一。该解决方法是创建一个单独的、必要的运行状况检查容器,并在与实际应用程序容器相同的 ECS 任务中。健康检查容器的目的是监视应用程序容器以确定应用程序何时完全启动。如果检测到应用程序启动失败,则会退出,导致 ECS 服务循环执行任务。然后,ELB 配置为针对运行状况检查容器执行运行状况检查,该容器将始终通过相关端口报告其已启动。此解决方法将防止 ECS 服务因运行状况检查失败而循环执行 ECS 任务。
但是,ELB 将立即开始将流量路由到应用程序容器。即使应用程序容器尚未准备好接收流量(例如,因为它仍在等待加载缓存),它也会这样做。目前,无法延迟 ELB 将流量发送到应用程序容器,因为 ECS 服务不提供宽限期支持。我们通过 SQS 向应用程序容器提供消息,并且仅在缓存完全加载时才从队列中提取消息,从而成功解决了这个问题。然而,我们在未来的用例(例如服务网络请求)中这不是一个可行的选择。为此,我打算提出宽限期的功能请求。
顺便说一句,Kubernetes(http://kubernetes.io/v1.0/docs/user-guide/walkthrough/k8s201.html#application-health-checking)和Marathon(https://mesosphere.github.io/ ) marathon/docs/health-checks.html)已经支持此健康检查选项,如果阅读此内容的人很高兴不使用托管服务。
| 归档时间: |
|
| 查看次数: |
934 次 |
| 最近记录: |