一种基于十字交叉纠删编码的快速数据恢复方法及系统与流程

文档序号:12665120阅读:312来源:国知局
一种基于十字交叉纠删编码的快速数据恢复方法及系统与流程

本发明涉及数据存储及恢复技术领域,特别涉及一种基于十字交叉纠删编码的快速数据恢复方法及系统。



背景技术:

在云计算虚拟化大背景下,海量数据的存储依然作为一个关键问题而存在,存储设备的价格虽然逐渐走低,但是数据量的激升依然为数据中心的存储带来了较大的成本,在传统机械盘跟NVMe设备并行的现状下,机械盘依然作为存储的主力,而NVMe设备也需要一些技术方案来降低存储的单位成本。

纠删码为了解决RAID机制只能容错2块数据丢失和副本需要3倍存储的情况下,应运而生,目前纠删码已经被各大开源和商业系统采纳,纠删码的存在为系统带来了较大的CPU、带宽消耗,同时纠删码通过对数据块的逆运算来还原丢失的数据块,因此,在纠删码技术应用的同时,恢复成为重要的研究目标。

目前开源文件系统中,对数据的存储大致有以下三种模式:基于底层硬件系统、基于副本机制和基于纠删码机制。

开源文件系统Lustre没有副本的概念,数据按照条带的方式存储在节点底层硬件,数据的安全性由底层硬件进行保护,本身并未提供冗余机制防止节点失效,底层硬件一般为raid盘阵等设备,运行于服务器内部或者为单独的盘整,因此,运行lustre的节点一旦因为其他问题宕机,lustre的数据将不能正常访问,传统存储采用JBOD提供服务,通过FC、iSCSI、FCoE等协议进行交互,需要依赖固定厂商的支持,设备费用高昂,不容易扩展。

开源文件系统HADOOP、CEPH等提供了副本机制,通过将数据的三个副本分布在不同的节点来达到数据的可靠性,任一副本丢失,可以通过复制就近的副本来恢复到三个副本的冗余量,根据不同的安全性,将数据的副本数设置为2、3、6等,通常生产环境数据的副本数在3-6之间,因此,一个额定1PB的存储系统,实际需要的存储空间为3PB,大大提高的数据的存储成本。

由于副本带来的额外200%的存储开销,近年来,纠删码作为一种新型存储形式开始出现,目前像HADOOP、CEPH、GLUSTERFS等系统已经将纠删码机制实现于系统内部,但是考虑到纠删码计算的开销,目前大多用于冷数据的存储,即将写入系统内部的数据,先存储为副本模式,然后在数据访问热度下降的时候,转化为纠删码的形式进行存储。纠删码存储需要消耗较大的CPU性能来完成运算,同时,数据丢失时,需要将条带内分布在各个节点内的数据读到某一节点再进行计算。因此,纠删码的运用为系统带来了额外的CPU消耗和带宽消耗。

目前的数据存储方案共有三种,分别为RAID阵列、副本和纠删码。

RAID阵列目前较为通用,用于单节点存储,为其他节点提供共享服务和数据存储,但是RAID阵列存在以下问题:

a、数据通过单一入口进入,虽然通过硬件进行计算,但带宽依然较低,不能发挥出磁盘的性能;

b、数据只能容忍两个磁盘失效,如果超过两块磁盘,数据将无法恢复;

c、数据只能位于单一节点上,由一块raid卡进行管理,无法跨越节点,因此,宿主节点宕机,系统将无法使用。

副本机制为目前分布式文件系统的主要冗余手段,通过多副本的模式,来提供较高的可靠性,但存在以下问题:

a、数据通过副本形式进行存储,一份数据需要消耗几倍于数据的存储容量,当存储规模增加时,存储节点的成本得到更大的体现,用于构建机群的费用很大一部分比例用于磁盘的采购;

b、当采用全闪存阵列时,副本问题带来的单位成本更是得以体现,目前针对全闪存阵列应用而生的有重复数据删除系统,而多副本则让重复数据删除系统的效果无法体现。

纠删码机制作为副本机制的替代方案而存在,渐渐被各大开源文件系统采用,使得存储机群的存储开销有300%降到140%左右,甚至更低(主要基于编码方案),当纠删码方案存在以下几个问题:

a、相对于副本机制,数据在写入的时候,需要通过CPU进行计算,得到编码块,计算是的客户端的带宽降低;

b、相对于副本机制,数据在恢复的时候,需要读取全部的条带数据,给网络带来的较大的负担;

c、相对于副本机制,纠删码的安全可靠还依赖于数据的恢复速度,如果数据在丢失时,未能及时恢复,很有可能由于后续的数据丢失导致数据不可恢复。

本发明主要关注于纠删码的实际应用场景,纠删码的应用体现在数据写入时的编码带宽、数据读取的数据量和数据解码的计算带宽三个部分。数据编码跟解码需要依赖于系统的计算能力,目前Intel的ISA-L加速库,通过SSE、AVX和AVX2指令加速纠删码的计算,通过SIMD单指令多数据流可以提高纠删码编码、解码的并行粒度,将速度提升若干倍,但是纠删码恢复时候的数据读取依然涉及到磁盘的读取能力和网络的传输能力,尤其在应用服务高峰时期,过多的数据读取将严重影响系统的服务能力,另外,纠删码文件系统的可靠性依赖于数据的恢复速度,纠删码的设计规则规定,纠删码可以容忍数据的丢失量为不大于编码块的数量,如果数据在发现数据丢失的时候未能及时恢复,当同一条带内再次发生数据丢失时,超过可容忍丢失块数时,数据将无法恢复。

目前大多数纠删码文件系统研究的目标包括以下几点:

a、计算能力的提高,主要用于提高纠删码编解码的计算带宽,通过添加GPU、FPGA等部件,但这将复杂化文件系统,将文件系统过度复杂化,不易于管理;

b、编码矩阵的研究,通过研究编码矩阵,减少数据源的读取量,来提高数据的恢复能力,目前较为普通的故障包括磁盘故障、节点故障和机架故障,当这些故障发生时,系统为恢复数据,将发生大规模的数据流量,这将严重影响系统的服务能力、带宽和IOPS,编码矩阵的研究主要体现在两个方面:

1)减少数据恢复时的数据读取量,减少网络负担和磁盘负担;

2)提供更好的编码矩阵,使得数据的关联度更高,数据回复时,通过较少的数据,可以更快的恢复;

3)系统的整节点和整磁盘恢复效率,系统的故障一般为磁盘失效、节点失效等,这样的故障,给系统带来更大的恢复挑战。

因此,纠删码文件系统的应用和推广极大的依赖于数据的恢复能力,本发明将针对数据的恢复提出一种基于十字交叉纠删编码的快速数据恢复方案。



技术实现要素:

针对现有技术的不足,本发明提出一种基于十字交叉纠删编码的快速数据恢复方法及系统,包括:

分组伙伴关联编码步骤,对LRC编码块中增添全局编码块,数据写入时,按照LRC编码方式进行计算,将全局编码块两两分组,并将每个分组内的全局编码块分成两部分,并将全局编码块的后半部分与另一块全局编码块的前半部分异或后,写入当前全局编码块的后半部分中,当第一个全局编码块丢失时,仅需要读取数据块的后半部分,按照LRC编码矩阵,获得丢失数据块的未做异或前的两个后半部分,另一块全局编码块的后半部分异或操作前跟后做异或操作得到丢失数据块的前半部分,丢失数据块的异或前数据与另一块全局编码块的前半部分做异或操作得到丢失数据块的后半部分,使得第一块全局编码块恢复;

十字交叉纠删码编码步骤,数据在写入时采用分组伙伴关联编码步骤进行横向一维编码运算,计算获得局部编码块与全局编码块,数据按照条带方式刷回到对应的磁盘中进行存储,当数据写入存储服务器后,由存储服务器进行异步的纵向编码计算,通过纵向编码,减少数据恢复时横向恢复的比例。

上述的基于十字交叉纠删编码的快速数据恢复方法,其中,分组伙伴关联编码步骤之前还包括基于intel ISA-L加速库,实时采集节点的CPU利用率、内存利用率、磁盘IO负载、系统的网络负载、整体负载,根据节点的任务,客户端负责数据的横向编码计算,存储服务器负责数据的纵向编码计算/解码计算两个任务,根据需求,存储服务器纠删码计算任务分为纵向纠删码异步计算、纵向纠删码解码计算与横向纠删码解码计算,优先级依次提高,并根据计算优先级分别设立优先级队列。

上述的基于十字交叉纠删编码的快速数据恢复方法,其中,其特征在于,分组伙伴关联编码步骤包括按照LRC编码矩阵,获得丢失数据块的未做异或前的后半部分A2与B2,再读取另一块全局编码块(B1,A1+B2),将后半部分B2,与全局编码块(B1,A1+B2)的后半部分A1+B2异或获得A1,同样,将后半部分A2与全局编码块(B1,A1+B2)的前半部分B1异或获得A2+B1,以使第一块全局编码块恢复。

上述的基于十字交叉纠删编码的快速数据恢复方法,其中,分组伙伴关联编码步骤还包括两种纵向编码方式,若为RS编码,则通过将6块数据块进行编码获得两块编码块,当数据恢复时,需要读取读取另外六块数据进行逆矩阵乘操作;

若为LRC编码,在RS编码的基础上将数据块分成2组,每组生成一个局部编码块,当数据块或者对应的局部编码块丢失时,读取分组内其他3块数据,做异或运算,若全局编码块数据丢失时,需要读取其他6块数据。

上述的基于十字交叉纠删编码的快速数据恢复方法,其中,十字交叉纠删码编码步骤采用同步与异步相结合的方式进行数据写入。

本发明还提供一种基于十字交叉纠删编码的快速数据恢复系统,其中,包括:

分组伙伴关联编码模块,用于对LRC编码块中增添全局编码块,数据写入时,按照LRC编码方式进行计算,将全局编码块两两分组,并将每个分组内的全局编码块分成两部分,并将全局编码块的后半部分与另一块全局编码块的前半部分异或后,写入当前全局编码块的后半部分中,当第一个全局编码块丢失时,仅需要读取数据块的后半部分,按照LRC编码矩阵,获得丢失数据块的未做异或前的两个后半部分,另一块全局编码块的后半部分异或操作前跟后做异或操作得到丢失数据块的前半部分,丢失数据块的异或前数据与另一块全局编码块的前半部分做异或操作得到丢失数据块的后半部分,使得第一块全局编码块恢复;

十字交叉纠删码编码模块,用于数据在写入时采用分组伙伴关联编码步骤进行横向一维编码运算,计算获得局部编码块与全局编码块,数据按照条带方式刷回到对应的磁盘中进行存储,当数据写入存储服务器后,由存储服务器进行异步的纵向编码计算,通过纵向编码,减少数据恢复时横向恢复的比例。

上述的基于十字交叉纠删编码的快速数据恢复系统,其中,分组伙伴关联编码模块之前还包括基于intel ISA-L加速库,实时采集节点的CPU利用率、内存利用率、磁盘IO负载、系统的网络负载、整体负载,根据节点的任务,客户端负责数据的横向编码计算,存储服务器负责数据的纵向编码计算/解码计算两个任务,根据需求,存储服务器纠删码计算任务分为纵向纠删码异步计算、纵向纠删码解码计算与横向纠删码解码计算,优先级依次提高,并根据计算优先级分别设立优先级队列。

上述的基于十字交叉纠删编码的快速数据恢复系统,其中,分组伙伴关联编码模块包括按照LRC编码矩阵,获得丢失数据块的未做异或前的后半部分A2与B2,再读取另一块全局编码块(B1,A1+B2),将后半部分B2,与全局编码块(B1,A1+B2)的后半部分A1+B2异或获得A1,同样,将后半部分A2与全局编码块(B1,A1+B2)的前半部分B1异或获得A2+B1,以使第一块全局编码块恢复。

上述的基于十字交叉纠删编码的快速数据恢复系统,其中,分组伙伴关联编码模块还包括两种编码方式,若为RS编码,则通过将6块数据块进行编码获得两块编码块,当数据恢复时,需要读取另外六块数据进行逆矩阵乘操作;

若为LRC编码,在RS编码的基础上将数据块分成2组,每组生成一个局部编码块,当数据块或者对应的局部编码块丢失时,读取分组内其他3块数据,做异或运算,若全局编码块数据丢失时,需要读取其他6块数据。

上述的基于十字交叉纠删编码的快速数据恢复系统,其中,十字交叉纠删码编码步骤采用同步与异步相结合的方式进行数据写入。

由以上方案可知,本发明的优点在于:

本发明基于intel ISA-L加速库的自适应多优先级队列计算模块,通过采集节点的资源利用率和系统的压力,根据需求的紧急程度,自动调整数据编码、解码队列的优先级,自动调整编解码的线程数量。

通过分组伙伴关联编码方案的实现,使得系统在数据恢复时能够减少数据的读取量,将数据恢复关键路径上的数据读取降低,使得数据恢复的整体带宽得意提高,防止数据的丢失。

通过基于十字交叉纠删编码方案,将数据恢复任务优先交于本节点进行,减少数据恢复造成的网络压力。数据编码分为横向和纵向两维,横向编码采用分组伙伴关联编码,尽最大可能,减少数据恢复时的网络负载压力,在机架(大规模)或者节点内使用纵向编码方案,将数据流限制于本机架或者本节点内,减少网络负载,以使得系统提供最大的性能。

附图说明

图1为RS编码(6,2)编码图;

图2为LRC编码(6,2,2)编码图;

图3为分组伙伴关联编码(6,2,2)编码图;

图4为分组伙伴关联编码全局编码块恢复示意图;

图5为分组伙伴关联编码全局编码块恢复示意图;

图6为十字交叉纠删码编码方案示意图。

具体实施方式

本发明的目的是解决纠删码文件系统中数据恢复低效的问题,以下为本发明的整体步骤,如下所示:

(一)基于反馈机制的自适应多优先级队列计算模块

通过测试发现,intel ISA-L加速库的纠删码计算性能可以达到4GB/s/core的计算能力,通过分析发现,intel ISA-l加速库是在SSE、AVX、AVX2指令的基础上,基于SIMD指令进行加速,一次性可以完成一个条带的计算,相对于其他纠删码计算库单线程提高4-5倍,因此,intel ISA-L加速库的出现,使得纠删码的计算不在成为瓶颈,因此,我们基于ISA-L加速库,构建了基于反馈机制的自适应多优先级纠删码计算模块。

自适应多优先级纠删码计算模块实时采集节点的CPU利用率、内存利用率、磁盘IO负载和系统的网络负载、整体负载,来决策当前节点的负载情况,纠删码编码和解码的任务处理能力,根据节点的任务,客户端负责数据的横向编码计算,存储服务器负责数据的纵向编码计算和解码计算两个任务,根据需求,存储服务器节点纠删码计算任务分为纵向纠删码异步计算、纵向纠删码解码计算和横向纠删码解码计算,优先级依次提高,根据计算优先级分别设立优先级队列。

自适应多优先级纠删码计算模块根据cpu利用率等,构建编解码线程,根据反馈,动态调整编解码线程的数量,以最大提高系统整体性能。

(二)分组伙伴关联编码

如图1所示,为RS编码,通过将6块数据块进行编码得到两块编码块,可以容忍任意两块数据丢失,当数据恢复时,需要读取另外六块数据(数据块数量需要满足矩阵乘运算)进行逆矩阵乘操作。

图2所示为LRC编码(6,2,2),在RS编码的基础上将数据块分成2组,每组生成一个局部编码块,当数据块或者对应的局部编码块丢失时,不需要读取其他6块数据,只要读取分组内其他3块数据,做异或运算即可,但是当全局编码块数据丢失时,依然,需要读取其他6块数据。

图3为LRC编码块的改进方法,通过增添全局编码块的联系,可以增加全局编码块的利用率,减少读取的数量。分组伙伴编码块中,数据块或局部编码块丢失时,处理方式跟LRC编码相同,主要针对LRC编码全局编码块的恢复效率进行改进。数据写入时,按照LRC编码方式进行计算,最后,将全局编码块两两分组,并将每个分组内的全局编码块分成两部分,并将编码块的后半部分与另一块编码块的前半部分异或后,写入当前编码块后半部分中,如图3所示。

在分组伙伴关联编码中,当第一个全局编码块丢失时,并不需要读取所有的其他6块数据块,仅需要读取6块数据块的后半部分,按照LRC编码矩阵,得到丢失数据块的未做异或前的后半部分,即A2和B2部分,如图4所示,然后读取另一块全局编码块(即图3中的全局编码块(B1,A1+B2)),如图5所示。将图4中计算得到的B2,与读取的全局编码块(B1,A1+B2)的后半部分A1+B2异或得到A1,同样,将图4计算得到的A2与读取的全局编码块的(B1,A1+B2)的前半部分B1异或得到A2+B1,即可以将图3所示的第一块全局编码块恢复。

本例中,全局编码块恢复需要的数据块数为6/2+1=4,相对于RS和LRC编码中需要读取6块数据,降低了33%的性能消耗,减少了磁盘和网络负载。

(三)十字交叉纠删码编码方案

十字交叉纠删编码方案采用同步与异步相结合的方式进行写入,数据在写入时采用分组伙伴关联编码方式进行横向一维编码运算,计算得到局部编码块和全局编码块,数据按照条带方式刷回到对应的磁盘中进行存储,当数据写入存储服务器后,由存储服务节点,进行异步的纵向编码计算,通过纵向编码的应用,减少数据恢复时横向恢复的比例。

目前,多达数存储节点采用多盘位存储节点,盘位数量有12、24、35,甚至更多,采用纠删码进行存储的节点,不推荐使用RAID盘阵,经过测试,RAID盘阵并没有单纯磁盘聚合的带宽高,且RAID卡性价比也不高。分布式存储文件系统中,元数据服务器负责数据的位置选择,由元数据服务器分发到存储服务器中,数据块在存储服务器中与磁盘的对应关系由存储节点负责。存储节点主要的功能包括:数据块的管理,数据块的位置、磁盘的监测等。因此,存储服务器中,存在数据块与磁盘的映射表,即,数据块的存放需要经过存储服务器处理。

纠删码编码方案中,无论如何优化,在数据恢复中都需要进行数据的读取,编码方案的好坏取决于恢复的性能,即计算能力、数据的读取量,如果能够尽量减少数据的读取量,将对文件系统性能的提高和存储可靠性有巨大的贡献。通过在计算能力和数据传输两个方面的衡量考虑,本发明提出了基于十字交叉的纠删码编码方案,在一维横向编码的基础上,在节点内的各磁盘间,添加纵向编码,形成二维编码方案,如图6所示:

十字交叉纠删编码方案,数据恢复任务分为三级,分别为节点级数据恢复、磁盘级数据恢复和块级数据恢复,节点级数据恢复由元数据服务器负责,将宕机节点数据的恢复分发到各相关节点进行横向恢复;磁盘级数据恢复由存储服务器负责,存储服务器监测到磁盘失效后,启动纵向恢复方案,纵向恢复不需要涉及网络负载,存储节点根据当前存储服务器负载,动态调整数据恢复方案,结合横向恢复和纵向恢复进行快速数据恢复,横向恢复仅向元数据服务器提交恢复数据块列表即可,纵向恢复即在本节点内进行。

纵向恢复,数据读取磁盘直接获取数据,不再需要经过网络,编码方式可以选择RS、LRC以及分组伙伴关联编码,根据磁盘数量和安全级别进行选择,数据在本节点读取,生成的恢复数据可以写入本节点内,也可以通报元数据服务器,写到其他节点,数据恢复后,更新所涉及的纵向条带。

本发明还提出一种基于十字交叉纠删编码的快速数据恢复系统,包括:

分组伙伴关联编码模块,用于对LRC编码块中增添全局编码块,数据写入时,按照LRC编码方式进行计算,将全局编码块两两分组,并将每个分组内的全局编码块分成两部分,并将全局编码块的后半部分与另一块全局编码块的前半部分异或后,写入当前全局编码块的后半部分中,当第一个全局编码块丢失时,仅需要读取数据块的后半部分,按照LRC编码矩阵,获得丢失数据块的未做异或前的两个后半部分,另一块全局编码块的后半部分异或操作前跟后做异或操作得到丢失数据块的前半部分,丢失数据块的异或前数据与另一块全局编码块的前半部分做异或操作得到丢失数据块的后半部分,使得第一块全局编码块恢复;

十字交叉纠删码编码模块,用于数据在写入时采用分组伙伴关联编码步骤进行横向一维编码运算,计算获得局部编码块与全局编码块,数据按照条带方式刷回到对应的磁盘中进行存储,当数据写入存储服务器后,由存储服务器进行异步的纵向编码计算,通过纵向编码,减少数据恢复时横向恢复的比例。

分组伙伴关联编码模块之前还包括基于intel ISA-L加速库,实时采集节点的CPU利用率、内存利用率、磁盘IO负载、系统的网络负载、整体负载,根据节点的任务,客户端负责数据的横向编码计算,存储服务器负责数据的纵向编码计算/解码计算两个任务,根据需求,存储服务器纠删码计算任务分为纵向纠删码异步计算、纵向纠删码解码计算与横向纠删码解码计算,优先级依次提高,并根据计算优先级分别设立优先级队列。

分组伙伴关联编码模块包括按照LRC编码矩阵,获得丢失数据块的未做异或前的后半部分A2与B2,再读取另一块全局编码块(B1,A1+B2),将后半部分B2,与全局编码块(B1,A1+B2)的后半部分A1+B2异或获得A1,同样,将后半部分A2与全局编码块(B1,A1+B2)的前半部分B1异或获得A2+B1,以使第一块全局编码块恢复。

分组伙伴关联编码模块还包括若编码为RS编码,则通过将6块数据块进行编码获得两块编码块,当数据恢复时,需要读取读取另外六块数据进行逆矩阵乘操作;

若为LRC编码,在RS编码的基础上将数据块分成2组,每组生成一个局部编码块,当数据块或者对应的局部编码块丢失时,读取分组内其他3块数据,做异或运算,若全局编码块数据丢失时,需要读取其他6块数据。

十字交叉纠删码编码步骤采用同步与异步相结合的方式进行数据写入。

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