一种持续数据保护方法及装置与流程

文档序号:18464132发布日期:2019-08-17 02:18阅读:214来源:国知局
一种持续数据保护方法及装置与流程

本发明涉及计算机数据备份容灾技术领域,特别是涉及一种可优化持续数据保护中元数据管理的持续数据保护方法及装置。



背景技术:

在计算机领域,为了保护重要的数据信息,通常采用数据备份技术,在数据不可用时从备份介质中恢复数据。但是在恢复数据时,两次备份之间的数据可能会丢失,对于一些关键的信息系统,所能容忍的数据丢失量,即恢复点目标(rpo,recoverypointobject)要尽可能地低,这就需要应用连续数据保护(cdp,continuousdataprotection)技术。

持续数据保护技术(cdp)是通过记录每一次保护磁盘写请求,将写请求数据备份到另一个存储空间中,并且在之后可以将数据恢复到记录中的任意时间点,以达到数据恢复容灾的效果。有别于通过快照的恢复方式,cdp可以将rpo降低到接近于0。

2011年snia定义了cdp技术的三大标准,即捕获任意数据变化,存储变化数据以及可以恢复到任意时间点。基于这个定义,各存储厂商在cdp的实现上主要围绕以下几点展开:

1、如何减少cdp给生产系统的影响

2、如何高效管理cdp灾备数据

3、如何加快指定时间点的数据恢复

以上三点cdp的核心设计目的,在不同的应用场景和基础架构环境中,都有不同的设计侧重及实现方式。一般来说,cdp技术的过程如下:当cdp系统捕获到一个写请求后,需要将写请求的数据部分另外复制到cdp仓库中保存,并且生成一份元数据来描述cdp数据仓库中的复制数据如何对应到原始存储位置以及捕获的时间点等信息;当需要对保护存储数据进行恢复时,需要通过待恢复的时间点信息,来查询cdp元数据,以获得复制数据在cdp仓库中的位置信息;当cdp系统重建的过程中,则需要通过元数据信息快速定位到可用的cdp仓库位置,以便cdp系统的高效启动。可见,从cdp数据如何高效存储,到如何快速定位读取,从cdp数据生命周期管理,到可视化的数据查询,元数据的管理贯穿了整个cdp系统设计,因此,元数据管理模块的设计对整体cdp系统可靠性和性能起关键性作用,可以说是cdp系统的核心。

现有技术中,cdp数据流分为回写和写透两种方式:

1、回写方式中,捕获模块只对原始请求做很少处理,直接下发原始请求,将cdp数据放入fifo(firstinfirstout,先进先出)队列中,由后台进程进行刷盘处理,原始写请求结束后返回上层调用。这种方式的优势是,基本对原系统io请求没有延迟影响,不会受到cdp系统可能的性能下降造成业务停顿。缺点是当系统异常关机时,如果fifo队列中有尚未刷盘的数据,那么cdp数据中会遗漏少量的数据;

2、写透方式中,捕获模块需要确保原始写请求和cdp写请求都成功写入到各自存储设备后,才能返回给上层应用,其优势是,在强一致性的约束下,cdp数据记录每一笔写请求,之后数据恢复的rpo是0,其缺点是整个系统的延迟决定于原始存储和cdp系统的共同作用,在不同io压力下,会有比较大的抖动现象。

因此,实有必要提出一种技术手段,以基于对cdp数据写入的策略不同,实现对持续保护数据cdp中元数据的可靠有效管理。



技术实现要素:

为克服上述现有技术存在的不足,本发明之目的在于提供一种持续数据保护方法及装置,以优化持续数据保护中的元数据的管理。

为达上述目的,本发明提出一种持续数据保护方法,包括如下步骤:

步骤s1,捕获被保护设备的写io请求o-io;

步骤s2,获取cdp数据仓库当前可存储的空间的地址信息,新建一个将所述写io请求o-io信息复制到cdp数据仓库中的c-io,并生成一个元数据结构的m-io,所述c-io与所述m-io之间建立连接;

步骤s3,将步骤s2新建的c-io放入队列中;

步骤s4,从每个cpu的各自队列或全局队列获取每一个c-io的信息;

步骤s5,根据获得的c-io的信息将每个c-io发送到对应的cdp数据仓库存储设备中,并将其指向的m-io写入至相应的cdp元数据存储设备中。

优选地,步骤s2进一步包括:

步骤s200,查询当前的cdp元数据信息,获取cdp数据仓库中可容纳下一个c-io的偏移量c-iooffset;

步骤s201,记录所述写io请求o-io的捕获时间,并根据获得的偏移量、写入的cdp元数据存储设备号以及写io请求o-io生成元数据结构的m-io;

步骤s202,根据所述写io请求o-io的信息以及写入的cdp数据仓库设备号,新建所述c-io,并将所述c-io结构体中的指针(m-pt)指向当前m-io。

优选地,所述写io请求o-io中包含的信息包括但不限于写入设备号dev_id,写入起始地址o-iooffset,写入长度o-iolength以及写入数据data,所述c-io请求包括的信息包括但不限于写入的cdp数据仓库设备号cdp_dev_id,一个指向m-io的指针m-pt,以及复制于所述写io请求的写入数据data,所述m-io包括但不限于时间戳,写入的cdp元数据存储设备号metadata_dev_id,o-iooffset,c-iooffset,o-iolength,并将所述c-io的结构体中的指针m-pt指向当前m-io。

优选地,步骤s5进一步包括:

步骤s500,根据获得的c-io的信息中写入的cdp数据仓库设备号将每个c-io请求发送到对应的cdp数据仓库存储设备;

步骤s501,将获得的c-io的信息中的指向m-io的指针m-pt指向的m-io插入到内存的b+树中;

步骤s502,遍历b+树,获得元数据结构m-io,根据所述m-io中的写入的cdp元数据存储设备号(metadata_dev_id)将所述m-io写入相应的元数据存储设备。

优选地,所述方法还包括:

步骤s6,选择恢复时间点,根据获得该时间点最近的快照将原始数据恢复到选择的恢复时间点。

优选地,步骤s6进一步包括:

步骤s600,对原始数据进行恢复时,选择恢复时间,作为cdp_endtime;

步骤s601,查找该时间点前最近的一个快照;

步骤s602,通过快照时间在cdp元数据中找到相同的时间起点位置,作为cdp_starttime;

步骤s603,对快照数据写入自cdp_starttime到cdp_endtime为止的捕获数据。

优选地,所述方法还包括:

步骤s7,当系统重启时,对cdp元数据进行快速构建,使cdp系统继续运行。

优选地,步骤s7进一步包括如下步骤:

步骤s700,从元数据存储设备读取cdp元数据,并以时间戳构建b+树系统;

步骤s701,寻找最近时间点的io元数据信息;

步骤s702,根据步骤s701找到的信息,得到cdp数据仓库下一个可用存储位置。

为达到上述目的,本发明还提供一种持续数据保护装置,包括

cdp捕获模块,用于捕获被保护设备的写io请求;

c-io/m-io创建单元,用于获取cdp数据仓库当前可存储的空间的地址信息,新建一个将所述写io请求信息复制到cdp数据仓库中的c-io,并生成一个元数据结构的m-io,所述c-io与所述m-io之间建立连接;

队列处理单元,用于将c-io请求创建单元新建的c-io放入队列中;

c-io请求获取单元,用于从每个cpu的各自队列或全局队列获取每一个c-io请求的信息;

io请求信息处理单元,用于根据获得的c-io的信息将每个c-io发送到对应的cdp数据仓库存储设备中,并将其指向的m-io写入至相应的cdp元数据存储设备中。

为达到上述目的,本发明还提供一种持续数据保护方法,包括如下步骤:

步骤s1,捕获被保护设备的写io请求o-io;

步骤s2,获取cdp数据仓库当前可存储的空间的地址信息,新建一个将所述写io请求复制到cdp数据仓库中的c-io;

步骤s3,根据所述c-io获得cdp元数据,将该cdp元数据按时间戳为key,插入到内存中b+树中;

步骤s4,将所述c-io和写io请求o-io发送至相应的存储设备;

步骤s5,在所述c-io和写io请求o-io都返回后,将结果返回给上层应用。

优选地,步骤s2进一步包括:

步骤s200,查询当前的cdp元数据信息,获取cdp数据仓库中可容纳下一个c-io的偏移量;

步骤s201,根据获得的偏移量、所述写io请求o-io的信息以及写入的cdp数据仓库设备号,新建所述c-io。

优选地,所述写io请求o-io中包含的信息包括但不限于写入设备号dev_id,写入起始地址o-iooffset,写入长度o-iolength以及写入数据data,所述c-io请求包括的信息包括但不限于时间戳,写入的cdp数据仓库设备号cdp_dev_id,从步骤s200的偏移量作为写入起始地址c-iooffset,写io请求o-io的写入起始地址o-iooffset,写入长度以及复制于所述写io请求的写入数据data,所述cdp元数据包含的信息包括但不限于时间戳,o-iooffset,c-iooffset,以及o-iolength。

优选地,所述方法还包括:

步骤s6,选择恢复时间点,根据获得该时间点最近的快照将原始数据恢复到选择的恢复时间点。

优选地,步骤s6进一步包括:

步骤s600,对原始数据进行恢复时,选择恢复时间,作为cdp_endtime;

步骤s601,查找该时间点前最近的一个快照;

步骤s602,通过快照时间在cdp元数据中找到相同的时间起点位置,作为cdp_starttime;

步骤s603,对快照数据写入自cdp_starttime到cdp_endtime为止的捕获数据。

优选地,所述方法还包括:

步骤s7,当系统重启时,对cdp数据仓库进行快速重建,使cdp系统继续运行。

优选地,步骤s7进一步包括:

步骤s700,读取整个cdp数据仓库,获得保存的元数据信息;

步骤s701,定位元数据中最后的时间点,获得cdp数据仓库下一个可存储的位置。

为达到上述目的,本发明还提供一种持续数据保护装置,包括:

cdp捕获模块,用于捕获被保护设备的写io请求o-io;

c-io请求创建单元,用于获取cdp数据仓库当前可存储的空间的地址信息,新建一个将所述写io请求信息复制到cdp数据仓库中的c-io;

元数据处理单元,用于根据所述c-io获得cdp元数据,将该cdp元数据按时间戳为key,插入到内存中b+树中;

io请求处理单元,用于将所述c-io请求和写io请求o-io发送至相应的存储设备;

结果处理单元,用于在所述c-io请求和写io请求o-io都返回后,将结果返回给上层应用。

与现有技术相比,本发明一种持续数据保护方法及装置基于对cdp数据写入的策略不同,并且考虑到cdp数据存储介质的多样性,实现了优化持续数据保护中元数据有效管理的目的。

附图说明

图1为本发明一种持续数据保护方法之一实施例的步骤流程图;

图2为本发明实施例中持续数据保护过程示意图;

图3为本发明具体实施例中两个cpu的环境下c-io放入队列写入cdp数据仓库的示意图;

图4为本发明具体实施例中m-io写入元数据存储设备的示意图;

图5为本发明具体实施例中步骤s6的细部流程图;

图6为本发明具体实施例中原始数据恢复的实例图;

图7为本发明具体实施例中步骤s7的细部流程图;

图8为本发明具体实施例中cdp数据重建的实例图;

图9为本发明一种持续数据保护方法之另一实施例的步骤流程图;

图10为本发明具体实施例中步骤s6的细部流程图;

图11为本发明具体实施例中步骤s7的细部流程图;

图12为本发明具体实施例中对c-io在磁盘中的布局的优化示意图;

图13为本发明一种持续数据保护装置一实施例的系统架构图;

图14为本发明一种持续数据保护装置另一实施例的系统架构图。

具体实施方式

以下通过特定的具体实例并结合附图说明本发明的实施方式,本领域技术人员可由本说明书所揭示的内容轻易地了解本发明的其它优点与功效。本发明亦可通过其它不同的具体实例加以施行或应用,本说明书中的各项细节亦可基于不同观点与应用,在不背离本发明的精神下进行各种修饰与变更。

一般地说,在rpo要求不是0的情况下,应该考虑尽可能将对原始存储的延迟影响降低到最小的方案。cdp数据采用回写方式是比较理想的选择。图1为本发明一种持续数据保护方法之一实施例的步骤流程图,图2为本发明实施例中持续数据保护过程示意图。如图1及图2所示,本发明一种持续数据保护方法,采用回写方式,包括如下步骤:

步骤s1,捕获被保护设备的写io请求。

在本发明具体实施例中,由cdp捕获模块捕获到写io请求,所述写io请求可称之为o-io(originalio,原始io)请求,所述写io请求中包含的信息包括但不限于:写入设备号(dev_id),写入起始地址(o-iooffset),写入长度(o-iolength),写入数据(data)。

步骤s2,获取cdp数据仓库当前可存储的空间的地址信息,新建一个将所述写io请求信息复制到cdp数据仓库中的io请求,并生成一个元数据结构的m-io(metadataio),所述c-io与所述m-io之间建立连接。在本发明具体实施例中,将该新建的将所述写io请求信息复制到cdp数据仓库中的io请求称为c-io(cdpio),用于写入c-io请求信息的存储设备为cdp数据仓库。

在本发明具体实施例中,步骤s2进一步包括:

步骤s200,查询当前的cdp元数据信息,获取cdp数据仓库中可容纳下一个cdpio的偏移量。在本发明具体实施例中,cdp元数据是采用b+树形式写入cdp元数据存储设备中的,因此,于内存里保存的b+树中,查询当前的cdp元数据信息,以获得cdp数据仓库中可容纳下一个c-io(cdpio)的偏移量(c-iooffset)。

步骤s201,记录所述写io请求的捕获时间,并根据获得的偏移量(c-iooffset)、写入的cdp元数据存储设备号(metadata_dev_id)以及写io请求生成元数据结构的m-io(metadataio)。在本发明具体实施例中,所述m-io(metadataio)包含的信息包括但不限于:时间戳,写入的cdp元数据存储设备号(metadata_dev_id),o-iooffset,c-iooffset,o-iolength。

步骤s202,根据所述写io请求的信息以及写入的cdp数据仓库设备号,新建所述c-io,并将所述c-io结构体中的指针(m-pt)指向当前m-io。在本发明具体实施例中,所述c-io包括的信息包括但不限于写入的cdp数据仓库设备号(cdp_dev_id),一个指向m-io(将cdp元数据写入专门用来存放元数据的cdp元数据存储设备的io)的指针(m-pt),以及复制于所述写io请求的写入数据(data)。

步骤s3,将步骤s2新建的c-io放入fifo队列中。在本发明具体实施例中,如果对被保护存储设备启用了多队列,则将所述c-io放入各自cpu队列;如果被保护存储设备是单队列,则将所述c-io放入全局队列。也就是说,本发明可应用于单cpu环境,也可应用于多cpu环境,多个cpu可能同时都往同一存储设备上些数据,若每个cpu都有各自的队列,则所述c-io放至各自队列当中,若只有一个全局队列,则所有c-io放入全局队列

步骤s4,从每个cpu的各自c-io队列或全局队列获取每一个c-io请求的信息。这里需说明的是,如果是单核(一个cpu),那么只有一个fifo,如果是多核(多个cpu),每个核都有一个各自的fifo,那么则需要对多个fifo进行合并操作后再进行依次获取每一个c-io的信息。

步骤s5,根据获得的c-io请求的信息将每个c-io发送到对应的cdp数据仓库存储设备中,并将其指向的m-io写入至相应的cdp元数据存储设备中。

具体地,步骤s5进一步包括:

步骤s500,根据获得的c-io的信息中写入的cdp数据仓库设备号将每个c-io发送到对应的cdp数据仓库存储设备。在本发明具体实施例中,对于每一个c-io,则根据c-io信息中的cdp数据仓库设备号cdp_dev_id,将c-io发送到对应的cdp数据仓库存储设备中。

步骤s501,将获得的c-io的信息中的指向m-io的指针m-pt指向的m-io插入到b+树中,在本发明中,b+树在内存中进行缓存,b+树的叶子节点内容会作为m-io存放到元数据存储中。

步骤s502,遍历b+树,获得元数据结构的m-io,根据所述m-io中的写入的cdp元数据存储设备号(metadata_dev_id)将所述m-io写入相应的元数据存储设备。

这里需说明的是,在本发明具体实施例中,步骤s5-s6为后台刷盘线程,但本发明不以此为限。

如图3所示,假设有两个cpu的环境下,后端存储开启多队列特性,那么意味着两个cpu可能同时都在往同一存储上写数据。假设每一个cpu都有本地队列用来存放c-io,例如图3中data1,3,5,7号c-io放在cpu1的队列,data2,4,6,8号c-io放在cpu2的队列中,当回写线程开始运行时,首先获得cpu1和cpu2上的队列,并合并,如图3中间部分,之后从data1开始按顺序写入到cdp数据仓库中。

在将c-io写入cdp数据仓库的同时,将相应c-io的信息中的指向m-io的指针m-pt指向的m-io插入到内存的b+树中,并遍历b+数,获得m-io,根据metadata_dev_id写入元数据存储设备,如图4所示。

可见,在回写模式下,m-io和c-io数据是分不同io写入不同的设备,这种m-io和c-io数据分离的设计也有利于cdp系统的查询和重建。另一方面,随着存储介质的发展,由于存储特性不同于hdd的、基于flash的ssd被广泛的应用,在不远的将来成为热数据的主力介质。对于这种新型的介质,操作系统也为其开发了新型的传输协议,使其充分发挥介质带来的性能提升,尽管在读写性能上,ssd明显优于hdd,不过需要擦除写的硬件特性,也对存储系统如何提高ssd生命周期提出了有别于hdd的要求。对于存储系统中的cdp系统,设计上如何兼容ssd和hdd,对于不同后端原始存储的介质,都能发挥出应有的特性和性能成为一种挑战。在本发明中,由于m-io和c-io都是批量连续写入的,如果cdp采用hdd存储介质,本发明则可充分利用hdd存储介质的顺序写性能,如果cdp采用ssd存储介质,本发明则可配合trim命令,也可以最大程度避免ssd存储介质写放大和使用寿命问题。

优选地,本发明一种持续数据保护方法,还包括如下步骤:

步骤s6,选择恢复时间点,根据获得该时间点最近的快照将原始数据恢复到选择的恢复时间点。如图5所示,具体地,步骤s6进一步包括:

步骤s600,对原始数据进行恢复时,选择恢复时间,作为cdp_endtime;

步骤s601,查找该时间点前最近的一个快照;

步骤s602,通过快照时间在cdp元数据中找到相同的时间起点位置,作为cdp_starttime;

步骤s603,对快照数据写入自cdp_starttime到cdp_endtime为止的捕获数据。

如图6所示,其上半部分的树形结构为当前cdp元数据按照每个io的时间戳为key组成的b+树结构,从左到右记录了time1到time11的元数据,作为b+树叶子节点,元数据通过指针可以获得此元数据项的具体信息,包括了io在被保护存储设备上的偏移量,长度等信息。在cdp数据仓库中,也存储了当前对应于元数据的具体io数据信息,分别为data1至data11,每一个data都是原始写io请求的一份数据复制。

假设现在的时间点是time11,但需要将数据恢复到time8的时刻。其过程描述如下:

首先从time8时刻起,往前寻找最近的一次快照点。例如找到time4的时刻存在快照信息,接下来,需要找到time4到time8为止,数据在cdp数据仓库中的记录。这时候,需要利用b+数的搜索功能。在图6中,具体过程为通过实线箭头1的方向,找到time4叶子节点,通过虚线箭头方向,找到time8叶子节点,由于b+树叶子节点内部有指针连接,所以可以通过上述找到的time4叶子遍历到time8的叶子节点。至此,已经获得了time4~time8之间,cdp元数据的所有信息,之后,遍历读取每一个元数据项信息,通过cdp偏移量和长度信息,在cdp数据仓库中读取数据,并将数据依次地写入快照。如图6中虚线框标记的内容,以此完成数据从time11恢复到time8的整个过程。

优选地,本发明一种持续数据保护方法,还包括如下步骤:

步骤s7,当系统重启时,对cdp元数据进行快速构建,使cdp系统继续运行。具体地,如图7所示,步骤s7进一步包括如下步骤:

步骤s700,从元数据存储设备读取cdp元数据,并以时间戳构建b+树系统;

步骤s701,寻找最近时间点的io元数据信息;

步骤s702,根据步骤s701找到的信息,得到cdp数据仓库下一个可用存储位置,当有新的写io请求发生时,即可快速地得到其对应的cdp数据仓库的起始位置。

如图8所示,图8的右边列表模拟的是cdp元数据在元数据存储设备上的存放布局。当系统重启时,从元数据存储设备(如磁盘)读取,在本实施例中就是依次从time1读取到time11,由于元数据存放的物理连续性,所以磁盘可以通过有限的顺序读操作,快速将cdp元数据读取至内存;在依次读取的过程中,通过以time时间戳为key,构建出图8左边的b+数结构;当完成b+数的构建后,最右边的叶子节点则记录了最近一次的cdp元数据信息,当有新的写请求发生时,可以快速地知道,其对应的cdp数据仓库的起始位置(time11代表的cdp偏移量+长度),至此,cdp系统的重建得以完成。

承前所述,在rpo严格要求为0的情况下,cdp数据的写入模式需要使用写透方式,在这种模式下,整个存储系统的性能很大程度上取决于cdp设备的性能表现,所以元数据的组织模式会和回写方式有所不同,在写透模式下,系统的延迟会取决于cdp系统的延迟,所以在这个模式下,其主要通过减少io的数量来降低延迟。

图9为本发明一种持续数据保护方法之另一实施例的步骤流程图。如图9所示,本发明一种持续数据保护方法,采用写透方式,包括如下步骤:

步骤s1,捕获被保护设备的写io请求。

在本发明具体实施例中,由cdp捕获模块捕获到写io请求,可称之为o-io(originalio,原始io)请求,该写io请求中包含的信息包括但不限于:写入设备号(dev_id),写入起始地址(o-iooffset),写入长度(length),写入数据(data)。

步骤s2,获取cdp数据仓库当前可存储的空间的地址信息,新建一个将所述写io请求信息复制到cdp数据仓库中的io请求。在本发明具体实施例中,将该新建的将所述写io请求信息复制到cdp数据仓库中的io请求称为c-io(cdpio)。

在本发明具体实施例中,步骤s2进一步包括:

步骤s200,查询当前的cdp元数据信息,获取cdp数据仓库中可容纳下一个cdpio的偏移量。在本发明具体实施例中,cdp元数据是采用b+树形式写入cdp元数据存储设备中的,因此,于内存里保存的b+树中,查询当前的cdp元数据信息,以获得cdp数据仓库中可容纳下一个cdpio的偏移量。

步骤s201,根据获得的偏移量、所述写io请求的信息以及写入的cdp数据仓库设备号,新建所述c-io请求。在本发明具体实施例中,所述c-io请求包括的信息包括但不限于时间戳,写入的cdp数据仓库设备号(cdp_dev_id),从步骤s200的偏移量作为写入起始地址(c-iooffset),o-io写入起始地址o-iooffset,写入长度(o-iolength),以及复制于所述写io请求的写入数据(data)。

步骤s3,根据所述c-io获得cdp元数据,并将该元数据按时间戳为key,插入到内存中b+树中。在本发明具体实施例中,所述cdp元数据包含的信息包括但不限于时间戳,o-iooffset,c-iooffset,o-iolength,并将该元数据按时间戳为key,插入到内存中b+树中,在写透模式下,由于元数据的内容附加到了c-io前面,因此,元数据不需写入元数据存储设备中。

也就是说,在写透模式下,首先会根据步骤s2在内存中分配一个c-io结构体,该c-io结构体的字段包含时间戳,cdp_dev_id,o-iooffset,o-iolength,c-iooffset以及data,其中从内存的b+树中获取到下一个可以存放c-io的偏移量,赋值给该c-io结构体的c-iooffset字段,获得当前时间戳,赋值给该c-io的时间戳字段,而该c-io结构体字段中的时间戳,o-iooffset,o-iolength和c-iooffset又被复用,作为cdp元数据结构,并以时间戳为key,放入b+树中。也就是说,在写透模式下,没有回写方式下的m-io,cdp元数据都在c-io结构体中保存。

步骤s4,将所述c-io请求和o-io请求发送至相应的存储设备,即将所述c-io请求发送到cdp数据仓库,所述o-io请求是被捕获到的io,需要继续发到本来应该到的磁盘上。

步骤s5,在c-io和o-io都返回后,将结果返回给上层应用,这里的返回是指下一层驱动程序完成了具体io之后给上层驱动的通知,返回的内容会包括是否写入磁盘等信息。

可见,对比回写模式,在写透模式下,元数据信息和cdp复制数据是合并在一个io请求(即相当于包含了m-io和c-io的内容)中,而不是回写模式里的两个独立io(一个io是写到cdp仓库中的数据复制,另外一个io是将元数据写到专门用来存放元数据的存储设备),这是为了通过减少io数量来减缓写透模式下强一致性的延迟表现。但是当cdp系统需要重建时,由于元数据和cdp复制数据连续放在cdp数据仓库中(指是将m-io和c-io的内容合并在一起,作为一个io往下层发送),使得重建过程需要读取整个cdp数据仓库才能获得足够的信息,会极大的延缓业务的正常运行时间,所以即便使用写透模式,也有必要在后台策略性的将元数据保存在某个存储空间中,以加速cdp重建的过程。基于这个考虑,cdp后台线程会策略性的将b+树形式组织的元数据写入既定的存储设备。

优选地,本发明一种持续数据保护方法,还包括如下步骤:

步骤s6,选择恢复时间点,根据获得该时间点最近的快照将原始数据恢复到选择的恢复时间点。具体地,如图10所示,步骤s6进一步包括:

步骤s600,对原始数据进行恢复时,选择恢复时间,作为cdp_endtime;

步骤s601,查找该时间点前最近的一个快照;

步骤s602,通过快照时间在cdp元数据中找到相同的时间起点位置,作为cdp_starttime;

步骤s603,对快照数据写入自cdp_starttime到cdp_endtime为止的捕获数据。

由于写透模式下对原始数据的恢复流程和回写模式下一致,在此不予赘述。

优选地,本发明一种持续数据保护方法,还包括如下步骤:

步骤s7,当系统重启时,对cdp数据仓库进行快速重建,使cdp系统继续运行。也就是说,在系统重启时,系统需要读取cdp仓库中的记录,重新构造出b+树,放入内存中,对于写透方式重建没有元数据存储,回写方式重建则需要读取元数据存储。

具体地,如图11所示,步骤s7进一步包括如下步骤:

步骤s700,读取整个cdp数据仓库,获得保存的元数据信息,在写透模式下进行cdp重建,由于元数据分散在cdp数据仓库的各个角落,因此需要读取所有cdp仓库的内容才能将需要的元数据信息收集完毕。

步骤s701,定位元数据中最后的时间点,获得cdp数据仓库下一个可存储的位置,例如disk2是cdp数据仓库存储,这里则需要获得disk2上从哪个offset开始,可以用来存放后续的c-io。需说明的是,由于cdp数据仓库是个循环使用的设备,在本实施例中disk2作为cdp数据仓库,当容量用完后,后续的c-io会从disk2的起始位置覆盖原先的内容,所以下一个可以存放c-io的磁盘offset并不一定在上一个的后面,在重建的cdp的时候,需要下一个c-io的位置。

举个例子,如果disk2只能存放5个数字,现在依次已经存放了1,2,3,4,5,那么再加一个6的时候,6会替换掉1,这时候下一个可以用来存放数据的位置就是2所在位子。

写透模式下,由于c-io中包含了其元数据信息,而文件系统下发的io一般都是以4k整数倍对齐的,在写透模式下的c-io不仅仅包含了上层发过来的数据,还包含了回写模式下m-io的元数据内容,使得整个io不再是以4k整数倍对齐了,这样对磁盘写性能带来了损失,因此需要额外的优化措施。图12的第一行显示了没有优化时,c-io在磁盘中的布局情况。1表示c-io里元数据信息部分(时间戳,o-iooffset,o-iolength),2表示从o-io复制来的data。如果1部分占用256字节,2部分一般是4k的话,整个io大小就是4352字节。假设后端存储的block大小是512字节,从第0号block,写入4352字节的数据,在底层存储设备上会演变成,将前4096字节写入到前8个block,将第9个block的数据从设备上读取出来,将4352的后256字节覆盖读取出来的512字节的前256字节,然后再将合并完成的数据写入第9个block。所以可以看出,对于不对齐的写操作,在后端存储中会演变成多个io进行,这也严重的影响了整体性能。

针对这个现象,首先想到的就是将1部分的256字节扩展为block大小的整数倍,例如4096字节。这样的话,原先一个4k的写操作,在c-io的表现形式就是占用8k空间,第一个4k空间里的前256字节记录c-io元数据,其余写0。后4k是从o-io复制来的data部分。如此,避免了后端存储由于不对齐操作带来的损失。

但是,这样的布局很浪费空间。对cdp重建过程也不利。如何利用第一个4k的空间,多存储一些c-io元数据成为设计的要点。假设每一个c-io需要使用256字节存放元数据,那么4k容量可以存放16个c-io元数据信息。那么在cdp运行过程中,尽可能的将c-io元数据合并在一起,是一个节约空间的方案,如图12的下半部分所示,第一个1部分的4k存储空间存放了16个c-io元数据(图中未示全,若元数据占用256字节的话,4k(4096字节)可以存放16个元数据),这样的设计一方面避免了不对齐写操作带来的损失,另一方面也节约了存放元数据所需要的空间。

图13为本发明一种持续数据保护装置一实施例的系统架构图。如图13所示,本发明一种持续数据保护装置,采用回写方式,包括:

cdp捕获模块101,用于捕获被保护设备的写io请求。

在本发明具体实施例中,由cdp捕获模块101捕获到写io请求,可称之为o-io(originalio,原始io)请求,该写io请求中包含的信息包括但不限于:写入设备号(dev_id),写入起始地址(offset),写入长度(length),写入数据(data)。

c-io/m-io创建单元102,用于获取cdp数据仓库当前可存储的空间的地址信息,新建一个将所述写io请求信息复制到cdp数据仓库中的io请求,以复制所述写io请求的信息,并生成cdp元数据结构的m-io(metadataio),所述c-io与所述m-io之间建立连接。在本发明具体实施例中,将该新建的将所述写io请求信息复制到cdp数据仓库中的io请求称为c-io(cdpio)。

在本发明具体实施例中,c-io请求创建单元102进一步包括:

地址偏移量获取模块,用于查询当前的cdp元数据信息,获取cdp数据仓库中可容纳下一个cdpio的偏移量。在本发明具体实施例中,cdp元数据是采用b+树形式写入cdp元数据存储设备中的,因此,偏移量获取单元于内存里保存的b+树中,查询当前的cdp元数据信息,以获得cdp数据仓库中可容纳下一个cdpio的偏移量(c-iooffset)。

m-io创建模块,用于记录所述写io请求的捕获时间,并根据获得的偏移量(c-iooffset)、写入的cdp元数据存储设备号(metadata_dev_id)以及写io请求生成元数据结构的m-io(metadataio)。在本发明具体实施例中,所述m-io(metadataio)包含的信息包括但不限于:时间戳,写入的cdp元数据存储设备号(metadata_dev_id),o-iooffset,c-iooffset,o-iolength。

c-io创建模块,用于根据所述写io请求的信息以及写入的cdp数据仓库设备号,新建所述c-io,并将所述c-io结构体中的指针(m-pt)指向当前m-io。在本发明具体实施例中,所述c-io包括的信息包括但不限于写入的cdp数据仓库设备号(cdp_dev_id),一个指向m-io(将cdp元数据写入专门用来存放元数据的cdp元数据存储设备的io)的指针(m-pt),以及复制于所述写io请求的写入数据(data)。

队列处理单元103,用于将c-io请求创建单元102新建的c-io放入队列中。在本发明具体实施例中,如果对被保护存储设备启用了多队列,则将所述c-io放入各自cpu队列;如果被保护存储设备是单队列,则将所述c-io放入全局队列。也就是说,本发明可应用于单cpu环境,也可应用于多cpu环境,多个cpu可能同时都往同一存储设备上些数据,若每个cpu都有各自的队列,则所述c-io放至各自队列当中,若只有一个全局队列,则所有c-io放入全局队列。

c-io请求获取单元104,用于于后台从每个cpu的各自c-io队列或全局队列获取每一个c-io的信息。

io请求信息处理单元105,用于根据获得的c-io的信息将每个c-io请求发送到对应的cdp数据仓库存储设备中,并将其指向的m-io写入至相应的cdp元数据存储设备中。

具体地,io请求信息处理单元105进一步包括:

c-io请求信息处理单元,用于根据获得的c-io的信息中写入的cdp数据仓库设备号将每个c-io发送到对应的cdp数据仓库存储设备。在本发明具体实施例中,对于每一个c-io,根据c-io信息中的cdp_dev_id,将c-io发送到对应的cdp数据仓库存储设备中。

m-io插入单元,用于将获得的c-io的信息中的指向m-io的指针m-pt指向的m-io插入到内存的b+树中。

m-io信息写入单元,用于遍历b+树,获得元数据结构m-io,根据所述m-io中的写入的cdp元数据存储设备号(metadata_dev_id)写入相应的元数据存储设备。

优选地,本发明一种持续数据保护装置,还包括:

原始数据恢复单元,用于将原始数据恢复到选择的恢复时间点。具体地,所述原始数据恢复单元进一步包括:

恢复时间选择模块,用于对原始数据进行恢复时,选择恢复时间,作为cdp_endtime;

快照查找模块,用于查找该时间点前最近的一个快照;

相同时间起点位置确定模块,用于通过快照时间在cdp元数据中找到相同的时间起点位置,作为cdp_starttime;

捕获数据写入模块,用于对快照数据写入自cdp_starttime到cdp_endtime为止的捕获数据。

优选地,本发明一种持续数据保护装置,还包括如下步骤:

cdp元数据重建单元,用于当系统重启时,对cdp元数据进行快速构建,使业务系统继续运行。具体地,所述cdp元数据重建单元进一步包括:

b+树系统构建模块,用于从元数据存储设备读取cdp元数据,并以时间戳构建b+树系统;

寻找模块,用于寻找最近时间点的io元数据信息;

可用存储位置确定模块,用于根据所述寻找模块获得的信息,得到cdp数据仓库下一个可用存储位置,当有新的写io请求发生时,即可快速地得到其对应的cdp数据仓库的起始位置。

图14为本发明一种持续数据保护装置之另一实施例的系统架构图。如图14所示,本发明一种持续数据保护装置,应用于写透方式,包括:

cdp捕获模块140,用于捕获被保护设备的写io请求。

在本发明具体实施例中,由cdp捕获模块捕获到写io请求,可称之为o-io(originalio,原始io)请求,该写io请求中包含的信息包括但不限于:写入设备号(dev_id),写入起始地址(offset),写入长度(length),写入数据(data)。

c-io请求创建单元141,用于获取cdp数据仓库当前可存储的空间的地址信息,新建一个将所述写io请求信息复制到cdp数据仓库中的io请求。在本发明具体实施例中,将该新建的将所述写io请求中的信息复制到cdp数据仓库中的io请求成为称为c-io(cdpio)。

在本发明具体实施例中,c-io请求创建单元131进一步包括:

地址偏移量获取模块,用于查询当前的cdp元数据信息,获取cdp数据仓库中可容纳下一个cdpio的偏移量。在本发明具体实施例中,cdp元数据是采用b+树形式写入cdp元数据存储设备中的,因此,于内存里保存的b+树中,查询当前的cdp元数据信息,以获得cdp数据仓库中可容纳下一个cdpio的偏移量。

c-io请求创建模块,用于根据获得的偏移量、所述写io请求的信息以及写入的cdp数据仓库设备号,新建所述c-io请求。在本发明具体实施例中,所述c-io请求包括的信息包括但不限于时间戳,写入的cdp数据仓库设备号(cdp_dev_id),从地址偏移量获取模块的偏移量作为写入起始地址(c-iooffset),o-io写入起始地址o-iooffset,写入长度(o-iolength),以及复制于所述写io请求的写入数据(data)。

元数据处理单元142,用于根据所述c-io获得cdp元数据,并将该元数据按时间戳为key,插入到内存中b+树中。在本发明具体实施例中,所述cdp元数据包含的信息包括但不限于时间戳,o-iooffset,c-iooffset,o-iolength,并将该元数据按时间戳为key,插入到内存中b+树中。在写透模式下,由于元数据的内容附加到了c-io前面,因此,元数据不需写入元数据存储设备中。

io请求处理单元143,用于将所述c-io请求和o-io请求发送至相应的存储设备。

结果处理单元144,用于在所述c-io和o-io都返回后,将结果返回给上层应用。

优选地,本发明一种持续数据保护装置,还包括:

原始数据恢复单元,用于将原始数据恢复到选择的恢复时间点。具体地,所述原始数据恢复单元进一步包括:

恢复时间选择模块,用于对原始数据进行恢复时,选择恢复时间,作为cdp_endtime;

快照查找模块,用于查找该时间点前最近的一个快照;

相同时间起点位置确定模块,用于通过快照时间在cdp元数据中找到相同的时间起点位置,作为cdp_starttime;

捕获数据写入模块,用于对快照数据写入自cdp_starttime到cdp_endtime为止的捕获数据。

优选地,本发明一种持续数据保护装置,还包括:

cdp数据仓库重建单元,用于对cdp数据仓库进行重建。即在系统重启时,cdp数据仓库重建单元需要读取cdp仓库中的记录,重新构造出b+树,放入内存中,对于写透方式重建没有元数据存储,回写方式重建则需要读取元数据存储。具体地,所述cdp数据仓库重建单元进一步包括:

元数据信息获取模块,用于读取整个cdp数据仓库,获得保存的元数据信息;在写透模式下进行cdp重建,由于元数据分散在cdp数据仓库的各个角落,因此需要读取所有cdp仓库的内容才能将需要的元数据信息收集完毕;

下一存储位置获取模块,用于定位元数据中最后的时间点,获得cdp数据仓库下一个可存储的位置。

以下将通过具体实施例来说明本发明:

在本实施例的系统环境中,假设有三块存储设备,分别是disk1,disk2和disk3,其中disk1是用户需要进行cdp保护的源设备,disk2是用来存储cdp数据的存储设备,disk3是用来保存cdp元数据的存储设备。

首先描述的采用回写方式的cdp方案如下:

1、建立一个cdp保护策略,用disk2作为cdp数据仓库,disk3作为cdp元数据来跟踪disk1所有写请求,并采用cdp回写方式。

2、在内存中构建存放元数据的b+树。

3、为每个cpu分配本地fifo队列。

4、假设当前cdp系统捕获到对disk1偏移量4096,长度为8192的写请求oio。

5、对原始写请求的数据复制一份,称为c-io。

6、获得当前时间戳,例如为t1,新建一个cdp元数据描述体m-io,包括信息有t1,disk1偏移量4096,长度8192。

7、将cio放入当前cpu的fifo队列中。

8、下发被捕获的原始写请求o-io,(disk1,offset4096,length8192)

9、后台刷新进程开始运行时,获取每个cpu的fifo队列,并合并成一个队列,遍历队列中每个c-io,获得cdp仓库可写入偏移量(例如1024),将1024更新到对应的m-io中的cdp仓库偏移字段,并将m-io插入到b+树中。

10、后台刷新进程将合并后的队列中的每个c-io(disk2,offset1024,length8192)顺序写入到disk2中.

11、后台刷新进程将b+树中新建的节点信息m-io写入disk3。

以下描述的是采用写透方式的cdp方案:

1、建立一个cdp保护策略,用disk2作为cdp仓库,来跟踪disk1所有写请求,并采用写透方式。

2、在内存中构建存放元数据的b+树。如果没有配备disk3来作为额外元数据存放的话,此结构仅仅在数据恢复时用来快速定位元数据。

3、为每个cpu分配本地fifo队列。

4、假设当前cdp系统捕获到对disk1偏移量4096,长度为8192的写请求(o-io)。

5、查询b+树信息获得当前cdp仓库空闲地址,例如disk2offset1024。

6、新建一个c-io,所述c-io包含了当前时间戳,o-iooffset4096,o-iolength8192,o-io数据的复制。

7、新建一个用于存放云数据的结构体,包含了时间戳,o-iooffset4096,o-iolength8192,c-iooffset1024。并插入到b+树中。

8、下发o-io。(disk1offset4096,length8192,data)

9、下发c-io。(disk2,offset1024,length8192+metadata_size,data)

接下来描述的是本实施例通过cdp数据来恢复被保护的存储数据到任意一个时间点的过程:

1、假定现在通过使用上述任意一种方案保护了disk1的数据,自从保护时间点t1开始,disk1上的写请求数据都会被存放到disk2上,并在内存中保存了其每一个写io的元数据b+树信息。

2、当前时间点假设是t11,请参考图6。

3、现在需要将源存储的数据回退到t8。

4、通过t8时间点往回回溯查找离t8最近的一次快照时间点,例如在图6中假设是t4。

5、将disk1数据通过快照方式回退到t4时间点状态。

6、通过b+树迅速定位到t4所在的叶子节点(图6中实线箭头1),和t8所在的叶子节点(图6中虚线箭头),从t4到t8,逐个获得元数据信息,并通过元数据信息定位并读取disk2中的复制数据,再根据元数据记录的原始存储偏移量信息,将数据写入到disk1中。

7、完成cdp数据回退。

最后说明通过使用额外元数据存储来重建cdp系统的过程:

1、当系统启动时,cdp系统根据策略记录等待disk1(原始磁盘),disk2(cdp仓库),disk3(cdp元数据)的存储驱动就位。

2、从disk3的第二个sector加载b+树的根节点,请参考图8,图8的右边是元数据在disk3上的存储布局。

3、读取disk3的数据来获得所有的元数据信息,生成b+树,例如图8中树形结构)

4、开启cdp捕获策略。

上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何本领域技术人员均可在不违背本发明的精神及范畴下,对上述实施例进行修饰与改变。因此,本发明的权利保护范围,应如权利要求书所列。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1