如何在AWS Elastic Beanstalk部署新版本应用程序期间防止停机



我对Elastic Beanstalk的理解是,当您部署应用程序的新版本时,它会一次将其部署到Amazon EC2实例中(如果您有多个实例)。然而,即使至少有两个实例,当我在部署新的.war时上传它时,我的应用程序也会出现短暂的停机时间,就好像它同时更新它们一样。有没有一种方法可以确保没有停机时间,并且在下一个实例开始之前,一个实例已经完全更新并接受请求:以下是事件的外观。请注意,这是在应用程序上为零负载的情况下进行的,因此随着生产流量的增加,情况只会变得更糟。

INFO
Environment update completed successfully.
INFO
New application version was deployed to running EC2 instances.
ERROR
The application did not respond at the health check URL.
INFO
Waiting for 8 seconds while EC2 instances download the updated application version.
INFO
Deploying version SomethingMore to 2 instance(s).

要在Elastic Beanstalk中实现这一目标,您需要扩展您的部署过程,以促进多个环境(请参阅AWS Elastic豆茎组件):

环境是部署到AWS资源上的一个版本。每个环境只运行一个版本,但是您可以运行相同的版本版本或多个环境中的不同版本。[…]有关环境和资源的更多信息已创建,请参见体系结构概述[强调矿]

此功能对于测试/调试单独的版本非常有用,但特别是这也可以实现环境的热交换,请参阅部署零停机版本以了解相应的演练:

由于AWS Elastic Beanstalk在您更新您的应用程序版本,您将经历一些停机时间。但是,可以通过交换CNAME来避免这种停机时间适用于您的环境。本节介绍如何执行使用AWS管理控制台的命令行进行CNAME交换接口或API[强调矿]

我知道这是一个老问题,但对于像我这样在谷歌上搜索的人来说,Elastic Beanstalk今天(2014年2月11日)发布了滚动应用程序版本部署。

http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.rolling-version-deploy.html?sc_ichannel=em&sc_icountry=全局&sc_icampaigntype=启动&sc_icampaign=em_125873140&sc_idetail=em_14124901705&ref_=pe_411040_125873140_8

这允许您一次使用新应用程序更新部分车队,确保始终有主机可用于接收流量。

最新更新