宽限期是什么?- AWS EC2容器服务和弹性负载均衡器

7
当弹性负载均衡器(ELB)与自动扩展组相关联时,可以指定一个宽限期,在此期间,即使EC2实例被ELB标记为不健康,也不会终止新的EC2实例。是否可以指定类似的宽限期,在此期间,即使运行任务的ECS实例已被ELB标记为不健康,其关联的ECS服务也不会杀死和重新启动新的ECS任务?
更新:
在我们当前的用例中,作为ECS任务运行的docker容器包含一个在启动时加载多个缓存的JBoss实例。这些缓存可能需要几分钟才能加载完成。但是,ECS服务在容器启动后立即将容器实例注册到ELB中。这意味着流量可以在容器准备好接受之前路由到新的容器。我们可以增加ELB上的健康检查间隔和“健康/不健康阈值”,以防止ELB将流量路由到实例并且ECS服务在缓存加载完成之前重启容器。但是,增加健康检查间隔和阈值是不可取的,因为如果实例在缓存加载完成后被标记为不健康,ECS服务应尽快重新启动容器(这需要更短的健康检查间隔和更小的阈值)。
因此,是否可以应用宽限期,在此期间,ELB不会将流量路由到新容器,ECS服务也不会重启容器(即使未通过健康检查)?如果无法实现这一点,是否有关于我们用例的解决方案建议?
3个回答

4

1
在与支持团队讨论后,发现ECS无法支持我们当前的用例。
有一个解决方案可以解决我们面临的问题之一。这个解决方案是创建一个单独的、必要的、健康检查容器,在同一个ECS任务中作为实际应用程序容器。健康检查容器的目的是监视应用程序容器,以确定应用程序何时完全启动。如果它检测到应用程序启动失败,它将退出,导致ECS服务循环执行该任务。然后,ELB被配置为对健康检查容器执行其健康检查,该容器将始终通过相关端口报告其正常运行状态。这个解决方案将防止ECS服务因健康检查失败而循环执行ECS任务。
然而,ELB会立即开始将流量路由到应用程序容器。 即使应用程序容器尚未准备好接收流量(例如,因为它仍在等待缓存加载),它也会这样做。 目前,没有办法延迟ELB发送流量到应用程序容器,因为ECS服务不支持优雅期的支持。 我们已经通过通过SQS向应用程序容器提供消息并且只有当他们的缓存完全加载时才从队列中拉取来解决了此问题。 但是,我们有未来的用例(例如提供Web请求)其中这不是可行的选择。 为此,我打算提出一个优雅期的功能请求。
另外,如果有人愿意不使用托管服务,则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)都已支持此选项进行健康检查。

我还在AWS论坛上开了一个帖子询问这个问题:https://forums.aws.amazon.com/thread.jspa?threadID=215740&tstart=0 - iBlocksShaun

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接