【问题标题】:Autoscaling on EC2 with Rails & Capistrano Deployments使用 Rails 和 Capistrano 部署在 EC2 上自动扩展
【发布时间】:2012-10-29 12:40:20
【问题描述】:

是否有一种通用策略来设置自动缩放脚本以更新 capistrano 部署层次结构中的代码,以便在自动缩放事件上启动 AMI 时从您的存储库中提取代码,以确保在自动缩放机器上运行的提交与非自动缩放实例?

【问题讨论】:

    标签: ruby-on-rails amazon-ec2 amazon-web-services capistrano


    【解决方案1】:

    我运行一个有点像这样的设置。我选择不设置实例在启动时与 git 交互,因为:

    • 我希望实例快速启动(部署 + 捆绑安装可能需要一段时间)
    • 我希望扩展/替换实例以不依赖 GitHub、rubygems 等
    • 我希望扩展实例变得非常简单

    我所做的是我部署的应用程序位于 /var/www/myapp。这实际上是一个单独的 EBS 卷,安装在该位置。文件系统是 xfs,因为您可以使用 xfs_freeze 安全地拍摄已安装卷的 ebs 快照

    部署完成后,在钩子后的 capistrano 中,我对 /var/www/myapp 卷进行快照。然后我更新了自动缩放启动配置的块设备映射,说“当你启动一个实例时,从快照创建一个新卷并将它附加到 /dev/sdf。

    实例在启动时所要做的就是将该设备挂载到 /var/www/myapp,方法是编辑 /etc/fstab 或运行一个超级简单的启动时间脚本。 Bundler 设置为将其 gem 保存在 /var/www/myapp/shared 中,因此 gem 也得到了照顾

    【讨论】:

    • 谢谢弗雷德里克。我喜欢这种设置,因为您与外部提供商隔离。这将需要对我当前的布局进行一些更改,但可能值得投入额外的时间。
    • 如何让 NFS 在中心位置仅保留一份代码库副本。类似这样的东西-> blog.bugsnag.com/autoscaling-capistrano-nfs-runit
    • 至少对我来说,这需要运行一个额外的服务器来提供 nfs(然后担心使其高度可用)
    【解决方案2】:

    以防万一有人掉到这里,我刚刚发现了这个宝石:

    https://github.com/lserman/capistrano-elbas

    这将(如自述文件中所述):

    • 将您的代码部署到连接到给定 AutoScale 组的每个正在运行的实例
    • 部署后,从正在运行的实例之一创建 AMI
    • 将带有新代码的 AMI 附加到新的 AWS 启动配置
    • 更新您的 AutoScale 组以使用新的启动配置
    • 删除由 ELBAS 创建的所有旧 AMI
    • 删除由 ELBAS 创建的任何旧启动配置

    因此它确保自动缩放组的所有实例(那些正在运行的和那些未来)将运行相同的代码。

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 2013-03-12
      • 1970-01-01
      • 2013-07-25
      • 2012-12-20
      • 1970-01-01
      • 2013-09-29
      • 2011-06-08
      • 1970-01-01
      • 2016-03-16
      相关资源
      最近更新 更多