我正在为我的 node.js express.js 应用程序测试 Elastic Beanstalk。当我部署更新时,应用程序会关闭几秒钟,并且我从 ngnix 收到“坏网关”。
这是因为我现在只有 1 个实例吗?我如何为生产做好准备?就像零停机时间一样。
最佳答案
即使使用具有 1 个以上实例的 Elastic Beanstalk 环境,您也可能会遇到相同的不良行为。原因是所有实例可能会同时运行更新过程。
如果您想避免停机,Elastic Beanstalk 上有一个名为 的内置功能。交换 URL .这是蓝绿部署策略的一个非常简单的实现。
基本上,在蓝绿部署策略中,您有 2 组资源:蓝色资源和绿色资源。假设最初,蓝色资源正在接收和处理生产流量。该策略的工作原理如下:(1)您将应用程序的新版本部署到绿色资源中; (2) 你运行任何你可能想要的热身程序,如果你有的话; (3) 您使用某种“流量管理器”将生产流量发送到您的绿色资源中; (4) 一旦所有流量从蓝色资源迁移到绿色资源,您可以选择关闭蓝色资源。
在 Elastic Beanstalk 中,为此您需要 2 个环境。假设我们有 2 个具有以下名称和 URL 的环境:
Env-Blue
, 带有 URL myapp-prod.elasticbeanstalk.com
. Env-Green
, 带有 URL myapp-staging.elasticbeanstalk.com
. 我们还假设您有自己的域名,
www.myapp.com
, 指向 myapp-prod.elasticbeanstalk.com
.您目前正在 Env-Blue 上运行 v1.0,并且正在努力推出 v1.1。当您准备好部署 v1.1 时,您将其部署到 Env-Green 中——您这样做是因为它是当前的“暂存”环境。然后你可以连接到它,确保它完全按照你的意愿工作。
最后,您在 Elastic Beanstalk 上选择两个环境并选择交换 URL 功能 .您的环境将如下所示:
Env-Blue
, 带有 URL myapp-staging.elasticbeanstalk.com
,运行旧的 v1.0。 Env-Green
, 带有 URL myapp-prod.elasticbeanstalk.com
,运行新的 v1.1。 自
www.myapp.com
仍然指向myapp-prod.elasticbeanstalk.com
,您的用户,他们正在连接到 www.myapp.com
,现在将被发送到运行 v1.1 的 Env-Green。随着用户刷新他们的 DNS 缓存,他们将逐渐迁移到 v1.1。最后一个非常重要的注意事项:要使此策略正常工作,为域记录配置适当的 TTL 非常重要。如果它太长,您的用户可能会将您的 DNS 缓存很长时间,并且迁移需要一段时间。在此期间,您必须保持 2 组资源运行(您将为此付费)。
关于amazon-web-services - AWS Elastic Beanstalk 在部署时会突然停机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37671446/