快照技术一般被定义为一组文件或目录或者是卷在某个特定的时间点上的副本。它所能捕获到得是一些特定数据在特定时间点上的映像。快照技术的出现是为了解决我们经常碰到的一些备份上的问题。
- 需要备份的数据量太大,以至于无法在有限的时间段内完成备份。
- 从一个未被备份的目录中向一个已经备份过的目录移动文件,经常会导致备份失败发生;
- 由于备份时一些文件正在进行写操作,所以有些备份的数据不能使用。
- 热备份严重影响应用系统的性能,等等。
所有上述常见的备份问题其实都可以用快照技术来解决。但是,我们也不能单纯的将快照视为解决所有问题的灵丹妙药,因为快照技术还有待进一步完善。(例如“快照的一致性问题”)。
备份技术已经整理成电子书<数据备份和副本管理技术全面解析>内容丰富全面,可点击原文链接查看详情。
快照技术的概述介绍
创建一个快照不同的设备需要不同的命令,但对于系统来说,基本都包括如下几个步骤:
- 1、首先发起创建指令
- 2、在发起时间点,指令通知操作系统暂停应用程序和文件系统的操作
- 3、刷新文件系统缓存,结束所有的读写事务
- 4、创建快照点
- 5、创建完成之后,释放文件系统和应用程序,系统恢复正常运行。
现在,快照技术已经超越了简单的数据保护范畴。我们可以用快照进行高效且无风险的应用软件测试。用快照数据做测试,不会对生产数据造成任何的破坏。对于数据挖掘(Data Mining)和电子发现(eDiscovery)应用,快照也是理想的测试数据源。在灾难恢复方面,快照是一种非常有效的方法——甚至是首选,非常适合遭到恶意软件攻击、人为误操作和数据损坏等逻辑错误发生时的数据恢复。
基于文件系统和LVM的快照
过去我们认为只有磁盘阵列具备快照功能,但事实上磁盘阵列只是其中之一而已。广义的快照技术通常可有7个不同类型的实现主体:
- 1、主机文件系统(包括服务器、台式机、笔记本电脑)
- 2、逻辑卷管理器(LVM)
- 3、网络附加存储系统(NAS)
- 4、磁盘阵列
- 5、存储虚拟化设备
- 6、主机虚拟化管理程序
- 7、数据库。
下面将逐项给大家介绍一下在各个系统中快照技术的应用,并对其进行详细的说明。
基于文件系统的快照
很多文件系统都支持快照功能,例如:
- Windows NTFS的VSS卷影拷贝服务(Volume Shadow Copy Services;
- Vista称作Shadow Copy);
- Sun Solaris的最新文件系统ZFS(Zettabyte File System);
- Apple公司的Mac OS X 10.6(雪豹);
- Novell NetWare 4.11(或更高版本)的Novell Storage Services (NSS) ;
- Novell SUSE Linux操作系统下的OES-Linux等等。
免费是文件系统快照的优势之一,因为它集成在文件系统内部;另一个优点是非常好用,最新版文件系统的快照功能通常使用起来很简单。
但存在的劣势是每个文件系统都必须独立进行管理,当系统数量激增时,管理工作会变得非常繁重。想象一下,如果我们要做快照复制的话,需要给每一个文件系统都配置一套复制关系,而且还只能复制该文件系统自己的快照。
此外,不同文件系统所提供的快照种类、快照频率、预留空间等参数也可能不一样,当然也包括设置、操作和管理上的差异。总之,需要管理的服务器和文件系统越多,复杂程度就越高。
基于LVM逻辑卷管理器快照
常见的操作系统和存储管理软件中,带有快照技术的LVM也很多,比如:
- 惠普HP-UX操作系统Logical Volume Manager;
- Linux平台的Logical Volume Manager和Enterprise Volume Management System系统;
- 微软Windows 2000及后续版本自带的Logical Disk Manager系统;
- SUN Solaris 10操作系统的ZFS;
- Veritas Volume Manager (Veritas Volume Manager是赛门铁克Veritas Storage Foundation产品的一部分)。
我们可以创建跨多个文件系统的LVM快照。像赛门铁克的Veritas Volume Manager可以支持大多数常见的操作系统和文件系统。LVM通常还包括存储多路径和存储虚拟化等功能。
使用LVM时,通常要付出额外的成本,包括为每台服务器购买license(许可证)和维护费。而且,像基于文件系统的快照一样,我们可能还要面对系统之间的协调问题和复杂的技术实施问题。
基于NAS和磁盘阵列的快照
- 基于NAS的快照
NAS本质上就是一个经过优化的、或是专门定制的文件系统,运行在特定的设备上,或集成在存储设备里。大多数中端和企业级NAS系统都提供快照功能,其中既有使用专有操作系统的设备,也包括大量基于Microsoft Windows Storage Server软件的各种NAS。
通过网络连接到NAS的计算机系统都可以使用这种标准的通用快照,包括物理服务器、虚拟机、台式机和笔记本电脑。它也非常容易操作和管理。基于NAS的快照往往同Volume Shadow Copy Services (VSS)、备份服务器和备份Agent等软件集成在一起使用。一些NAS厂商还为非Windows平台的数据应用系统开发了Agent代理程序。其他一些与NAS快照有关的技术还包括重复数据删除(EMC公司,FalconStor软件公司和NetApp的产品),有些厂商甚至提供了带有自动精简配置功能的快照,目的是让快照占用的空间变得更少。
但是,使用便利的工具和附加功能也需要成本,软件license和维护费相当昂贵,一般是按照机器数量和磁盘卷容量来计算。大多数公司的数据量增长很快,需要使用NAS快照技术的地方也越来越多,因此,操作和管理也将更复杂。
- 基于磁盘阵列的快照
大多数磁盘阵列的软件系统里都含有快照功能。基于磁盘阵列的快照与基于NAS的快照有非常相似的优点,即所有与磁盘阵列相连的计算机系统都可以使用这种标准的通用快照功能,包括物理服务器、虚拟机、台式机和笔记本电脑等等。快照的实施、操作和管理也都很简单。像NAS一样,很多磁盘阵列的快照功能也可以被Windows VSS、备份服务器和备份Agent等软件直接调用。一些磁盘阵列厂商还有可供非Windows平台应用系统使用的Agent代理程序。
基于磁盘阵列的快照存在的缺点是license和维护费用昂贵,对非Windows平台的应用程序支持有限,磁盘阵列的数量越多,快照的管理也就越复杂。
基于存储虚拟化的快照技术
- 基于存储设备的快照
这里所说的存储虚拟化设备主要用于SAN光纤网络环境,不同于基于文件(NFS)应用的网络设备,像F5 Network公司的Acopia ARX产品就是排除在这个范畴之外的。主要的存储虚拟化软硬件存储设备(或融合了虚拟化功能的存储系统)都支持快照能力。
磁盘阵列和NAS快照所具备的优点在存储虚拟化设备上同样能够体现,而且某些方面还能做的更好。我们可以将来自不同厂商的很多存储设备聚集在少量的几个控制点或单一控制点上进行管理,提供通用的标准化快照。这样做最大程度的简化了快照的管理操作成本和学习成本。
存储虚拟化快照的缺点与上述类型相比则有些不同。使用存储虚拟化设备会导致I/O延迟的增加,即使是采用旁路架构的设计,最终还是会影响应用程序的响应时间。增加存储虚拟化设备还会使故障分析变得更加困难,潜在的还可能激化厂商之间对故障责任的推诿。从另一个角度看,虽然增加额外的虚拟化存储硬件或软件要产生一定的费用,但是与每个存储系统都独立购买快照功能相比,它的软件license和维护费用都要低一些。
- 基于主机虚拟化软件的快照
随着服务器虚拟化应用的普及,基于主机虚拟化管理软件(Hypervisor)的快照技术也逐渐流行起来。像Citrix公司的 XenServer、微软的Hyper – V、SUN的xVM Ops Center、以及VMware的ESX和vSphere4等主机虚拟化产品都支持快照功能。
在主机虚拟化软件层实现快照的优点是简单直接。由于同虚拟机管理软件绑定在一起,因此可以为所有的虚拟机 (VMs) 提供统一的快照,并且还可以同微软的VSS集成,随时调用。相对而言,基于虚拟机的快照很容易部署、使用和管理。
但是,如果非要找出不喜欢这种快照的理由?我想应该是每一套虚拟机软件的快照需要单独管理;而且当我们在非Windows平台下使用这种快照技术时,必须针对整个VM。这意味着我们只能做粗粒度的数据恢复,还要消耗更多的恢复时间。这种快照是在Windows操作系统外部创建,所以它不能架构在应用软件感知的层面,导致快照出来的映像数据有可能是不一致状态。
- 基于数据库的快照
在数据库中,快照动作被称为“SnapShot Isolation(快照隔离)”。像Oracle和PostgreSQL这样的数据库需要做快照隔离以确保所有的交易命令序列化,就好像被一个个隔开一样,然后再逐个执行。其他的一些数据库也支持快照隔离,但并不要求将交易序列化。在一般情况下,数据库备份工具会利用快照隔离的功能,用快照来恢复崩溃(出现一致性问题)的数据表。
针对数据库内部数据和基于该数据库的相关应用,使用数据库自带的快照比较有效。
相反,数据库快照的重要缺欠就是覆盖的范围非常有限,其作用仅限于特定的数据库内部和数据库相关的应用,无法管理同在一台服务器上的文件系统、文件类应用或其他数据库,更不用说管理到其他的服务器了。有时候我们不得不通过其他层次的快照技术来解决数据库之外的数据保护问题,这样,操作和管理将变得有些复杂。
不同类型的快照及工作原理
通常,我们会提到6种类型的快照技术:
- 1、Copy-on-write 复制写
- 2、Redirect-on-write 重定向写
- 3、Clone or split mirror 克隆或镜像
- 4、Copy-on-write with background copy后台拷贝的复制写
- 5、Incremental 增量快照
- 6、Continuous data protection 持续数据保护
复制写和重定向写快照
- Copy-on-write (COW) 复制写快照技术
COW快照需要消耗一些存储空间–建立快照卷。当我们为一个数据卷创建一个快照之后,这些预留的空间用来存放被变化数据更新的旧数据。COW快照在初始化的过程中仅仅创建用来描述源数据块位置的指针信息(元数据),而不是完整的将源数据块拷贝过来。因此初始化的过程几乎可以在瞬间完成,对系统的影响也很小。
COW快照会跟踪数据卷的写操作和数据块变化。当某个数据块发生改变时,在将旧的数据覆盖之前,首先将该块的旧数据复制到预留的快照卷,该步骤仅在数据卷相应数据块位置发生第一次写操作请求时进行。这个处理过程确保快照出来的数据与发起快照的那个精确时间点保持完全一致。这个过程也描述了“Copy On Write”这个名字的含义。
如果我们需要访问某个时间点的快照数据,对没有改变过的块直接从数据卷读取;对已经改变并被复制的块则从快照空间读取。从快照被创建那一刻开始,每个快照都会跟踪记录描述块改变的元数据信息。
COW快照的主要优势在于空间的高效利用,因为快照卷只需要保留发生过变化的数据块,与数据卷相比要小得多。但是我们也知道COW快照有个缺点,它会引起数据卷性能的下降,这是因为创建快照之后,对数据卷的写操作会增加一个等待的过程 –即旧数据块复制到快照卷的过程。另外一个关键问题是每个快照卷必须依赖一个完整的数据卷。
- Redirect-on-write (ROW) 重定向写快照
“ROW重定向写”与“COW复制写”是相对的概念,它可以避免两次写操作引起的性能损失。ROW同COW一样在空间利用方面效率非常高。那是什么让ROW快照避免了写性能的损耗?
其中的原因是ROW把对数据卷的写请求重定向给了快照预留的存储空间,而写操作的重定向设计则把需要两次写才能完成的操作减少为一次写。我们知道COW的两次写包括:
- 1、将旧数据写入快照卷
- 2、在数据卷写入新数据。而ROW只有写入新数据一步。
使用ROW快照,数据卷存放的是上一个快照时间点的旧数据,新数据最终存放在预留的快照空间。这里也有一个复杂的问题,就是快照的删除。被删除的快照上的数据必须被复制到原始数据卷,并且做一致性回退。创建的快照越多,维护快照的复杂度也会以指数级别上升。这些复杂性包括对原始数据的访问、快照数据和原始数据卷的跟踪、以及快照删除后的数据调整。另一个直接引发的严重问题是,原始数据集中会产生大量的碎片。
克隆和后台拷贝快照技术
- 克隆或分割镜像快照
Clone(或Split-Mirror)快照所创建的是数据的完整副本。Clone(或Split-Mirror)快照的对象可以是一个存储卷、一个文件系统或者是一个LUN(logical unit number 逻辑单元号)。Clone快照的优点是它们具有高可用性;缺点是所有的数据都要完整的复制一份,复制的过程也不可能在瞬间完成。我们可以分割一对保持同步状态的镜像卷来启用Clone快照,分割的过程瞬间即可完成。然而,当镜像被分割成Clone快照之后,数据卷也就失去了他的同步镜像。
使用Clone快照需要面对的一个非常严重的问题是每个快照都需要和数据卷一样大的存储空间。尤其是当我们在任何时刻都需要保持一份以上Clone卷的情况,这个成本会非常高。另一个缺点是影响性能,因为在镜像卷之间保持写同步需要一定的系统开销。
- 后台拷贝的复制写快照
该快照有两个生成步骤,首先创建一个瞬时即可生成的COW快照;然后利用后台进程将数据卷的数据复制到快照空间,最后生成一份数据卷的克隆或镜像。
创建这种快照的目的是发挥COW快照的优势,同时尽量屏蔽它的不足。因此,这种快照常常被形容为COW和Clone快照的混合体。
增量快照与持续数据保护
- (Incremental)增量快照
增量快照的特点是可以跟踪数据卷和快照卷的变化。当一个新的增量快照生成之后,旧的快照数据将被刷新。第一个快照和随后创建的每一个增量快照数据上都有时间戳标记,利用时间戳我们能够将快照数据回滚到任意的一个时间点。增量快照技术能够加快后续快照的生成速度,而且仅仅在名义上多消耗了一点空间而已。由此,我们可以提高创建快照的频率,也能让快照保留得更久一点。
增量快照的不足之处是它需要依靠上面所提到的其他基础技术来创建第一个快照 。如果用Clone方式,那么第一个快照需要较长的初始化时间;如果用COW方式,数据卷的性能会降低。
- 持续数据保护(CDP)
CDP的出现是为了实现零数据丢失的RPO指标,以及瞬时数据恢复的RTO指标。它本身与同步数据镜像很类似,不同之处在于CDP还可以对软性灾难进行恢复。包括人为误操作、恶意软件攻击、意外删除、数据损坏等情况。
持续数据保护颇像频率很高的增量快照。它会捕获并复制任何时刻发生的数据变化,并且给这些数据块打上时间戳。CDP本质上相当于每个时刻都创建一份增量快照,提供细粒度的精确数据恢复。有些CDP产品同时提供基于时间和基于事件(例如应用程序升级事件)两种粒度的恢复方式。还有一个理解CDP概念的好方法就是将它看成一个快照的Journal日志。
对于邮件系统、数据库和基于数据库的应用来说,CDP是一个极好的保护方案,能将数据回滚到任意的历史时间点,恢复过程也简便、迅速。最有代表性的CDP产品是飞康公司的IPStor,它是一个集成了CDP功能的存储系统兼存储虚拟化设备。
随着越来越多的数据需要保护,备份窗口也变得越来越紧张,因此需要快照技术来帮助我们解决备份问题。在现实的应用环境中,快照利用的是否恰当对数据保护的等级和恢复的速度有着很大的影响。尽管各类型快照之间存在的技术差异不太容易理解,但无论如何,快照技术都将在数据保护领域和日常存储管理中扮演重要的角色。
快照的一致性问题
如果用快照来处理结构化数据,可能会存在一些问题。结构化数据涉及到数据库,以及数据库类应用(例如邮件系统、ERP或CRM等等)。许多产品中的快照并不能与这些应用程序集成或被直接调用。有一种可能的情况是,在我们创建快照的瞬间,数据库恰好不在静止状态(缓存正在刷新、写操作事务尚未完成、索引和元数据正在更新等等),此刻生成的快照数据是不一致的,很有可能无法正常使用。
在微软的Windows Server平台上,这个问题要简单得多,利用Windows Volume Shadow Copy Services (VSS)和它的API,数据库应用程序可以集成并调用快照工具。VSS是专门为结构化数据应用设计的服务框架,可以驱动数据库等应用进入数据一致性的静止状态,在快照开始初始化之前,完成刷新缓存、结束写操作以及系统状态的更新。
遗憾的是,目前在Linux和Unix操作系统平台上还没有类似VSS的服务或API。VMware公司的vCenter storage API可以说是一个部分解决方案。快照的发起者可以通过vCenter storage API给vCenter发出一个指令,让虚拟机进入静止状态,然后再执行快照。但这个时候,快照由于没有通过应用程序感知,也许会存在不一致的问题。
这里还有一个好办法,可以不通过Windows VSS,获得数据库的一致性快照。这个办法需要备份软件的配合。将快照技术的API同备份软件集成,就可以从备份服务器端驱动备份软件的数据库代理Agent。Agent备份代理程序可以驱动数据库进入静止状态,然后反向让备份服务器通知快照工具开始执行创建快照的操作。这也是一个比较有效的办法。