如何在不停机的情况下更新和 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 服务添加一个额外的负载平衡服务与之对话?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不导致停机的情况下部署 Node.js 应用程序

如何在不停机的情况下更改 AWS-RDS 实例类型?

使用集群自动缩放器时如何在不停机的情况下实现节点的优雅终止?

如何在不删除适配器的情况下更新数据集以反映数据源中添加的列?

NPM - 如何在不更新或添加 package.json 中描述的包的情况下安装新包

在不停机的情况下重命名现有列