【问题标题】:How to change app on multiple ec2 instances?如何在多个 ec2 实例上更改应用程序?
【发布时间】:2012-11-07 18:33:43
【问题描述】:

我是 AWS 新手。谁能指出我如何更新驻留在多个 ec2 实例上的应用程序的正确方向?

我找到了这个答案:How do I update multiple EC2 instances that are load-balanced? 指向这篇文章:http://linuxforlovers.wordpress.com/2009/04/11/sharing-amazon-elastic-block-store-among-multiple-instances/ 这篇文章已经更新,并说明您可以从 EBS 支持的 AMI 启动,这些 AMI 目前基本上可以无限大。

这是否意味着我可以在 ec2 实例上加载应用程序,创建保存到 ebs 卷的 ami,然后从 EBS 支持的 ami 启动,而不是使用我的应用程序更新的 ebs 实例?

这是否意味着我将启动配置设置为带有 ami 而不是 ami 的 ebs 音量?

本质上,我的问题是,如何更新在多个 ec2 实例上运行的应用程序,而无需登录每台机器并更改应用程序?

谢谢!

【问题讨论】:

    标签: amazon-ec2 amazon-ebs amazon-elb


    【解决方案1】:

    您可以使用AWS CodeDeploy 在多个 EC2 上更新您的应用程序。它通过逐步跨实例工作并允许应用程序保持可用并继续为流量提供服务来最大限度地减少停机时间。

    您还可以跟踪部署、停止、回滚。如果您的应用在 EC2 上运行,则它是免费的。

    【讨论】:

      【解决方案2】:

      查看capistrano,这是一个用 Ruby 编写的部署工具,可以准确解决您描述的问题。

      虽然它是一个 Ruby 工具,但它可用于部署非 Ruby 的应用程序。

      它管理同时通过 SSH 连接到多个服务器、更新代码并执行为每个服务器的角色量身定制的部署任务。

      【讨论】:

        【解决方案3】:

        现在OpsWorks 已经发布,场景发生了一些变化。看看那个,因为它是亚马逊支持的一种做你想做的事的方式——不过可能对你的需求来说有点过头了。

        【讨论】:

          【解决方案4】:

          我认为实现这一点的方法是在推出每个新软件时创建一个新的 ami。然后为每个 ami 构建一个新的启动配置。然后,您使用新的启动配置更新您的扩展组。

          【讨论】:

            【解决方案5】:

            Netflix 使用您描述的方法,每个新的应用程序版本都会创建自己的 AMI,然后他们使用他们的开源 Asgard 软件进行滚动重启、终止旧实例并生成运行新 AMI 的新实例。

            这是一种完全有效的工作方式,但对于我的大部分工作来说,这太过分了。 AMI 的构建和管理通常比简单地将新软件放在服务器上更麻烦。我主要使用capistrano 来自动启动代码(这主要涉及执行git pull)和重新启动网络服务器,我使用chef 来更改服务器配置和第三方软件安装。如果涉及的系统更改足够多,我将刻录一个新的 AMI 并使用它重新启动。

            所以我认为这取决于您的工作流程的哪些方面正在造成瓶颈。如果只是部署自动化,请查看 capistrano 和 chef。如果更新您的应用程序涉及很多摩擦和部署麻烦,那么 AMI 可能是一个不错的选择。无论哪种方式,我总是确保我的厨师食谱可以根据任何特定的软件版本规范构建服务器。希望这会有所帮助。

            【讨论】:

            • 我只想在 ec2 实例上推送我的应用程序的新版本,我没有其他服务器配置更改。如何在一处更改我的应用并将其更新到我的所有实例?
            • 好吧,要做到这一点,您可以将其中一个实例设为 NFS 服务器,导出一个卷并让所有实例共享该文件系统。但是,通过git pullrsync 命令或scp 命令之类的方式,让每台服务器获得相同的代码更新的过程自动化要容易得多。
            • 这是否意味着在某个时间点x 我们将不可避免地有一些运行旧代码库的应用程序实例,直到它们使用git pull 或类似的东西更新自己?如何处理?假设引入了重大更改并且instance A 已经取消了更改,而instance B 还没有……如果instance A 出于某种原因必须与instance B 交谈,反之亦然,那么它可能在两个实例都使用相同的代码库更新之前,事情不会按预期工作......你将如何处理这种情况?谢谢!
            猜你喜欢
            • 2014-05-11
            • 2013-05-09
            • 2019-09-14
            • 1970-01-01
            • 1970-01-01
            • 2014-01-28
            • 2020-11-14
            • 2012-11-10
            • 1970-01-01
            相关资源
            最近更新 更多