如何在不停机的情况下更新和 ECS 服务添加一个额外的负载平衡服务与之对话?
Posted
技术标签:
【中文标题】如何在不停机的情况下更新和 ECS 服务添加一个额外的负载平衡服务与之对话?【英文标题】:How can I update and ECS service adding an addition load balance to which a service talks to without downtime? 【发布时间】:2021-01-21 19:25:09 【问题描述】:我们使用 terraform 来管理我们的 AWS 资源,并拥有将服务从一个负载均衡器更改为两个负载均衡器的代码。
然而, terraform 想要在重新创建服务之前销毁它。 AWS cli 文档指出了原因 - API 只能在服务创建期间修改 LB,而不能在更新时修改。
create-service update-service看来我们需要一个蓝/绿部署,一个 LB 和两个 LB 服务同时存在于同一个集群上。我预计我们需要在此更改之前创建多个任务集和其余的蓝/绿方法(无论如何我们都计划这样做,只是现在没有)
有没有人有这个场景的好例子,或者知道除了完全蓝/绿部署之外的任何其他方法吗?
【问题讨论】:
【参考方案1】:唉,在更新期间无法更改 LB 的数量。服务必须被销毁并重新创建。
理想情况下,使用多个 ECS 集群和一组 LB 进行蓝绿色部署。然后集群 A 可以拥有旧服务,而集群 B 拥有新服务,当我们从蓝色变为绿色时,允许流量从 A 移动到 B。
我们还没有完全实现,但计划很快就会实现。所以,现在,我们将使用经典的停车场切换方法:
在本例中,需要从 1 LB 变为 2 LB 的服务称为 target_service
-
克隆 target_service 成为 target_service2
部署可以与 target_service 或 target_service2 通信的微服务
验证 target_service 和 target_service2 是否都在处理传入的数据和请求
修改 target_service infra-as-code 以从 1 LB 变为 2 LB
部署修改后的target_service(terraform部署工具会销毁target_service,留下target_service2来填补空白,然后部署2个LB的target_service
验证具有 2 个 LBS 的 target_service 是否正常工作并处理请求
销毁并删除不再需要的 target_service2
所以,这是一个类似蓝绿色的部署,虽然不那么优雅。
【讨论】:
以上是关于如何在不停机的情况下更新和 ECS 服务添加一个额外的负载平衡服务与之对话?的主要内容,如果未能解决你的问题,请参考以下文章
使用集群自动缩放器时如何在不停机的情况下实现节点的优雅终止?
如何在不删除适配器的情况下更新数据集以反映数据源中添加的列?