Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 宽限期AWS EC2集装箱服务和弹性负载平衡器_Amazon Web Services_Amazon Elb_Amazon Ecs - Fatal编程技术网

Amazon web services 宽限期AWS EC2集装箱服务和弹性负载平衡器

Amazon web services 宽限期AWS EC2集装箱服务和弹性负载平衡器,amazon-web-services,amazon-elb,amazon-ecs,Amazon Web Services,Amazon Elb,Amazon Ecs,当弹性负载平衡器(ELB)与自动缩放组关联时,可以指定一个宽限期,在此期间,即使新EC2实例被ELB标记为不健康,也不会终止它们。是否可以指定类似的宽限期,在此期间,新的ECS任务不会被其关联的ECS服务终止和重新启动,即使正在运行任务的ECS实例已被ELB标记为不健康 更新: 在我们当前的用例中,作为ECS任务运行的docker容器包含一个JBoss实例,该实例在启动时加载许多缓存。加载这些缓存可能需要几分钟。但是,一旦容器启动,ECS服务就会向ELB注册容器实例。这意味着可以在新容器准备接受

当弹性负载平衡器(ELB)与自动缩放组关联时,可以指定一个宽限期,在此期间,即使新EC2实例被ELB标记为不健康,也不会终止它们。是否可以指定类似的宽限期,在此期间,新的ECS任务不会被其关联的ECS服务终止和重新启动,即使正在运行任务的ECS实例已被ELB标记为不健康

更新:

在我们当前的用例中,作为ECS任务运行的docker容器包含一个JBoss实例,该实例在启动时加载许多缓存。加载这些缓存可能需要几分钟。但是,一旦容器启动,ECS服务就会向ELB注册容器实例。这意味着可以在新容器准备接受流量之前将其路由到新容器。我们可以增加ELB上的健康检查间隔和“健康/不健康阈值”,以防止ELB将流量路由到实例,并防止ECS服务在加载缓存之前重新启动容器。但是,增加健康检查间隔和阈值是不可取的,因为如果在加载缓存后实例被标记为不健康,ECS服务应该尽快重新启动容器(这需要更短的健康检查间隔和更小的阈值)


因此,是否可以应用一个宽限期,在此期间ELB不会将流量路由到新容器,并且ECS服务不会重新启动容器(即使未通过健康检查)?或者,如果不能做到这一点,是否有关于我们用例解决方案的建议?

与支持团队讨论后,发现ECS无法支持我们当前的用例

有一个变通办法可以解决我们面临的一个问题。解决方法是创建一个独立的、基本的健康检查容器,并将其与实际应用程序容器放在同一个ECS任务中。健康检查容器的用途是监视应用程序容器,以确定应用程序何时已完全启动。如果检测到应用程序启动失败,则退出,导致ECS服务循环该任务。然后将ELB配置为对健康检查容器执行健康检查,该容器将始终通过相关端口报告其已启动。此解决方法将防止ECS服务因运行状况检查失败而循环执行ECS任务

但是,ELB将立即开始将流量路由到应用程序容器。即使应用程序容器尚未准备好接收流量(例如,因为它仍在等待缓存加载),它也会这样做。目前无法延迟ELB向应用容器发送流量,因为ECS服务不提供宽限期支持。我们已经设法解决了这个问题,通过SQS向我们的应用程序容器提供消息,并且只有在缓存完全加载时才让它们从队列中拉出。然而,我们有未来的用例(比如服务web请求),这不是一个可行的选择。为此,我打算就宽限期提出一项专题要求


另外,Kubernetes()和Marathon()已经支持此选项进行健康检查,如果阅读此选项的人不愿意使用托管服务。

使用env-var-ECS\u-CONTAINER\u-STOP\u-TIMEOUT


请参见

如果其他人通过谷歌发现自己在这里,请注意,这已添加到AWS中,称为healthCheckGracePeriodSeconds

我还为AWS论坛的这个问题打开了一个线程: