【问题标题】:How to deploy to autoscaling group with only one active node without downtime如何在不停机的情况下部署到只有一个活动节点的自动缩放组
【发布时间】:2015-08-13 14:41:50
【问题描述】:

关于 AWS 自动缩放 + 部署有两个问题我无法明确回答:

  1. 我目前正在尝试找出部署到 ELB 后面的 EC2 实例的最佳策略,该 ELB 是自动缩放组中唯一没有停机的成员。

现在 EC2 设置将通过 puppet 完成,包括应用程序的部署,由 jenkins 成功构建后触发。

我发现的最佳解决方案是检查每个脚本在 ELB 上注册了多少实例。如果注册了一个,则生成一个新的,它在启动时运行 puppet(新节点将是最新的)并杀死旧节点。

  1. 如何在不交付两个不同版本的应用程序的情况下进行部署(在 ELB 后面自动扩展 EC2)?

可能的解决方案:检查每个脚本有多少 EC2 实例注册到 ELB,生成相同数量的实例,注册所有新实例并取消注册所有旧实例。

我使用 AWS 的经历告诉我,AWS 可以为所有事物提供服务。那么是否有任何服务可以满足我的要求并且我的解决方案不方便?

【问题讨论】:

  • 如果您能够使用 Elastic Beanstalk,它是负载均衡器 + 扩展组即服务。它具有滚动更新功能,这就是您在此处描述的内容。问题是,您是否可以使用 Beanstalk 部署您的系统。 Beanstalk 现在也支持 Docker。

标签: amazon-web-services deployment autoscaling


【解决方案1】:

您可以使用自己的 ELB 创建一个全新的环境,当它准备就绪并经过检查时,您可以将 DNS 记录切换到新的 ELB。

无论如何,在短时间内(60 秒左右,取决于您的 DNS 记录的 TTL),一些用户会看到您的旧版本,而另一些用户会看到新版本。

【讨论】:

  • 好主意。此时我的目标是更新机器,而不是创建和配置它们。
【解决方案2】:

最终有两种可能的解决方案。他们俩都将暂时交付两个版本的应用程序。

  1. 使用 AWS CodeDeploy 执行顺序部署(一个接一个)。该解决方案提供了回滚到以前状态的可能性,并且可以直观地显示部署的状态和结果。

  2. 创建一个 python 脚本来获取注册的节点(使用 Boto)并在它们上运行适当的 puppet 脚本(使用 Fabric)。此解决方案提供了对部署的更多控制,但需要一些时间来构建这些脚本。也可能有错误..

现在我选择 AWS CodeDeploy,因为它已经可用并且 - 希望 - 经过良好测试。

【讨论】:

    猜你喜欢
    • 2019-10-06
    • 1970-01-01
    • 1970-01-01
    • 2017-03-05
    • 1970-01-01
    • 2020-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多