如何避免使用 Elastic Beanstalk 部署(包括数据库补丁)停机



我已经阅读了有关零停机时间部署版本(又名 CNAME 交换)的 AWS 文档。

正如 yegor256 在这个答案中解释的那样:

它唯一要做的就是交换两个 CNAME。例如,您有一个具有 CNAME foo-1.example.com 的环境 foo-1,另一个具有 CNAME foo-2.example.com 的 foo-2。交换操作环境 foo-1 将在 http://foo-2.example.com 响应。

所以问题是,你不是直接切换整个流量,而只是切换新流量。现有流量将继续使用以前的 CNAME 条目长达 TTL 秒,使两个版本在这短时间内共存(根据 Arun Kumar 的说法为 300 秒或更长时间)。

当两个版本的应用程序可以共存时,这对我来说似乎是可以接受的。

但是,我们应用程序的某些版本包含数据库补丁,必须在旧版本取出后立即运行,并且在引入新版本之前运行。

因此,看起来CNAME交换对于我们正在做的事情来说还不够好,因为旧的应用程序版本会在数据库修补后中断。

理想情况下,我想:

  • 始终保持相同的弹性负载均衡器
  • 让 Elastic Beanstalk 使用新的应用程序版本启动一个或多个实例
  • 从 ELB 中删除现有实例(使用旧应用程序版本)
  • 修补数据库
  • 将新启动的实例(使用新的应用程序版本)添加到 ELB

这将最大限度地减少停机时间,只有当有补丁要应用时,才有几秒钟503 Service Unavailable

这可能吗?还是我没有正确看到整个画面,我是否错过了更简单的解决方案?

以下是一些

可用于在 Elastic Beanstalk 上执行零停机部署的其他策略: http://www.hudku.com/blog/demystified-zero-downtime-with-amazon/

相关内容

最新更新