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

时间:2013-09-17 23:32:34

标签: elastic-beanstalk

我已阅读有关Deploying Versions with Zero Downtime的AWS文档,又名 CNAME交换

正如yegor256this answer中解释的那样:

  

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

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

当应用程序的两个版本可以同居时,我认为这是可以接受的。

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

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

理想情况下,我想:

  • 始终保持相同的Elastic Load Balancer
  • 让Elastic Beanstalk使用新的应用版本启动一个或多个实例
  • 从ELB中删除现有实例(使用旧的应用版本)
  • 修补数据库
  • 将刚刚启动的实例(使用新的应用版本)添加到ELB

这样可以将停机时间缩短到503 Service Unavailable只有几秒钟,只有在需要应用补丁时才会停止。

这可能吗?或者我没有正确看到整体情况,我错过了一个更简单的解决方案吗?

1 个答案:

答案 0 :(得分:1)

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