市场上做数据迁移,备份和恢复的厂商很多,有像EMC和Symantec这样的存储设备提供商,也有像NSI Double-Take这样的软件服务供应商,分别代表性的产品有,EMC Replication Manager,Symantec Backup Exec和Double-Take。

无论哪一种数据备份软件,最关键最核心的技术其实就是两点:

1. Freeze/Thaw备份对象的I/O

2. 快速拷贝备份对象的数据

在关注完这两个技术点之后,再进一步讨论:

1. 将备份软件由物理机扩展到虚拟机

2. 备份对象和备份平台的扩展

备份的对象可以是文件或磁盘,也可以是应用程序或操作系统。对于前者,如果没有IO操作,那么备份过程相对简单,可以直接进行拷贝操作。如果存在IO操作,那么只有停机才能保证数据的完整性和一致性,如果不停机,由于数据尚在缓存或者读写过程中,则无法保证数据的完整性和一致性,因此备份出来的数据可能没有意义。对于后者,虽然备份的最终对象也是文件或磁盘,但备份的过程需要得到应用程序或操作系统的支持,这样既可以不停机,甚至应用程序可以继续提供服务,又可以保证备份数据的完整性和一致性。

应用程序为了支持数据备份,通常的做法是,在备份开始前,将备份单元缓存的数据写回进磁盘中,然后Freeze备份单元的IO;在备份过程中,将备份单元的写操作转到临时文件中;在备份结束后,将临时文件的数据重新写回进磁盘中,然后Thaw备份单元的IO。非常典型的例子是,Oracle的hot backup script,Microsoft为SQL Server和Exchange Server提供的VDI和VSS接口。

为了保证服务质量,一般情况下,应用程序从Freeze备份单元的IO到Thaw备份单元的IO的间隔时间都比较短,例如Oracle的备份时间是60s,而VDI和VSS的备份时间只有10s。备份时间是如此的短,而备份数据通常又是非常的庞大,因此完全拷贝原始的数据几乎是不可能的,于是基于Copy-On-Write的Snapshot技术在存储设备中得到了广泛的应用。

Copy-On-Write的基本原理其实也简单,假设原始数据区为A,备份数据区为B,当A中的某个数据块有写请求时,先将原来的数据块拷贝到B中,然后再对A执行写操作。A中未执行写操作的数据块,只需要在B中维护一个A中对应数据块的索引指针即可。这样,当A中的数据改动比较少时,B需要的空间通常也很少,只要原来的10%~30%。

在为备份数据区申请空间时,如果是申请固定空间,则该空间应大于原始空间,当然,通常不这么做,而是申请自动精简配置的磁盘空间,需要多少,占用多少,从而节省数据空间,避免无谓的浪费。而在具体的实现中,据作者的亲历了解,做法是为每个原始空间保留一个大的缓冲区,为原始空间建立的多个备份空间都从这个缓冲区里面分配。

以EMC Replication Manager为例,支持Exchange,SQL Server,SharePoint,Oracle,DB2等应用程序的备份,支持的存储设备包括Symmetrix,CLARiiON等。

因为备份过程需要得到存储设备的支持,备份的最小数据单元也就成了一个LUN。一个LUN在主机端表现为一块物理磁盘,主机可以发送标准的SCSI命令给这个LUN,但是这种情况在虚拟机环境下就发生了变化,这是因为在虚拟机(如VMWare)中,只认识虚拟磁盘.vmdk。

所幸的是,RDM(Raw Device Mapping)技术解决了这个难题。RDM是从VMFS卷到原始LUN的符号链接。映射使LUN显示为VMFS卷中的文件。在虚拟机配置中引用映射文件而非原始LUN。打开LUN进行访问时,系统会读取映射文件以获取原始LUN的引用。可以不用通过映射文件直接对裸LUN进行读写操作。RDM Volume只能是FC或者iSCSI的LUN。

NSI Double-Take的产品对数据在物理机和虚拟机之间的迁移,备份和恢复做得相当出色,可惜相关的资料不多,所以了解得也很有限。

Symantec Backup Exec的功能非常全面,这一点,可以为其它备份软件的开发提供方向性的参考。它支持的备份平台有NetWare,Macintosh,Linux,Unix,Windows,支持的应用软件有SAP,SharePoint,SQL Server,Exchange,DB2,Lotus Domino,Active Directory,Enterprise Vault,支持的虚拟机有VMWare,Hyper-V。