假设我有一个ELB实例背后的Web服务器。 我想拿下他们中的一半做软件更新。 假设我的应用程序有一些可能更长的请求(比如说因为数据库很慢,最多需要30秒)。 我不想只closures服务器,并留下一个错误的用户。 我可以从ELB中注销实例来阻止任何来自实例的进一步请求,但允许实例在closures之前完成当前请求一段时间? ELB是否仍会转发最近注销的实例的回应?
https://forums.aws.amazon.com/message.jspa?messageID=231571
我们刚刚进行了ELBtesting,并进行了健康检查,并手动从ELB中删除了一个实例,所有现有的连接都几乎立即(大约一秒钟内)被粗鲁地删除。
亚马逊的回应:
我们意识到这种行为会给我们的客户带来的痛苦,这样的反馈有助于我们更好地理解这个问题的真正影响和重要性。 请继续下去。
不要指望快速解决,两年后仍然如此。
因为我最近自己使用了这个function,并且有问题/描述的问题的解决scheme(在现有的评论/答案中没有涉及):
其称为连接排水,可以在ELBconfiguration中设置。 您可以定义一个ELB保持连接打开状态的超时(默认为300秒),然后删除它们。
这里是一篇博客文章,解释如何在您的ELB中设置连接排水: https : //aws.amazon.com/de/blogs/aws/elb-connection-draining-remove-instances-from-service-with-care/
和AWS文档: http : //docs.aws.amazon.com/elasticloadbalancing/latest/classic/config-conn-drain.html
嗯,我不能张贴更多的thant 2链接,因为我缺乏声誉….如果你在github.com上searchawslabs帐户的aws-codedeploy-samples,你会发现从ELB注销实例的shell脚本。