Customizing/Architecting AWS ELB 实现零停机

Customizing/Architecting AWS ELB to have Zero Downtime

所以前几天我们遇到了一个问题,我们的应用程序负载均衡器背后的一个实例未能通过实例状态检查和系统检查。我们的 ELB 花了大约 10 秒(我们能得到的最短时间)来检测这个并将实例标记为 "unhealthy",但是我们在这 10 秒内丢失了一些流量,因为 ELB 一直将流量路由到不健康的实例.有没有一种解决方案可以避免任何停机时间,或者我是不是太不现实了?

我敢肯定这不是您想听到的答案,但是如果 10s 是不能容忍的,为了尽量减少系统的流量损失,您需要实施自己的健康 check/load平衡解决方案。我的组织也有系统,其中数据包丢失也是不可接受的,而这正是我们需要做的。

这个解决方案是双重的。

  1. 您需要实施自己的负载平衡基础结构。我们选择使用每个服务器具有相同权重的 Route53 加权记录集(TTL 为 1 秒,我们稍后再讲)
  2. 为每个负载均衡的 EC2 实例启动一个 ECS 容器实例,其唯一目的是进行健康检查。它同时运行 DNS 和 IP 健康检查(在 python 中请求库)并将 add/remove Route53 加权记录在发现问题时实时记录。

然而,在我们的测试中,我们发现虽然来自 Route53 的上游 DNS 服务器在删除 DNS 记录时遵守 1 秒 TTL,但它们 "blacklist" 该记录(FQDN + IP 组合)不会返回再次上升最多 10 分钟(我们得到分辨率时间的变化从 1m-10m)。因此您将能够快速进行故障转移,但您必须考虑到重新添加记录最多需要 10 分钟。