通常在对数据进行备份时,存在以下三种数据保护的一致性:
1、不一致备份(In-consistent backup),表示备份的数据是正在改变的数据;
2、崩溃一致备份(Crash-consistent backup),表示备份的数据类似系统异常宕机时的状态;
3、应用一致备份(Application-consistent backup),表示备份的数据是应用可用的数据;
In-consistent backup不一致备份
什么是数据保护的一致性?
平时我们用copy命令或者在资源管理器中进行文件拷贝,如果拷贝的文件是正在变化修改的,那么我们拷贝出来的文件就是不一致的状态,可以称之为in-consistent。为什么说是不一致的呢?比如说我们要拷贝一个大的文件,而这个文件在变化,那么我们用copy命令拷贝出来的文件头和文件尾的数据块并不是同一个时间点的,这个文件可能是无法打开的。
In-consistent状态是数据备份时最不愿意出现的,当然目前大部分备份产品都能解决。
Crash-consistent backup崩溃一致性备份
Crash-consistent backup的实现一般是采用磁盘快照的方式来实现,在应用没有停止对文件进行写入时,快照时的数据状态就像系统异常宕机时一样,这时并不是所有的IO都一致地写入到磁盘中,但重启后,文件系统、数据库都有崩溃修复功能,大多数情况下可以将数据恢复到一致状态并正常使用。术语“crash-consistent”就是指服务器崩溃、关闭电源或重启瞬间的恢复点。
那备份软件如何能在同一时间点对整个数据集进行快照?以Windows为例,可以通过利用微软的VSS服务(Volume Shadow Copy Service)来实现,当某一个时刻,要对某个卷做一个vss快照,vss会通知该卷上的文件系统,将内存中的数据写入到磁盘中,这个操作称为flush,这样就保证了文件系统数据的一致性。同时,vss还会阻止文件系统的写入数据操作,即正在做快照的这个时候不允许对改卷进行任何写操作,以保证卷的一致性,可以称之为freeze。这整个过程持续的时间很短,通常在几秒之内。vss在这几秒之内迅速产生了一个该卷的快照,即原卷的一个镜像。快照制作结束以后,无论原卷怎么变化,快照的内容不会再发生变化。
当我们从这个快照中再去拷贝文件的时候,这些数据始终是出于一致的状态,称之为consistent,今天去拷贝还是明天去拷贝,都是快照时刻的数据。是怎么做到的呢?vss使用了一种写时复制的机制(cow),来保证数据状态的一致。
但是这种状态有多一致呢?
从vss参与的组件可以知道,只有文件系统本身参与了,一些应用比如SQLServer等并没有参与,所以说假设我们把快照中的数据都备份了,然后再把备份的数据都还原,SQLServer大概率是可以正常启动的,但在运气不好的时候可能是无法启动的。
我们称这种一致状态为crash-consistent状态。
Crash-consistent对于保证被保护数据尽量在同一个时间点上,已经是一种很大的进步了,但是对于最稳妥的数据保护来说这还不够,还需要支持更高级别的一致性,即应用级别的一致性,这就是application-consistent。
Application-consistent backup应用一致性备份
与crash consistent不同,application-consistent备份是在进行底层快照时,先让数据库或应用文件处于不改变的状态,比如对于数据库这个应用,在关闭状态下的数据肯定是应用一致性的。如果业务上允许数据库长时间关闭,直接拷贝这些数据库文件就是一种应用一致性备份;如果业务只允许短时间关库,对这些数据文件快照后立即打开库,然后拷贝快照数据,也是应用一致性备份。这两种场景对于数据库这种应用来说做的都是冷备份。
而现实场景中,数据库往往需要热备份,即在不停止数据库的情况进行备份,那么要保证应用一致性,方式一是通过数据库或应用提供的接口或工具进行备份,方式二是调用数据库静默后进行快照,再备份快照文件。应用一致性的保证,一般都需要应用本身参与,例如备份接口或静默指令。再拿windows举例,vss可以实现上述方式二的应用一致性备份,且很简单,可以通知系统中的那些支持vss writer机制的应用比如sql,exchange等去flush数据并处于类似静默状态,使应用本身在快照时保持自己的一致状态,这样就确保了备份下来的数据一定是能够被应用正常使用的。
Crash-consistent vs Application-consistent backup
一张表来说明crash consistent备份和application consistent备份之间的区别:
Operation | Crash-consistent | Application-consistent |
备份文件的时间点 是否一致 | ✔ | ✔ |
利用快照进行卷级 或文件备份 | ✔ | ✔ |
快照时数据库或应用 提前静默 | × | ✔ |
恢复时数据是否一定 正常使用 | × | ✔ |
需要重点提到的就是application consistent与crash consistent在进行恢复时的工作量。对于crash consistent,由于应用数据可能不一致,那就必须先将数据恢复到一致,这个过程在不同数据库产品之间的操作是不同。但application consistent可以保证应用数据一致,因为vss在捕获快照之前,内存中的任务和挂起的I/O都已交到磁盘。在应用程序数据的灾难恢复场景中,与应用程序服务器(尤其是数据库服务器)的crash consistent备份相比,application consistent 备份具备显著的优势。
总结
企业在进行数据备份的时候,如果不深入考虑crash consistent和application consistent备份类型的差异,可能会导致意外的备份结果,甚至是数据损坏。crash consistent backup无法获取内存中正在发生改变的应用数据,而application consistent backup是知道这些临时数据,允许待事务一致性后正确地备份,从而有效实现应用程序数据的一致。
纵观当前备份市场的产品,CDM(Copy Data Management副本数据管理)是具备原生的、天然的application consistent属性。Gartner给出CDM的定义是:它从生产环境通过快照技术获取有应用一致性保证的数据,在非生产存储上生成“黄金副本”(Golden Image),这个“黄金副本”数据格式是原始的磁盘格式,可再虚拟化成多个副本直接挂载给服务器,分别用于备份恢复、容灾或开发测试。
在对企业核心系统进行备份的时候,在实现数据保护一致性方面,你会如何选择?