注销 ec2 实例时出现 ELB 后端连接错误

ELB backend connection errors when deregister ec2 instances

我编写了一个自定义发布脚本来管理 EC2 自动缩放应用程序的发布。处理过程是这样的...

  1. 根据应用程序 git 标签创建 AMI。
  2. 创建启动配置。
  3. 配置 ASG 以使用新的启动配置。
  4. 查找 ASG 当前所需的容量。
  5. 将所需容量设置为之前容量的 2 倍。
  6. 通过查询 ELB 等待新实例变得健康。
  7. 将所需容量设置回以前的值。

这一切工作得很好,除了每当我 运行 这个,ELB 的监控显示大量后端连接错误。

我不知道为什么会发生这种情况,因为如果为 ELB(它是)启用 "Connection draining" 选项,它应该(根据我的理解)仍然服务当前连接。

我认为 ASG 可能会在连接完成之前终止实例,因此我更改了我的脚本以首先从 ELB 中注销实例,然后等待一段时间,然后再更改 ASG 的所需容量。然而,这没有任何区别。一旦实例从 ELB 中注销(即使它们仍然 运行ning 并且健康),后端连接错误就会发生。

它似乎忽略了连接耗尽选项,并在实例被注销后立即删除连接。

这是我用来注销实例的命令...

aws elb deregister-instances-from-load-balancer --load-balancer-name $elb_name --instances $old_instances

在从 ASG 中删除实例之前,是否有一些首选方法可以从 ELB 中优雅地删除它们?

进一步调查表明,后端连接错误的发生是因为当旧实例从 ELB 中删除时,新实例尚未准备好承担全部负载。它们很健康,但似乎需要更多的保暖。

我正在努力调整健康检查设置,以便在实例开始尝试处理请求之前给它们更多的时间。我可能还需要更改 apache2 设置以使其更快准备就绪。