一种安全备份数据的方法

文档序号:8457199阅读:351来源:国知局
一种安全备份数据的方法
【技术领域】
[0001] 本发明涉及网络存储,特别涉及一种大数据存储处理方法。
【背景技术】
[0002] 在大规模存储系统中,为了提高存储系统的可靠性、改善IO性能以及满足海量数 据存储需求,将多个存储集群联合起来,形成统一的存储设备,例如将数据分散存储到集群 中的不同磁盘上以保证并行性,并采用冗余校验机制,在保证数据安全性的同时可获得大 容量和高数据传输率,对于顺序读写数据的存储系统,一般对数据传输带宽要求不苛刻,但 对数据可靠性、存储空间要求较高。即使考虑视频回放、备份恢复等对带宽的额外需求,采 用存储集群时,也存在着严重的性能浪费,同时伴随着严重的能源浪费和磁盘损耗,为了计 算校验数据,数据写入需要额外的读写开销和延时,降低了存储集群的吞吐能力。另一方 面,当向存储集群写入的数据块随机时,磁盘就需要寻址到新的数据位置,此时,随机读写 传输性能比顺序读写传输性能更低。

【发明内容】

[0003] 为解决上述现有技术所存在的问题,本发明提出了一种安全备份数据的方法,包 括:
[0004] 将存储集群中的存储区分为多个组,通过并行编址在每个组内设置并行读写模 式;
[0005] 根据请求队列的历史信息、读写访问在逻辑空间的分布区域及其时间空间分布特 征进行磁盘调度;
[0006] 以磁盘数据流量作为参数,通过预定义缓存策略来过滤随机读写。
[0007] 优选地,所述将存储集群中的存储区分为多个组,通过并行编址在每个组内设置 并行读写模式,进一步包括:
[0008] 将存储集群分为N块逻辑磁盘,构成1行XN列矩阵,将集群划分为N个条块,每 个条块包含N个存储块,其中包括1个校验块,N-I个数据块,将每个存储块划分多个存储 子块,子块内数据的逻辑地址为顺序设置,校验子块由同条块内偏移位置相同的N-I个数 据子块异或运算得出;
[0009] 用X(i,j)表示存储集群中的一个存储块数据,其中i表示其所在的条块号,j表 示所在的磁盘号,x(i,j)位于磁盘j上,0 < i,j〈N,第i条块内的校验块数据Check(i)为 X(i,N-1-i);数据块数据D(i,v)中,V表示其在所属条块内的数据块序号,并且当i+v〈N-l 时,D(i,v) = X(i,v),当 i+v 多 N-I (1)时,X(i,v+1);
[0010] 按照以下过程对数据块进行分组:将每个条块上的N-I个数据块分成P组,每组包 含Q个数据块,其中P彡2, Q彡1,且满足P *Q = N-I ;在各个组内,以数据子块为单位采用 并行数据编址,将组大小为S&pW,第p组、第i条块、第q数据块内的偏移地址为off的数 据子块的逻辑地址LBA p, i,设置为
[0011] LBApjijqj0ff= SGrp · (N · p+i)+off · Q+q
[0012] 其中 0 彡 p〈P,0 彡 i〈N,0 彡 q〈Q,0 彡 off〈SGrp。
[0013] 优选地,所述根据请求队列的历史信息、读写访问在逻辑空间的分布区域及其时 间空间分布特征进行磁盘调度,进一步包括:
[0014] 用r = (tmive,tfinish,status,pos,Ien)记录请求队列rq中的1个读写请求,其 中t mive,tfinish,status,pos,Ien分别表示请求r的到来时间、完成时间、请求状态、起始逻 辑地址和请求长度,其中请求状态包括等待、执行、完成状态,请求长度以分区为单位;
[0015] 由请求r的逻辑地址pos映射到磁盘号j,按以下方法获得映射函数f (r. pos),:
[0016] (1)由POS得出该请求所在的组号p、组内块号q及条块号i:
[0017] p = r. pos/SGrp · N
[0018] q = (r. pos) MOD Q
[0019] i = (r. pos)M0D(SGrp · N)/SGrp
[0020] (2)根据组号p、组内块号q、条块号i,得出pos指向的数据块数据D(i,P ·0+(!);
[0021] (3)利用 D(i,p · Q+q),获得 pos 所在磁盘 j,即当 i+p · Q+q〈N_l 时 j = p · Q+q ; 否则 j = P · Q+q+1 ;
[0022] 对请求队列rq中各个读写请求,根据其逻辑地址所在的磁盘,划分为N个集合:
[0023] Sj= {r|r e rq Λ fCr.pos) = j},其中0彡j〈N,用η·」表示集合Sj中元素的个 数;
[0024] 如果请求集合Sj中的请求满足下式,则可以调度对应的磁盘j到待机状态:
[0025] t_ maxH ,其中tth为磁盘调度的时间阈值,t为当前时间,下次需要 访问该磁盘时,再将其调度到运行状态。
[0026] 本发明相比现有技术,具有以下优点:
[0027] 本发明提出了一种存储方法,在写入磁盘过程中避免了因生成校验数据而产生的 额外读写开销,通过数据的顺序写入有效减少了寻址操作,提高了存储性能。
【附图说明】
[0028] 图1是根据本发明实施例的安全备份数据的方法的流程图。
【具体实施方式】
[0029] 下文与图示本发明原理的附图一起提供对本发明一个或者多个实施例的详细描 述。结合这样的实施例描述本发明,但是本发明不限于任何实施例。本发明的范围仅由权 利要求书限定,并且本发明涵盖诸多替代、修改和等同物。在下文描述中阐述诸多具体细节 以便提供对本发明的透彻理解。出于示例的目的而提供这些细节,并且无这些具体细节中 的一些或者所有细节也可以根据权利要求书实现本发明。
[0030] 本发明的一方面提供了一种安全备份数据的方法,以提高顺序数据存储中存储集 群的写入性能。图1是根据本发明实施例的方法流程图。
[0031] 本发明利用区段映射进行地址转换,将非顺序的读写请求地址映射到连续的地址 空间,以实现连续写入。特别适合顺序数据存储中的大块数据的地址转换;利用基于缓存的 存储集群写优化存储架构,在缓存中缓存并构造与存储集群条块对齐的写数据,然后整个 条块写入存储集群,实现对存储集群的完全写。
[0032] 在写数据地址转换和对齐写数据过程中,首先引入虚拟地址、物理地址的定义。虚 拟地址是应用程序发来的读写请求地址;物理地址是数据在存储集群存储空间内的实际地 址。地址转换过程实现虚拟地址到物理地址的映射,即将非顺序(可能部分顺序)的虚拟 地址映射为连续的物理地址,并记录映射关系到地址转换表。经过地址转换后,写操作在物 理地址空间内完全顺序化。
[0033] 对齐写数据是对物理地址顺序化的写请求进行聚合或拆分,在内存缓存区内组织 成为与存储集群条块对齐的写请求,即1个写请求在存储集群上恰好占满1个或多个完整 的条块。为了防止掉电导致缓存区内数据丢失,采用非易失性RAM镜像内存缓存区内的写 请求。
[0034] 在本发明的区段映射中实现地址转换,以每次写操作的写区段为单位进行地址映 射,主要数据结构如下。
[0035] 1)映射元数据:开多式为(ViStart,PiStart,Len i, next),描述一个映射区段,ViStart, PistartAeivnext分别为映射区段i的虚拟起始地址、物理起始地址区段长度和相邻映射元 数据索引,外存数据结构简称元数据;
[0036] 2)映射存储区:外存中映射元数据的存储区段;
[0037] 3)地址转换表:记录每个虚拟地址对应的元数据索引(index),外存数据结构。
[0038] 地址转换时,先根据虚拟地址从地址转换表获得元数据索引,然后在映射存储区 由索引值获得元数据,并根据元数据进行区段地址转换。
[0039] 地址转换时可以从虚拟区段(Vstart,VEnd)中的V End,其中Vstart为虚拟区段 的虚拟起始地址,ViEnd为虚拟区段的虚拟结束地址,根据虚拟地址逐个查询,最坏情况是查 询所有块的虚拟地址。
[0040] 为了进一步提高地址转换效率,可以考虑引入LSM树进行映射区段查询。在内存 中建立映射元数据的LSM树,用(V iStart,ViEnd,pimrta)表示叶子节点,其中Vstart为区段i的虚 拟起始地址,V iEnd为区段i的虚拟结束地址,p imeta是指向元数据(Vi Stal^PistartAeivnext) 的指针(已读入内存)。
[0041] 父节点的关键字是所有子树中的最大关键字,每个叶子节点只包含两个关键字, 表示一个顺序区段。查找时如果查找值位于某个区段则查找成功,否则可由其父节点的关 键字,确定其相邻区段,映射按虚拟地址由低到高的顺序排列在链表中(由映射插入规则, 虚拟区段不会相交)。
[0042] 设请求k的虚拟地址区段为(Vkstart,VkEnd),利用LSM树查询映射区段的过程如下: [0043] 1)分别查找Vkstart, VkEnd在LSM树中的位置;
[0044] 2)将Vkstart, VkEnd之间所有存在的映射作为要查找的映射。
[0045] 为了防止LSM树过大,优选地可设定LSM树的最大节点数,当超过该最大节点数时 便构建一棵新的LSM树,查找时先根据虚拟地址确定所在的LSM树再进行查找。
[0046] 在数据写入请求对齐方面,顺序数据存储中为了实现对存储集群的完全写,需要 运行一个对齐写请求的驱动程序,主要包括2个线程和1个写请求队列,2个线程分别是接 收和发送线程。
[0047] 1)接收线程:监控和接收应用程序发送给存储集群的写请求,首先进行上述地址 转换,转换为物理空间内连续的写请求,并将其加入到写请求队列中。
[0048] 2)发送线程:当写请求队列不为空时从写请求队列中取出并处理写请求。
[0049] 首先,需要获取存储集群的参数,包括条块单位、成员磁盘数,再由条块单位乘以 成员磁盘数,获得条块大小。可通过读取存储集群配置文件获得条块单位和成员磁
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1