一种Ceph分布式块存储的持续数据保护方法

2017-03-14 02:24王胜杰
网络安全技术与应用 2017年2期
关键词:快照历史数据数据保护

◆王胜杰 徐 龙

一种Ceph分布式块存储的持续数据保护方法

◆王胜杰 徐 龙

(四川大学计算机学院 四川 610065)

本文针对目前Ceph分布式块存储快照只能保护周期时间点的历史数据,不能够保护任意时间点历史数据的问题,提出一种适用于Ceph分布式块存储的持续数据保护(Continuous Data Protection,CDP)方法。通过对每次块存储设备写操作的监控,先拷贝将要被该写操作覆盖的数据至历史数据块设备,再执行本次正常写操作,最后记录该过程至日志块设备。数据恢复过程则按照日志记录逆时序回写历史数据即可。通过实验验证所提出的数据持续保护方法能够将块存储恢复至任意时间点的历史数据状态。

Ceph分布式块存储;快照;持续数据保护(CDP)

0 前言

随着云计算技术的兴起和普及,云计算基石云存储系统受到业界的重视。Ceph[1-2]分布式存储系统以其稳定、高可用、可扩展的特性,迅速成为最热门的开源云Openstack的后端存储系统。Ceph中的分布式块存储系统[3]可为云上虚拟机提供块设备,采用多副本策略保证块设备的高可靠性,但对块设备历史数据的保护方法只有快照。快照是块设备在某个特定时间点的一份只读副本,通过写时拷贝(Copy-On-Write,COW)的快照方法对块设备的历史数据进行有效的备份和恢复。然而,快照仅能对周期时间点的块设备数据进行周期保护,连续两次相邻的快照之间的数据将会丢失。在传统容灾系统中,通过持续数据保护(CDP)技术来降低关键数据丢失的风险,解决快照存在的问题。全球网络存储工业协会(SNIA)对CDP的定义是:一种能独立对主要数据进行持续捕捉或跟踪数据修改,并保存变化,从而实现从过去的任何非预设点恢复的方法[4]。目前CDP主要应用于传统远程灾难备份领域,在主流分布式存储系统中几乎都没有提供CDP技术的实现。所以,本文提出了一种适用于Ceph分布式块存储的CDP方法,该方法通过在Ceph块存储客户端加入CDP监控和管理模块,实现对块设备写操作的监控,完成历史数据的备份.数据变化过程的记录和控制块设备数据的恢复。相比快照方法,本文提出的CDP方法能够完成任意时间点历史数据的保护,极大降低数据丢失的风险。

1 Ceph分布式块存储的数据保护方法

1.1 Ceph分布式块存储的快照方法

Ceph分布式块存储的快照框架如图1所示。

图1 Ceph分布式块存储的快照框架

Ceph分布式块存储RBD的快照,是服务端实现的,分布式对象存储RADOS支持的,基于OSD存储服务器的COW基础实现的。

RBD快照的创建基本有两个步骤:(1)向Monitor监控集群获取一个最新快照序号;(2)把本次快照信息保存到RBD的元数据中。整个过程并不触发OSD端的数据操作,所以速度非常快。每间隔一定时间对块设备进行快照的方法是一种提高历史数据可靠性的有效方法,但无法避免历史数据的丢失。例如正当图1中所示块设备(源块设备)和其快照(源块设备快照)的状态,此时源块设备映射对象1`的历史数据对象1已被拷贝至源块设备快照,若在下一次快照周期到了之前,又有新数据写入对象1`位置,对象1`变为对象1``,则对象1`这个历史数据将永久性丢失。

1.2 Ceph分布式块存储的CDP方法

本文提出的Ceph分布式块存储CDP框架如图2所示:

图2 Ceph分布式块存储CDP框架

图2 中源块设备为用户直接使用的数据块设备,用户可以对其完成正常的RBD块设备操作。源块设备在RADOS内映射为对象,每个对象根据所在存储池的存储策略,存储多个副本于不同的OSD,这些OSD可以在不同的服务器、机架、机房、甚至数据中心,以此来保持源块设备的数据高可靠性。针对每个开启CDP的源块设备增加两个辅助块设备:(1)历史块设备,用于存储历史数据,每次存入将被新数据覆盖的旧数据,而不是存储整个新数据所在对象,总大小可根据需求动态变化;(2)日志块设备,用于存储每次数据变化的记录信息,记录信息包括:数据变化时间,源块设备偏移量、历史块设备偏移量、变化数据大小。两个辅助块设备映射的object所在存储池的存储策略设置副本数为1,以此来减小CDP过程对存储的消耗。

1.3 CDP写流程

本文借鉴传统CDP实现技术中的复制参考数据模式[5],在librbd的API中增加对CDP的支持,实现源块设备的监控模块。写请求依据源块设备是否支持CDP来进行分流。不支持的写请求按照原有流程下发,完成正常写操作。支持CDP的写请求执行流程:

(1)根据写入位置和大小,读取源块设备旧数据。

(2)新数据写入源块设备,旧数据写入历史块设备的上次写入数据的尾部,本次数据变化记录信息写入日志块设备的上次写入日志的尾部。

(3)等待所有写操作完成后,将写结果返回给用户,写过程完成。

图3 CDP写流程

1.4 CDP恢复流程

块设备恢复是实现Ceph块存储CDP的关键,其过程也较为复杂。CDP恢复流程如图4:

图4 CDP恢复流程

CDP恢复具体流程:

(1)用户指定块设备需要恢复到的任意时间点。

(2)判断恢复时间点是否合法,即是否在CDP保护的时间范围内(启动CDP和终止CDP时间段内)。合法则进入下一流程,不合法则恢复失败,需要重选恢复时间点。

(3)对源块设备打一个快照,用于保存当前源块设备的数据状态。

(4)逆序读取日志设备中的记录信息,记录信息所占存储空间较小,可一次读取大量日志。

(5)根据每条日志信息,判断恢复时间点是否小于或等于日志时间点。若是,则进入下一步;若否,则表示恢复完成。

(6)根据日志信息,读取历史块设备数据,写入源块设备,返回至(4)。

2 对比实验

本实验验证本文方法能够实现对Ceph块存储设备任意时间点的保护,对比周期性快照能减小历史数据的丢失风险,从而得出在保护关键数据方面,本文方法比快照更有优势。

2.1 实验环境

由于本实验主要目的是验证本文方法实现的功能,故只在一台服务器上完成Ceph分布式块存储系统、KVM/qemu虚拟化平台的部署,服务器配置为:Intel Pentium E6600 3.3GHz CPU、8G内存、1块500G SATA硬盘、CentOS-7-x86_64-minimal操作系统。将Ceph分布式块存储系统与KVM/qemu虚拟化平台集成,创建一台KVM虚拟机,1核CPU,2G内存,操作系统为CentOS-7-x86_64-minimal。

2.2 实验方法

创建一个10G的Ceph块设备,挂载至虚拟机。虚拟机内部为该块设备构建xfs文件系统,挂载该块设备至测试目录/test。此时,启动物理服务器上周期性创建块设备快照的脚本,周期设置为10分钟,启动块设备CDP。同时,虚拟机内执行测试脚本,该脚本功能是每隔1秒删除/test目录下所有文件,获取当前时间作为文件名创建文件至/test,并向文件内写入当前时间。1小时后停止所有脚本和CDP,观察快照和CDP恢复后的块设备数据。

2.3 实验结果与分析

实验获得6个时间点的快照,而CDP恢复时间可以任意取,故随意选择部分时间点,观察快照和CDP所能恢复的测试文件,如表1所示。

表1 实验结果

表1中,周期快照仅在10分钟的整数倍时间点上有数据,其他任意时间点上数据状态均无法恢复,而CDP恢复的块设备在任意时间点有数据,由于数据写入要经过多级缓存和网络传输才能完成最终落盘,所以恢复文件时间点与恢复选择时间点略有差异,属于正常现象,可通过微调恢复时间获得想要恢复的数据。由此实验结果可知,本文提出的CDP方法对每次块设备的写操作都完成了监控,每一次数据变化都被备份和记录,恢复过程将备份按照记录逆时序回写至块设备即可,这就验证了本文提出的CDP可以保证对任意时间点的数据进行有效保护。

3 结束语

本文针对Ceph分布式块存储系统中周期性快照无法保护任意时间点数据,导致历史数据丢失的问题,通过监控块设备的写操作,备份数据并记录变化,利用备份数据和记录日志可恢复块设备至CDP期间任意时间点的数据状态。通过实验验证了本文提出的Ceph分布式块存储CDP实现方法能够保证任意时间点数据的安全。

[1]Sage A Weil,Scott A Brandt,Ethan L Miller,and Carlors Maltzahn.Crush:Controlled,scalable,decentralized placement of replicated data.In Proceedings of the 2006 ACM/IEEE conference on Supercomputing,.ACM,2006.

[2]Home Ceph.http://www.ceph.com/,2016.

[3]Ceph Block Device.http://docs.ceph.com/docs/master/r bd/rbd/,2016.

[4]颜 军.CDP带来的存储新气象[N].计算机时间报,2006.

[5]刘建毅.持续数据保护技术[J].中兴通讯技术,2010.

猜你喜欢
快照历史数据数据保护
面向Linux 非逻辑卷块设备的快照系统①
EMC存储快照功能分析
基于设备PF性能曲线和设备历史数据实现CBM的一个应用模型探讨
基于故障历史数据和BP神经网络的接地选线方案研究
数据保护护航IT转型
——戴尔易安信数据保护解决方案
欧盟通用数据保护条例中的数据保护官制度
应用Hbase快照机制
基于Hadoop技术实现银行历史数据线上化研究
用好细节材料 提高课堂实效
一种基于Linux 标准分区的快照方法