Amazon EC2备份策略

我有几个使用亚马逊EC2的Web服务器/数据库服务器设置。 我目前正在采取所有我的系统和EBS驱动器的每日快照,其中包含我所有的应用程序文件,数据库文件,源代码和数据库备份。 我有一个控制台应用程序按计划运行备份创build。 我的图像是EBS图像。

我正在完成一项任务,在这么多天之后会放弃我的快照。 我想我的问题是,我还可以安排一个完整的图像/ EBS任务吗? 这样,如果服务器出现故障或损坏,我可以启动最新的图像,然后应用最新的快照。

当我正在处理我的备份策略时,我正在使用Jungle Disc来备份我的数据光盘。

我的build议是:

  1. 始终logging和/或编写每个新实例的设置,以便在丢失实例的情况下重新生成软件安装和系统configuration。 通过启动一个新实例并按照程序进行testing。 如果安装需要很长时间,并且需要快速启动实例,则可以使用自定义的专用AMI,但应使用文档化和/或脚本化的过程来构buildAMI本身。

  2. 将您的重要数据保存在单独的EBS卷上,而不要放在根EBS卷上。 这有很多好处,包括使数据更容易移植到新的实例(例如,基于不同的AMI),并更容易在其他实例(例如,快照和新卷)上获取数据的副本。

  3. 创buildEBS数据卷的定期快照。 如果可能/适用,请使用像我的ec2-consistent-snapshot这样的工具来提高您拍摄一致文件系统/数据库快照的机会。 备份AWS / EC2以外的数据,因为您的AWS账户本身是单点故障。

  4. 在重要的实例上不时创build根EBS卷的快照。 虽然这可能会帮助你在事件或EBS卷失败的情况下,那部分是没有那么重要,因为上面的#1和#2。 我这样做的主要原因是创build快照可以降低根EBS卷自身失败的风险。

EBS卷的失败率与自上次EBS快照以来在该卷上修改的块的数量直接相关。

我还应该安排一个完整的图像/ EBS任务吗?

是的,这是可取的。 有一次它救了我,因为内核问题,我不得不重置多次,直到引导磁盘不可读,我只是从最新的快照启动。

如果您有兴趣,我写了一个Java类来快照所有连接的EBS卷,并在一段时间后删除它们。 目前我每周做一次备份,两周后丢弃第三次备份。

https://github.com/stivlo/obliquid-cp/blob/master/src/main/java/org/obliquid/sherd/runner/RequestSnapshots.java

它每次运行只执行一个动作,比如获取或删除一个快照,因为每个小时都要放在一个cron中,以避免在同一时间有数十个快照超载。

我们使用简单而强大的备份策略:基于每天两次运行EC2 EBS实例创build新的AMI,并删除“旧”AMI。 通过API(CreateImage),你可以在创build新的AMI的时候设置标志不重启实例,或者如果你在CreateIImage API调用和冻结文件系统之前使用软件raid-ssh在新内核或xfs_freeze上的最stream行的文件系统上使用“fsfreeze”你使用旧的内核和xfs。

创build“备份”AMI记住所有连接到原始运行的实例EBS磁盘(通过链接创build的快照),并在多个磁盘使用软件突袭的情况下,允许在任何AZ简单地通过一个API调用或通过networking恢复新的实例-接口。