【问题标题】:AWS Elastic Beanstalk goes down for a split second on deployAWS Elastic Beanstalk 在部署时出现瞬间中断
【发布时间】:2017-01-05 06:01:46
【问题描述】:

我正在为我的 node.js express.js 应用程序测试 Elastic Beanstalk。当我部署更新时,应用程序会关闭几秒钟,并且我从 ngnix 得到“坏网关”。

这是因为我现在只有 1 个实例吗?我如何为生产做好准备?与零停机时间一样。

【问题讨论】:

    标签: amazon-web-services amazon-elastic-beanstalk


    【解决方案1】:

    即使在具有超过 1 个实例的 Elastic Beanstalk 环境中,您也会得到相同的不良行为。原因是所有实例都可能同时运行更新过程。

    如果您想避免这种停机时间,Elastic Beanstalk 上有一个名为交换 URL 的内置功能。这是蓝绿部署策略的一个非常简单的实现。

    基本上,在蓝绿部署策略中,您有 2 组资源:蓝色资源和绿色资源。假设最初,Blue 资源正在接收和处理生产流量。该策略的工作原理如下:(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 组资源运行(您需要为此付费)。

    【讨论】:

    • 谢谢布鲁诺!非常彻底的回答。这个怎么样:docs.aws.amazon.com/elasticbeanstalk/latest/dg/…
    • 该链接专门讨论环境配置更改 - 例如,当您更改实例类型时(例如,t2.micro 到 m3.large)。这需要更换您的 EC2 实例。滚动更新会告诉 Elastic Beanstalk 不要一次全部替换它们。还有类似的东西叫做“滚动部署”-docs.aws.amazon.com/elasticbeanstalk/latest/dg/…。这绝对是值得研究的事情。与蓝/绿相比,主要区别在于如果部署失败可能更难回滚!这么多选择...
    • 谢谢布鲁诺!是的,AWS 是一个巨大的巨大的东西-ma-tech-thing。学习它很有趣。感谢您清理这些东西!非常感谢:)
    【解决方案2】:

    尝试将部署策略切换为不可变。您可能将其设置为“一次性”,这将更新现有实例并导致您在发生这种情况时遇到停机时间。

    使用不可变部署策略,Elastic Beanstalk 将创建一个新实例并确保它在切换之前运行良好。

    http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.deploy-existing-version.html

    【讨论】:

      【解决方案3】:

      Bruno 的正确想法是使用蓝绿部署来实现零停机时间。

      根据我的经验,一旦您交换了网址,最多可能需要 20 分钟才能将所有活动连接从旧环境转移到新环境。这是因为即使您的 TTL 设置得很低,浏览器通常也会缓存 DNS 长达 15 分钟。

      我监控旧环境,直到连接断开。

      另一个好处是,如果您在这 20 分钟的冷静期内发现新部署的构建有问题,您可以通过再次点击交换 URL 立即“回滚”以切换回之前的环境;)

      【讨论】:

        猜你喜欢
        • 2015-09-20
        • 2020-08-02
        • 2014-12-25
        • 2020-11-10
        • 2020-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-11
        相关资源
        最近更新 更多