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. bzoj1977 次小生成树

    Description 小 C 最近学了很多最小生成树的算法,Prim 算法.Kurskal 算法.消圈算法等等. 正当小 C 洋洋得意之时,小 P 又来泼小 C 冷水了.小 P 说,让小 C 求出一 ...

  2. php操作redis出现不报错就退出

    金乐园项目 php操作redis出现不报错就退出  死活找不出原因是因为下面这句话导致:     原因igbinary扩展没有装上 $options[\Redis::OPT_SERIALIZER] = ...

  3. JDK源码(1.7) -- java.util.ListIterator<E>

    java.util.ListIterator<E> 源码分析(JDK1.7) ------------------------------------------------------- ...

  4. MySQL之char、varchar和text的设计

    最近有表结构设计中出现了varchar(10000)的设计引起了大家的讨论,我们下面就来分析分析. 首先我们先普及一下常识: 1.char(n)和varchar(n)中括号中n代表字符的个数,并不代表 ...

  5. iptables数据包、连接标记模块MARK/CONNMARK的使用(打标签)

    MARK标记用于将特定的数据包打上标签,供iptables配合TC做QOS流量限制或应用策略路由. 看看和MARK相关的有哪些模块: ls /usr/lib/iptables/|grep -i mar ...

  6. TPS61175/TPS55340 3A/5A、40V 电流模式集成 FET 升压 DC/DC 转换器

    集成型5A 40V 宽输入范围升压/单端初级电感转换器(SEPIC) / 反激式(Flyback) 直流到直流稳压器 (Rev. B) 描述 TPS55340 是一款单片非同步开关稳压器,此稳压器带有 ...

  7. Buck converter uses low-side PWM IC

    The most common switching-power topology is a buck converter, which efficiently transforms high volt ...

  8. java自动识别上传的apk版本号

    import java.util.List; public class ApkInfo { private String versionCode; private String versionName ...

  9. Table里td中的文本过长,设置不换行,随内容同行显示(转载)

    当td中内容过长时,内容会溢出,换行显示,美观超级差,在td里设置这个属性 "white-space:nowrap   就可以解决排版问题啦 <td style="white ...

  10. 如何把rc.local里执行的shell脚本的日志内容放到其他位置

    rc.local的日志内容默认是/var/log/boot.log /etc/rc.d/rc.local文件的文件头是#!/bin/sh ,我们把这修改成#!/bin/sh -x,这样系统启动后就会把 ...