如何手动耗尽 EC2 实例的 ELB 连接?

如何手动耗尽 EC2 实例的 ELB 连接?

我已为 ELB 启用连接耗尽功能。根据以下文档:http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/TerminologyandKeyConcepts.html#conn-drain, A注销或者不良实例将保持现有连接打开:

连接耗尽会导致 ELB 负载均衡器停止向取消注册的实例或不健康的实例发送新请求,同时保持现有连接保持打开。

我想对 ELB 中的 EC2 节点进行一些维护。最好能手动将它们从轮换中移除。我尝试过让健康检查失败并手动从 ELB 中删除 EC2 实例。这两种操作都会终止与实例的现有连接。

如何手动将 EC2 实例设置为取消注册或不健康状态,以便它继续服务现有连接但不接受新的连接?

答案1

您或许可以设置一个新的安全组,拒绝来自 ELB 的入站连接但允许出站连接返回。

当您需要进行维护时,您可以将受影响的 EC2 实例切换到这个新的安全组并等待剩余的连接断开。

我唯一不确定的是更改安全组是否会终止现有连接。我不相信会,但我还没有测试过。

答案2

连接耗尽仅适用于网络级别,ELB 不知道您的会话状态。请参阅此旧答案。ELB 是否基于 tcp 进行消耗?

答案3

如果您的实例位于自动扩展组中,您可以选择使用 将它们置于维护状态,aws autoscaling enter-standby并使用 将它们退出维护模式aws autoscaling exit-standby。这将触发负载均衡器耗尽连接。

如果它们不在自动扩展组中,则必须取消注册并重新注册它们。如果您想了解如何执行此操作的良好示例,可以查看此处的 CodeDeploy 示例:https://github.com/aws-samples/aws-codedeploy-samples如果实例位于自动缩放组中,此代码将自动将实例置于维护模式,如果不在,它将从 ELB 中删除该实例,并在更新结束时将其再次添加到所有目标组。

相关内容