在AWS上设置可靠,单独的磁盘支持服务器

时间:2016-02-23 00:02:26

标签: amazon-web-services amazon-ec2 rubygems aws-ec2

我一直在将一些服务器迁移到AWS,并对可靠性提出疑问。我已经读过实例可以是retired at random,所以我知道我必须使用某种自动缩放组/负载均衡器来设置它们以使它们可靠。非常感谢,亚马逊提供了nice guide来设置网络应用程序。该指南的问题在于维护磁盘状态的“web应用程序”。我正在使用的具体示例是使用maestrodev/geminabox的RubyGems服务器。我很好,因为它有点低可用性(例如,停机一小时),但我不希望后代在不可避免地倒下时必须采取手动步骤。这是我到目前为止所做的:

  1. 为我的gem服务器设置负载均衡器
  2. 设置一个知道如何启动它的自动缩放组,并将其配置为始终保持1个实例
  3. 设置指向LB
  4. 的route53 CNAME
  5. 附加持久EBS卷以存储我上传的实际宝石
  6. 最后一步是我不确定如何在AWS中实现自动化,而且实际上自动缩放的想法似乎几乎从根本上反对它。不过,我不明白为什么DB / S3应该是我唯一允许存储状态的地方,如果我真的不关心扩展到X服务器以进行加载。

    另外......有没有更快的方法来做我想做的事情?这似乎是设置单个服务器的疯狂步骤。

3 个答案:

答案 0 :(得分:1)

我不确定您的应用程序的当前状态。您可以尝试通过EBS管理它,但我认为它一般很复杂(在同一个AZ中附加的限制)。 我可以想象你可以触发将创建EBS快照的lambda(这取决于你将如何管理以后的同步,我猜 rsync 可能是一个很好的解决方案)。 我个人会在S3中存储文件并同步到EBS,假设EBS是更好的解决方案。如果您因任何原因想要避免使用lambda,可以在创建时使用脚本AS执行。

无论采用什么方法,我强烈建议拥有真实文件回购源 - S3 ,因为这非常适合

可能即将推出的弹性文件系统(https://aws.amazon.com/efs/)。它充当对象存储文件系统(想象S3的缩放方式),同时你有NFS接口。

如果您可以避免移动EBS - 您无法连接到多个服务器,您只能使用EBS所在的AZ,而且通常它的运行速度并不快。

答案 1 :(得分:0)

制作CloudFormation模板。我使用Troposphere但是当你使用ruby时,这可能会更好https://github.com/bazaarvoice/cloudformation-ruby-dsl

这可以执行步骤1-4

要保留上传内容的备份,请保留上传所在的EBS卷的常规快照。我会把它作为一个cron工作运行,但有很多方法可以做到这一点。可能更好/更容易将其作为单独的卷

答案 2 :(得分:0)

听起来您对实例recovery

感兴趣

只要您在VPC中使用受支持的实例类型(似乎涵盖最近的类型:c3,c4,m3,m4,t2,r3),并且您不使用任何实例存储卷,那么您可以将自动恢复设置为云监视器警报的操作。通常情况下,这将是状态检查指标(表明底层硬件存在问题)

恢复重新启动实例并将其移至新硬件。显然,这将涉及几分钟的停机时间。这可能无助于影响整个AZ的问题(至少在AZ恢复之前)

如果这还不够,你想坚持原来的方法,那么我会通过以下方式解决这个问题:

  • 定期快照ebs数据卷
  • 更新自动扩展启动配置,以便blockdevicemapping根据该快照指定新卷。

每当您的自动扩展组启动时,您将获得一个附加了最新快照数据的卷(显然您将丢失自上次快照以来的数据)

在制作快照方面,最简单的事情可能是调用aws cli的实例上的cronjob。您可以使用允许它执行此操作的IAM角色配置您的实例。

您的快照可能会以不一致的状态捕获您的应用程序。您可以通过在快照之前立即冻结卷来防止其中的一部分(您可以在快照启动后立即解冻)但最终您需要应用程序的一些合作才能100%确定。