29

我对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).
4

2 回答 2

22

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

环境是部署到 AWS 资源上的版本。每个环境只运行一个版本,但是您可以在多个环境中同时运行相同或不同的版本。[...] 有关创建的环境和资源的更多信息,请参阅架构概述[强调我的]

此功能对于已经测试/调试单独的版本很有用,但特别是这也支持环境的热交换,请参阅部署具有零停机时间的版本以获取相应的演练:

由于 AWS Elastic Beanstalk 在您更新应用程序版本时会执行就地更新,因此您会遇到一些停机时间。但是,可以通过为您的环境交换 CNAME 来避免这种停机时间。本部分将引导您了解如何使用 AWS 管理控制台、命令行界面或 API 执行 CNAME 交换。[强调我的]

于 2012-07-17T17:09:17.947 回答
10

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

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

这使您可以一次使用新应用程序更新部分队列,确保始终有主机可用于获取流量。

于 2014-11-02T21:02:47.547 回答