AWS有一个很强大的功能,就是snapshot,翻译过来就是对EBS进行快照。通俗的说,即是对整个硬盘进行完整的镜像备份。如此一来,在其中一台EC2挂掉的时候,我们迅速的另起一台EC2,并将通过快照恢复的EBS挂载到新的实例上,即可完成新主机的服务的切换和恢复。snapshot用于非root或者非C盘的数据备份是极好的。然而,一旦涉及到root或者C盘,就会有一些坑了。所以,官方的推荐方法,是若需要针对C盘或者Root这类系统数据进行备份,请使用AMI。

AMI底层的实现其实也依赖snapshot的机制。只是AMI做了进一步的抽象和智能化,以便作为一个更加高效特殊的服务提供给客户:例如,可以customize自己的AMI,然后在启动EC2时,指定对应的AMI作为root或者C盘的数据来源。所以,一个好的practice,就是将操作系统文件和部分关键软件(如apache,mysql)和对应的配置的文件放置在根目录,做成AMI。这部分的数据有一个特点,就是不会经常变动。这样依此新启动的实例在一开始就是相当于是安装好了所有的软件并且配置好。省却了很多工作。至于其他的经常读写变动的数据,则放置在其他EBS做snapshot备份即可。新启动实例时,直接mount就好。

一般而言,snapshot比AMI更加快速,并且更加节省空间(Depending on the size of the volumes, it can take several minutes for the AMI-creation process to complete (sometimes up to 24 hours).You may find it more efficient to create snapshots of your volumes prior to creating your AMI. This way, only small, incremental snapshots need to be created when the AMI is created, and the process completes more quickly (the total time for snapshot creation remains the same))

但是snapshot和AMI都会面临一个问题,就是数据一致性和完整性(Integrity & consistency)。在不关机的情况下做备份,会出现一定的问题:

对于snapshot,文档中这样描述[3]:However, snapshots only capture data that has been written to your Amazon EBS volume at the time the snapshot command is issued. This might exclude any data that has been cached by any applications or the operating system.

对于AMI,文档中这样描述[1]:If you choose No reboot, we can't guarantee the file system integrity of the created image.

如果网站访问压力不大,则可以在夜间完成关机备份。或者,如果可以接受数据的暂时损失,不关机备份也是OK的。如果不能接受关机备份,也可以采用多机部署,在夜间流量不大的情况下,分批次对主机进行备份,各个主机轮换对外提供服务。

前面说到,snapshot用于root备份会有一些问题。但不代表snapshot就不能备份root。我们最终的目的,就是备份旧的EC2数据,并且成功还原到新的EC2上。为此,一般有以下三种方式进行备份和还原:

1)EC2-->AMI-->launch new EC2

2)old EBS-->snapshot-->AMI-->launch new EC2

3)EBS-->snapshot-->EBS-->mount to new EC2-->start new EC2

第一种方案是比较稳妥的方案,直接对EC2做AMI。无论linux还是windows,收费还是免费,都可以使用。但是AMI更像是做稳定的系统盘,而不是频繁的备份。过程可参阅[1]。

第二种方案是先对root盘做snapshot,然后再从snapshot中创建AMI,可参阅[2]。这种方法有个弊端:

Some Linux distributions, such as Red Hat Enterprise Linux (RHEL) and SUSE Linux Enterprise Server (SLES), use the EC2 billingProduct code associated with an AMI to verify subscription status for package updates. Creating an AMI from an EBS snapshot does not maintain this billing code, and subsequent instances launched from such an AMI will not be able to connect to package update infrastructure.

Similarly, although you can create a Windows AMI from a snapshot, you can't successfully launch an instance from the AMI.

对于收费的windows和linux,没有用。

第三种方案,没有出现在官方文档中,算是一种黑科技[4]:

- Create an EBS volume "X" from the snapshot that has your good system on it.

- Run a new instance "A" of the base AMI.  This creates a volume "Y" as the main disk of that instance.

- Stop instance "A".

- Detach volume "Y" from stopped instance "A".

- Attach the good volume "X" to stopped instance "A".

- Start instance "A".

经过尝试,亲测有效。但是不知在其他地方是否藏有隐藏BUG……个人以为,关键在于EC2实例类型和EBS中的OS类型必须匹配,不要把一个linux root ebs挂载到windows实例上。

此外,也有网友总结了三种常用的备份windows实例的方法,参见[5]。思路和我们上面说的高度相似。除了里面有一条说到将root备份和数据备份分开进行。最后,对snapshot和AMI区别有疑惑的,可以参考文章[6][7]。

完~

Reference

1] http://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/Creating_EBSbacked_WinAMI.html

2] http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-launch-snapshot.html

3] http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-creating-snapshot.html

4] https://forums.aws.amazon.com/thread.jspa?messageID=165839

5] http://www.n2ws.com/blog/3-ways-ec2-windows-backup-and-recovery.html

6] http://serverfault.com/questions/268719/amazon-ec2-terminology-ami-vs-ebs-vs-snapshot-vs-volume

7] http://stackoverflow.com/questions/17619580/aws-difference-between-a-snapshot-and-ami

关于AWS的备份策略的更多相关文章

  1. DG环境数据库RMAN备份策略制定

    DG环境数据库RMAN备份策略制定: 主库(Primary) 全库备份 归档备份 删除历史文件夹 备库(Standby) 删除归档 引用说明 主库(Primary) $ crontab -l 0 1 ...

  2. 记录一则RMAN备份策略修正案例

    背景:在给某客户处理问题时,发现客户数据库的备份空间即将用尽,进一步查看发现是用户数据库的当前RMAN备份策略存在潜在问题,需要修改备份策略. 环境:SunOS 5.10 + Oracle 11.2. ...

  3. Oracle备份及备份策略

    第二章. 了解备份的重要性 可以说,从计算机系统出世的那天起,就有了备份这个概念,计算机以其强大的速度处理能力,取代了很多人为的工作,但是,往往很多时候,它又是那么弱不禁风,主板上的芯片.主板电路.内 ...

  4. Oracle RMAN备份策略

    建立增量备份:如果数据库运行于不归档模式下,只能在数据库干净关闭的情况下 ( 以 normal .immediate . transactional 方式关闭 ) 才能进行一致性的增量备份,如果数据库 ...

  5. SVN服务器几种备份策略---重点svnsync备份---OK

    配置管理的一个重要使命是保证数据的安全性,防止服务器应硬盘损坏.误操作造成数据无法恢复的灾难性后果.因此制定一个完整的备份策略非常重要. 一般来说,备份策略应规定如下几部分内容:备份频度.备份方式.备 ...

  6. MYSQL自动备份策略的选择

    目前流行几种备份方式: 1.逻辑备份:使用mysql自带的mysqldump工具进行备份.备份成sql文件形式.优点:最大好处是能够与正在运行的mysql自动协同工作,在运行期间可以确保备份是当时的点 ...

  7. Linux备份策略(第二版)

    备份策略 备份思想 一.系统潜在的威胁 Ø 系统硬件故障 Ø 软件故障 Ø 电源故障 Ø 用户的误操作 Ø 人为破坏 Ø 缓存中的内容没有及时的写入磁盘 Ø 自然灾害 二.备份介质的选择 备份介质:硬 ...

  8. 基于Linux下catalog方式的 Oracle 备份策略(RMAN)

    --********************************** -- 基于Linux下 Oracle 备份策略(RMAN) --******************************* ...

  9. 转载:MySQL:亲测备份策略实例(线上真实备份案例)

    是否为线上库的备份而烦恼过,这里提供一个完整的备份从属数据库的备份方案,亲测可用 说明: 备份从库,按周计,每周进行一次全备 每周一的早上六点进行全备,其他时间备份中继日志 在从库上启用rsync服务 ...

随机推荐

  1. bzoj4753 最佳团体

    题目描述 JSOI 信息学代表队一共有 NN 名候选人,这些候选人从 11 到 NN 编号.方便起见,JYY 的编号是 00 号.每个候选人都由一位编号比他小的候选人R_iRi​ 推荐.如果 R_i ...

  2. web前端 -- 页面设计小技巧

    1:进入网页时淡入淡出的效果. <meta http-equiv=”Page-Exit”; content=”blendTrans(Duration=1.0)”> 在头部head之间加入此 ...

  3. 模型的性能评估(二) 用sklearn进行模型评估

    在sklearn当中,可以在三个地方进行模型的评估 1:各个模型的均有提供的score方法来进行评估. 这种方法对于每一种学习器来说都是根据学习器本身的特点定制的,不可改变,这种方法比较简单.这种方法 ...

  4. 为什么要使用netty

    选择Netty的理由在开始本节之前,我先讲一个亲身经历的故事:曾经有两个项目组同时用到了NIO编程技术,一个项目组选择自己开发NIO服务端,直接使用JDK原生的API,结果2个多月过去了,他们的NIO ...

  5. 使用Win2D在UWP程序中2D绘图(一)

    在新的Windows UWP程序中,引入了一个新的API库: Win2D.它是一个d2d的封装,可以直接使用C#来快速实现高效2D绘图了.这个API虽然在Win8.1时代就开始着手开发了,但最近才完善 ...

  6. HDU 4679 Terrorist’s destroy (2013多校8 1004题 树形DP)

    Terrorist’s destroy Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Othe ...

  7. java内存泄露补充样例

    前几天写了个内存泄露的文章.里面介绍了内存泄露的相关知识:http://blog.csdn.net/u010590685/article/details/46973735 但是里面给的样例不是非常好, ...

  8. .NET 4.5 is an in-place replacement for .NET 4.0

    With the betas for .NET 4.5 and Visual Studio 11 and Windows 8 shipping many people will be installi ...

  9. JAVA RMI调用实战学习

    JAVA RMI 实战示例,参考网址: http://diaoge.iteye.com/blog/245170 这个示例很清楚地阐释了rmi的使用方法, 但示例都是放在一起的, 实际使用中我们可能会将 ...

  10. (转)Sql Server 快速查看表结构(表描述及字段说明)

    --表描述 SELECT tbs.name 表名,ds.value 描述 FROM sys.extended_properties ds LEFT JOIN sysobjects tbs ON ds. ...