我和我的团队正在尝试找到为 AWS ECS 实现蓝绿的最佳方法,但我们似乎无法明确回答有关应用程序负载均衡器的一个问题。
到目前为止,最符合我们目标的方法是将蓝色服务和绿色服务部署到单独的目标组中,并更新应用程序负载均衡器上的侦听器。但是,我们有一些运行时间较长的事务,根据本文:
https://aws.amazon.com/blogs/compute/bluegreen-deployments-with-amazon-ecs/
这种蓝绿方法不会优雅地耗尽连接。然而,我最近读到另一位 AWS 工程师发表的一篇文章,与此相反,并声称修改侦听器只会影响新的传入连接,因此可以优雅地耗尽连接。
有人能解释一下当我修改 ELB 的监听器时到底发生了什么吗?
答案1
你应该将 ELB 作为堆栈的一部分即一个 ELB蓝色的堆栈和一个 ELB绿色的堆。
这样,您就可以针对新的 ELB 运行一套完整的验收测试,一旦满意替换 DNS 中的 ELB 名称。这不会影响您的长时间运行会话,因为即使 DNS 发生变化,它们仍会保留与旧 ELB 的连接。
希望有帮助:)
答案2
有关应用程序负载均衡器的 AWS 文档指出当您取消注册目标时,其连接将被耗尽。您可以做的是取消注册目标组中的目标,以便优雅地耗尽连接。当然,这并不像在多个目标组之间进行选择那么理想。
请记住,您也不能在同一个 ELB 中拥有具有相同端口协议的多个侦听器。
正如另一位用户在其回答中所述,您应该在部署中拥有单独的 ELB,并在 Route53 中在它们之间切换。这样,您可以轻松使用路由策略将一部分流量仅发送到适当的 ELB/目标组(例如 80% 发送到蓝色,20% 发送到绿色)。