【问题标题】:dev opsworks - updating the app, will it drainstop apachedev opsworks - 更新应用程序,它会停止 apache
【发布时间】:2013-12-13 12:05:12
【问题描述】:

我的生产环境中有一个自动缩放的环境,当我们在其上更新构建时,这目前是一个严重的破坏,因此我们认为我们最好转移到 AWS 的开发 opsworks 以使流程对我们更容易。 我们不能承受停机时间,现在不能,永远不能,永远不能;更新构建并可能重新启动 apache 的第二次损失会花费一大笔钱。

当基于 AMI 的新 ec2 机器出现新更新时,我们不可能让我们的机器被自动缩放策略终止,实际上,当自动缩放在任何情况下终止机器时,它都不关心您正在运行的请求在那台机器上,它只是将其关闭,而它应该做的是优雅的关闭,通过 apache 上的 drainstop 之类的东西,所以它至少可以首先完成手头的工作。

现在 opsworks 来了,我们计划用它来更自动地更新我们的构建,新的更新推送是否会再次运行配方,事实上我刚刚读到的这一段让我更担心,这是否意味着它不会在新实例上自动更新构建。

修改应用设置后,您必须部署应用。 首次部署应用程序时,部署配方会下载代码并 相关文件到应用服务器实例,然后运行本地 复制。如果您在存储库中修改应用程序,则必须确保 更新的代码和相关文件已安装在您的应用服务器上 实例。 AWS OpsWorks 自动部署当前应用程序版本 新实例启动时。对于现有实例, 但是,情况有所不同:

您必须手动将更新的应用部署到在线实例。

您不必将更新后的应用部署到离线实例 存储支持的实例,包括基于负载和基于时间的实例; AWS OpsWorks 会自动部署最新的应用程序版本 已重新启动。

您必须重新启动离线 EBS 支持的 24/7 实例并手动部署 应用程序; AWS OpsWorks 不会在这些上运行 Deploy 配方 重启时的实例。

您无法重新启动离线 EBS 支持的基于负载和基于时间的 实例,所以最简单的方法是删除离线实例 并添加新实例来替换它们。

因为它们现在是新实例,AWS OpsWorks 将自动 启动时部署当前应用版本。

【问题讨论】:

    标签: deployment amazon-web-services amazon-ec2 aws-opsworks


    【解决方案1】:

    首先,让我声明一下,我大约 2 周前才开始研究 OpsWorks。所以我离专业人士还很远。但这是我对其工作原理的理解:

    我们需要区分实例存储支持的实例和 EBS 支持的实例:

    • 一旦关闭,实例存储就会与实例一起消失。因此,再次提起它,从零开始。它必须再次下载最新的应用程序并将其部署。
    • 对于 EBS 支持的实例,部署的代码保持完整(持久)超过它所附加的实例的生命周期。因此,让 EBS 支持的实例恢复活力,不会自动更新您的应用程序。旧版本仍处于部署状态。

    因此,您首先需要决定使用哪种实例类型。在所有实例上使用 相同 版本的应用程序通常是个好主意。因此,我建议使用 EBS 支持的实例,这些实例在启动时不会自动部署新版本。在这种情况下,部署新版本意味着启动 全新 实例,这些实例将自动运行新代码(因为它们是新的),然后销毁旧实例。您将有很短的时间让新旧代码并行运行。

    但是,如果您希望始终部署最新版本,并且可以承受在较长时间内单个实例之间存在差异的风险(例如,根据实例最初启动的时间部署不同的应用版本),那么实例商店支持可能是您的选择。每次启动新实例时,都会部署最新最好的代码。如果您想更新现有实例,只需启动新实例并终止现有实例即可。

    这两种策略都应该为您带来零停机时间的预期效果。不同之处在于何时以及如何部署最新代码。将此与HAProxy 结合使用,以更好地控制将使用哪些服务器。例如,您可以逐渐将流量从旧实例转移到新实例。

    【讨论】:

    • 我的观点恰恰相反:仅将 EBS 用于数据库实例。当您想要部署新版本的代码时,只需“循环队列”(启动新实例并关闭旧实例。)如果您想要更多控制权,那么放弃 ELB 并使用 nginx/HAProxy。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-06
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-18
    • 1970-01-01
    相关资源
    最近更新 更多