快照技术的发展
一.引言
随着计算机技术和网络技术的不断发展,信息技术水平不断得到提高。人类进入称为信息社会的二十一世纪后,诸如数字通信、数字多媒体、电子商务、搜索引擎、数字图书馆、天气预报、地质勘探、科学研究等海量数据型应用的涌现,各种信息呈现爆炸式的增长趋势,存储成为信息计算技术的中心。应用
对存储系统的要求不断提高,
存储容量不断升级,从
GigaByte
到
TeraByte
、
PetaByte
、
ExaByte
,愈显巨大
。图灵奖获得者
Jim Gray
提出一个新的经验定律:网络环境下每
18
个月生产的数据量等于有史以来的数据量之和。与此同时,现代企业对计算机的依赖性严重增强,信息数据逐渐成为企业赖以生存的基础,数据损坏或丢失将给企业带来巨大的损失。由于黑客、病毒、硬件设备的失效以及火灾、地震等自然灾害的原因,使系统和数据信息遭到破坏甚至毁灭,如果不及时地进行恢复,将对企业造成巨大的损失,所以备份容灾技术显得尤为重要。尤其,
9.11
等事件造成的灾难性后果使人们更加深刻地认识到数据信息的价值和意义,日益重视数据的保护。
在过去的
20
多年中,虽然计算机技术取得了巨大的发展,但是数据备份技术却没有长足进步。数据备份操作代价和成本仍然比较高,并且消耗大量时间和系统资源,数据备份的恢复时间目标和恢复点目标比较长。传统地,人们一直采用数据复制、备份、恢复等技术来保护重要的数据信息,定期对数据进行备份或复制。由于数据备份过程会影响应用性能,并且非常耗时,因此数据备份通常被安排在系统负载较轻时进行(如夜间)。另外,为了节省存储空间,通常结合全量和增量备份技术。
显然,这种数据备份方式存在一个显著的不足,即备份窗口问题。在数据备份期间,企业业务需要暂时停止对外提供服务。随着企业数据量和数据增长速度的加快,这个窗口可能会要求越来越长,这对于关键性业务系统来说是无法接受的。诸如银行、电信等机构,信息系统要求
24x7
不间断运行,短时的停机或者少量数据的丢失都会导致巨大的损失。因此,就需要将数据备份窗口尽可能地缩小,甚至缩小为零,数据快照
(Snapshot)
、持续数据保护
(CDP, Continuous Data Protection)
等技术,就是为了满足这样的需求而出现的数据保护技术。
二.快照概念
快照(Snapshot)是某个数据集在某一特定时刻的镜像,也称为即时拷贝,它是这个数据集的一个完整可用的副本。存储网络行业协会SNIA对快照的定义是:关于指定数据集合的一个完全可用拷贝,该拷贝包括相应数据在某个时间点(拷贝开始的时间点)的映像。快照可以是其所表示的数据的一个副本(duplicate),也可以是数据的一个复制品(replicate)。
快照具有很广泛的应用,例如作为备份的源、作为数据挖掘的源、作为保存应用程序状态的检查点,甚至就是作为单纯的数据复制的一种手段等。创建快照的方法也有很多种,按照SNIA的定义,快照技术主要分为镜像分离(split mirror) 、改变块(changed block)、 并发(concurrent) 三大类。后两种在实现时通常使用指针重映射(pointer remapping)和写时拷贝(copy on write)技术。changed block 方式的灵活性及使用存储空间的高效性,使得它成为快照技术的主流。
第一种快照是镜像分离。在即时拷贝之前构建数据镜像,当出现一个完整的可供复制的镜像时,就可以通过瞬间“分离”镜像来产生即时拷贝。这
种技术的优点是速度快,创建快照无须额外工作。但缺点也很显明,首先它不灵活,不能在任意时刻进行快照;其次,它需要一个与数据卷容量相同的镜像卷;再者,连续地镜像数据变化影响存储系统的整体性能。
第二种快照是改变块
。快照创建成功后,源和目标共享同一份物理数据拷贝,直到数据发生写操作,此时源或目标将被写向新的存储空间。共享的数据单元可是块、扇区、扇道或其他的粒度级别。为了记录和追踪块的变化和复制信息,需要一个位图
(
bitmap
)
,它用于确定实际拷贝数据的位置,以及确定从源还是目标来获取数据。
第三种快照是并发
。它与改变块非常相似,但它总是物理地拷贝数据。当即时拷贝执行时,没有数据被复制。取而代之,它创建一个位图来记录数据的复制情况,并在后台进行真正的数据物理复制。
三.不同存储层次的快照实现
“计算机科学中的任何问题,都可以通过增加间接层次来解决”-Butler Lampson,1992年图灵奖获得者。对于快照技术,我们可以在存储系统中的不同层次来实现,可以在磁盘阵列、文件系统、卷管理器、NAS系统或备份系统中来实现。
图1 存储系统栈与快照实现
存储栈由一组硬件和软件组件组成,为运行在主机操作系统上的应用系统提供物理存储介质,如图
1
所示。快照可以采用很多不同实现方式,也可以在存储栈中的不同层次来实现,大致分为软件层和硬件层两类,也可分为基于控制器的快照和基于主机的快照两类
。
基于控制器的快照,在存储设备层或硬件层中实现,由存储系统硬件提供商管理并集成于磁盘阵列中。这种快照在LUN级(块级)完成,独立与操作系统和文件系统。基于主机的快照,在设备驱动和文件系统级之间实现,通常由文件系统、卷管理器或第三方软件来执行。这种快照不依赖存储硬件,但却依赖于文件系统和卷管理软件。该快照作用于逻辑数据视图,这与基于控制器的快照的不同,它作用与物理数据。
在以上各个存储层次中,物理存储层和卷管理器是最适合实现快照的两个组件,它们可以方便地利用物理存储,是当前主流的实现层次。文件系统层实现快照是一个可行的选择,然而诸如数据库等应用会直接选择使用逻辑卷来实现快照,因为在文件系统层它们不能被快照技术所管理。一般来说,没有必要在应用层实现快照,对于备份机制,可以利用下层的文件系统或卷管理器接口来实现,但需要应用暂时停顿以保证快照数据一致性。总的来说,基于软件层的快照易于操作,且提供比较好的恢复粒度,而基于硬件层的快照往往更高的性能和容错性。
四.快照实现方式与技术
快照技术能够实现数据的即时影像,快照影像可以支持在线备份。全量快照是实现所有数据的一个完整的只读副本,为了降低快照所占用的存储空间,人们提出了写时复制(COW ,Copy-On-Write)和写重定向(ROW,Redirect on Write)快照技术。另外,还出现了其他一些快照技术的实现方式,如日志、持续数据保护等,可以提升快照的相关性能。
1.镜像分离
镜像分裂快照技术在快照时间点到来之前,首先要为源数据卷创建并维护一个完整的物理镜像卷:同一数据的两个副本分别保存在由多个源数据卷和镜像卷组成的镜像对上。在快照时间点到来时,镜像操作被停止,镜像卷转化为快照卷,获得一份数据快照。快照卷在完成数据备份等应用后,将与源数据卷重新同步,重新成为镜像卷。对于要同时保留多个连续时间点快照的源数据卷,必须预先为其创建多个镜像卷,当第一个镜像卷被转化为快照卷作为数据备份后,初始创建的第二个镜像卷立即与源数据卷同步,与源数据卷成为新的镜像对。镜像分裂快照操作的时间非常短,仅仅是断开镜像卷对所需的时间,通常只有几毫秒,这样小的备份窗口几乎不会对上层应用造成影响,但是这种快照技术缺乏灵活性,无法在任意时间点为任意的数据卷建立快照。另外,它需要一个或者多个与源数据卷容量相同的镜像卷,同步镜像时还会降低存储系统的整体性能。
2.写时复制(COW)
图2 写时复制快照
写时复制快照使用预先分配的快照空间进行快照创建,在快照时间点之后,没有物理数据复制发生,仅仅复制了原始数据物理位置的元数据。因此,快照创建非常快,可以瞬间完成。然后,快照副本跟踪原始卷的数据变化(即原始卷写操作),一旦原始卷数据块发生首次更新,则先将原始卷数据块读出并写入快照卷,然后用新数据块覆盖原始卷。
这种快照技术在创建快照时才建立快照卷,但只需分配相对少量的存储空间,用于保存快照时间点之后源数据卷中被更新的数据。每个源数据卷都具有一个数据指针表,每条记录保存着指向对应数据块的指针。在创建快照时,存储子系统为源数据卷的指针表建立一个副本,作为快照卷的数据指针表。当快照时间点结束时,快照建立了一个可供上层应用访问的逻辑副本,快照卷与源数据卷通过各自的指针表共享同一份物理数据。快照创建之后,当源数据卷中某数据将要被更新时,为了保证快照操作的完整性,使用写时复制技术。对快照卷中数据的访问,通过查询数据指针表,根据对应数据块的指针确定所访问数据的物理存储位置。
写时复制技术确保复制操作发生在更新操作之前,使快照时间点后的数据更新不会出现在快照卷上,保证了快照操作的完整性。写时复制快照在快照时间点之前,不会占用任何的存储资源,也不会影响系统性能;而且它在使用上非常灵活,可以在任意时间点为任意数据卷建立快照。在快照时间点产生的“备份窗口”的长度与源数据卷的容量成线性比例,一般为几秒钟,对应用影响甚微,
但为快照卷分配的存储空间却大大减少;复制操作只在源数据卷发生更新时才发生,因此系统开销非常小。但是由于快照卷仅仅保存了源数据卷被更新的数据,此快照技术无法得到完整的物理副本,碰到需要完整物理副本的应用就无能为力了,而且如果更新的数据数量超过保留空间,快照就将失效。
3.指针重映射(Pointer Remapping)
图3 指针重映射快照
这种实现方式与写时复制非常相似,区别在于对于原始数据卷的首次写操作将被重定向到预留的快照空间。该快照维持的是指向所有源数据的指针和拷贝数据。当数据被重写时,将会给更新过的数据选择一个新的位置,同时指向该数据的指针也被重新映射,
指向更新后的数据。如果拷贝是只读的,那么指向该数据的指针就根本不会被修改。重定向写操作提升了快照
I/O性能,只需一次写操作,直接将新数据写入快照卷,同时更新位图映射指针;而写时拷贝需要一次读和两次写操作,即将原始卷数据块读入并写入快照卷,然后将更新数据写入原始卷。
不难发现,快照卷保存的是原始副本,而原始卷保存的则是快照副本。这导致删除快照前需要将快照卷中的数据同步至原始卷,而且当创建多个快照后,原始数据的访问、快照卷和原始卷数据的追踪以及快照的删除将变得异常复杂。此外,快照副本依赖与原始副本,原始副本数据集很快变得分散。
4.日志文件架构
这种形式的快照技术利用日志文件来记录原始数据卷的写操作。所有针对原始数据卷的写操作都记录在日志系统中,相当于每次数据变化均会生成快照。因此,这与数据库系统事务或文件系统日志非常相似,可以根据需要,从日志恢复数据或者回滚事务到任意合理状态。严格意义讲,这种方式不能称之为快照,但的确能达到快照的目标,不少文件系统实现了这种功能,如ZFS、JFS、EXT3、NTFS等。
五.克隆快照
前面提到的快照,基本上都不会生成完整的快照副本,无法满足完整物理数据副本的业务需求。克隆快照可生成与源数据卷一致的镜像快照,它充分利用了写时拷贝和镜像分离两种快照技术的优点。快照时间点时,它先使用写时拷贝方式快速产生快照副本,然后在后台启动一个拷贝进程来执行源数据卷至快照卷的块级数据拷贝任务。一旦复制完成,就可以通过镜像分离技术获得一个克隆快照。克隆快照同样继承了镜像分离快照的缺点,除了需要一个与源数据卷容量相等的快照卷外,还会一定程度上影响存储系统的整体性能。
六.持续数据保护
持续数据保护,也称连续备份,它自动持续捕捉源数据卷数据块的变化,并连续完整地记录这些数据块版本。每一次数据块变化都会被记录,生成瞬间快照,这与其他快照技术在快照时间点上创建快照是不同的。因为写操作都被记录保存下来,因此能够动态地访问任意一个时间点的数据状态,提供了细粒度的数据恢复,可以实现瞬间和即时的恢复,有效拉近恢复点目标。数据块级的持续数据保护技术的优点是与应用的藕合比较松,性能和效率比较高,系统连续不间断运行,不存在快照窗口问题。它的缺点是对存储空间的要求比较高,这也是限制数据块级持续数据保护技术广泛应用的根本原因。
下表从不同角度对以上几种快照技术进行了分析对比
| 镜像分离 | 指针重映射 | 写时复制 | 日志文件 | 克隆快照 | 持续数据保护 |
快照是否依赖源数据卷? | NO 镜像包含完整的数据副本 | YES 未变化的数据从源数据卷访问 | YES 未变化数据从源数据卷访问 | YES 未变化数据从源数据卷访问 | ONLY 仅在后台拷贝未被完成时 | YES 除了包含源数据副本实现外 |
空间效率 | NO 要求源数据卷相同容量存储空间 | YES 大多数据情况下要求变化数据存储空间 | YES 大多数据情况下要求变化数据存储空间 | YES 要求变化数据存储空间 | NO 要求源数据卷相同容量存储空间 | YES 存储空间需求取决于保存变化数据的数据和频率 |
源数据卷系统CPU和I/O负载 | LOW/HIGH 镜像分离后低,分离前数据同步高 | HIGH/NONE 软件型快照高,硬件型快照无 | HIGH/NONE 软件型快照高,硬件型快照无 | HIGH 对写操作进行日志时高 | LOW 一般由存储子硬件执行 | 具体实现相关 |
源数据卷写负载 | NONE 写负载发生在分离前 | NONE 写直接重定向至新块 | HIGH 首次写产生额外写负载 | HIGH 写操作必须进行日志 | HIGH 拷贝完成前的首次写产生写负载 | HIGH 每次写操作导致相应的写操作 |
逻辑数据错误保护机制 | YES 数据必须从镜像卷拷贝,变化没有记录,速度较慢 | YES 数据变化可以回滚或者同步至源数据源 | YES 数据变化可以回滚或者同步至源数据源 | YES 数据变化可以回滚 | YES 可以反向建立快照,由于仅复制变化数据块,速度较快 | YES 数据变化可以同步至原始数据副本 |
源数据卷物理介质故障保护机制 | YES 镜像卷是完整副本 | NONE 有效源数据卷必须存在 | NONE 有效源数据卷必须存在 | NONE 有效源数据卷必须存在 | YES 后台复制完成后完全保护 | 具体实现相关 |