一种自精简存储系统数据一致性管理方法

文档序号:6633223阅读:205来源:国知局
一种自精简存储系统数据一致性管理方法
【专利摘要】本发明提供一种自精简存储系统数据一致性管理方法,属于自动精简配置【技术领域】,本发明设计了数据块管理的元数据结构和元数据存储结构的实现方案。对于数据块管理的元数据结构,设计了一种B+Tree的改进结构,同时配合超级块、元数据位图和数据位图等元数据实现数据块的自精简管理。在原有B+Tree数据结构基础上,将每个非叶节点的空间扩大一倍,并划分为活动域和非活动域两部分,使得在修改B+Tree过程中基本上不分配额外磁盘空间,降低元数据修改操作复杂度,同时分配的额外非活动域空间还可作为元数据副本或用于历史操作记录,减少存储系统副本维护或日志维护开销。
【专利说明】一种自精简存储系统数据一致性管理方法

【技术领域】
[0001]本发明涉及自动精简配置【技术领域】,具体是一种自精简存储系统数据一致性管理方法。

【背景技术】
[0002]当前互联网产生的数据量呈爆发式增长,对存储系统的容量和性能提出了更高要求。现有存储系统存在磁盘存储利用率较低、存储资源浪费的问题,因此近几年出现了自动精简配置技术。
[0003]自动精简配置技术利用“写时分配”策略,通过改变存储系统的资源按需分配,能够提高磁盘存储空间利用率,在提高存储系统性能的同时达到降低存储系统的部署成本和节约资源的目的。“写时分配”就是在向自精简逻辑卷写数据时,才从自精简存储池中分配存储空间。其实现时将自精简存储池存储空间分割成大小相等的数据块,并通过B+Tree等形式进行组织管理:包括数据块的分配、回收、查找等操作。自精简存储池分为数据区和元数据区,数据区用于存储数据,元数据区包括了存储池超级块,元数据位图,数据位图,逻辑卷信息等等对自精简存储池是个组织管理者,非常重要,一旦元数据出现丢失、不一致等错误,就会丢失用户数据甚至使得整个存储系统崩溃。同时,存储系统正常运行时,元数据是存储在内存中并定时刷写到磁盘上的,而当系统出现异常时,如控制器失效、控制器掉电、RAID失效和RAID掉电等硬件错误,可能造成元数据刷写失败,导致元数据错误。因此如何保证元数据的一致性是存储系统和自动精简技术的重点。
[0004]在自动精简技术的实现中,大多用B+Tree数据结构来管理数据块。为了保证元数据B+Tree的一致性,可以采取的一种管理方法是:当进行B+Tree的修改操作时,额外创建一个与B+Tree相同的另一棵B+Tree,并在额外创建的B+Tree上进行操作,等到整个操作完成后,将指向原来B+Tree根节点的指针指向新创建的B+Tree的根节点,并将原来B+Tree的空间释放,达到修改元数据的目的。此实现方法的优点是能够保证元数据B+Tree的一致性,在整个修改过程中的任一阶段,存储在磁盘上的元数据都保持一致性,能够较好地防止因控制器失效等硬件错误引起的元数据不一致。而此方法的缺点也较为明显,就是每次修改元数据B+Tree需要重建一棵同等大小的B+Tree,在重建过程中需要为B+Tree中每个节点分配空间;同时为了保证元数据可用性,在与元数据B+Tree同一 RAID的其它地方,还要存储一份副本。因此这种方法在时间和空间上开销都较大。
[0005]另一种元数据的管理方法是将存储系统中单一 RAID作为元数据空间,专门存储元数据,这使得该RAID容易称为系统中数据访问的“热点”和单一故障点。一种解决方法是将元数据分散存放在几个RAID中,但若系统中控制器失效仍会对元数据访问造成较大影响。


【发明内容】

[0006]本发明提供一种自精简存储系统数据一致性管理方法,即可解决上述两种方法中的缺点,保证元数据一致性,又可减小元数据操作的时间和空间复杂度。
[0007]本发明设计了数据块管理的元数据结构和元数据存储结构的实现方案。对于数据块管理的元数据结构,设计了一种B+Tree的改进结构,同时配合超级块、元数据位图和数据位图等元数据实现数据块的自精简管理。在原有B+Tree数据结构基础上,将每个非叶节点的空间扩大一倍,并划分为活动域和非活动域两部分,使得在修改B+Tree过程中基本上不分配额外磁盘空间,降低元数据修改操作复杂度,同时分配的额外非活动域空间还可作为元数据副本或用于历史操作记录,减少存储系统副本维护或日志维护开销。
[0008]一种自精简存储系统数据一致性管理方法,其特征为:
S1:在元数据组织的B+Tree中,增加B+Tree每个非叶子节点的空间。在原有B+Tree数据结构基础上,将每个非叶节点的空间扩大一倍,并划分为活动域和非活动域两部分,其中活动域中存储映射B+Tree节点的数据,即(key, value)键值对;而非活动域中根据不同策略可存储活动域数据的副本,也可存储最近一次节点修改前的数据。对节点的修改在节点的非活动域进行,节点的修改完成后,活动域和非活动域进行交换。每个非叶节点在分配时起始地址以节点大小对齐,例如若节点大小是8KB,其中活动域和非活动域各占4KB,则节点起始地址以8KB对齐。这样就使得在修改元数据过程中不分配额外存储空间,降低元数据修改操作复杂度。
[0009]对元数据的修改涉及三种操作:增加数据块映射、删除数据块映射和修改数据块映射。各操作流程如下:
A、增加数据块映射
1、查找新增数据块在映射B+Tree中的父节点N;
2、复制N的活动域数据到非活动域;
3、修改N的非活动域,增加key和索引指针,将指针指向新增节点,即将新增节点插入到N;
4、判断N是否需要进行分裂。若不需要则转向步骤7;若N需要分裂,则转向步骤5 ;
5、分裂N,得到节点N’和节点N’’,此时原节点N的父节点在N分裂后指向N’ ;
5.1.查找元数据位图B+Tree,找到空闲的元数据块;
5.2.分配新节点N’ ’并初始化,更新元数据位图B+Tree ;
5.3.计算分裂后节点N’和N’’各自包含的元数据信息,S卩(key,value)键值对的范围;
5、4.按照计算结果将待分裂节点N活动域的数据一部分复制到非活动域,另一部分复制到新分配节点N’’的活动域,此时称节点N为N’ ;
6、转到步骤2,向被分裂节点的父节点M插入节点N’’ ;
7、将各修改过的节点的父节点的指针指向修改过的节点的非活动域;
8、更新数据位图B+Tree中新增数据块对应的位,置为已使用;
9、更新元数据的超级块等其它元数据,改变存储池、逻辑卷等逻辑设备对象的大小;
10、操作完成。
[0010]B、删除数据块映射
1、查找待删除节点在映射B+Tree中的父节点N;
2、复制N的活动域数据到非活动域; 3、修改N的非活动域,删除key和索引指针;
4、判断N是否需要与其它节点合并。若不需要则转向步骤7;若需要合并,则转向步骤
5 ;
5、找到与合并的节点N’,并进行节点合并操作。此时N的父节点在其合并后指向合并后的新节点M ;
5、1.计算待合并节点N和N’,确定合并后节点包含的元数据信息;
5.2.按照计算结果将节点N和N’的数据复制到节点N’的非活动域,此时称节点N为节点M ;
6、转到步骤2,删除被合并的节点N;
7、将各修改过的节点的父节点的指针指向修改过的节点的非活动区域;
8、释放被删除的节点的空间;
9、更新数据位图B+Tree中删除数据块对应的位,置为未使用;
10、更新元数据的超级块等其它元数据,改变存储池、逻辑卷等逻辑设备对象的大小;
11、操作完成。
[0011]C、修改数据块映射
1、查找映射B+Tree,确定待修改数据块所属的父节点N及修改映射关系后的父节点
N,;
2、从节点N下删除数据块映射;
3、将数据块插入到节点N’下;
4、操作完成。
[0012]S2:元数据散列的存储于存储池每个底层存储单元中。
[0013]将元数据分散到存储池中各个RAID上,通过B+Tree等方式组织管理;更好的提升元数据访问性能,又降低了硬件异常带来元数据丢失的风险。
[0014]由于元数据存储在存储池各个RAID中,存储池以RAID为单位的扩容和缩容需要将各RAID中元数据空间扩大一倍,同样划分成活动空间和非活动空间。这样在系统进行扩容和缩容时,只修改元数据的非活动空间,而不影响活动空间的正常访问。当元数据在非活动空间调整完毕后,将各RAID中的元数据活动空间和非活动空间交换,启用新的元数据,完成存储系统的扩容和缩容,最后同步活动空间和非活动空间的数据,并建立跨RAID的元数据副本。
[0015]本发明的有益效果是:1)有利于元数据的磁盘刷写,相比于现有B+Tree管理数据块的方式,降低了元数据在磁盘中空间分布的散列程度;2)减少了元数据修改时空间分配开销,除了节点分裂时需要进行新节点的分配外,其余操作均不需要额外分配空间;3)应用方式灵活,映射B+Tree非叶节点的非活动域即可作为映射B+Tree元数据的副本,也可作为历史操作的记录,以支持操作回滚。当节点的非活动域用作副本时,在对映射B+Tree操作结束后,首先将各节点活动域数据同步到非活动域中。之后重建非活动域节点指针,将各节点的指针指向孩子节点的非活动域。此时各节点的非活动域形成一颗独立的映射B+Tree副本,若除根节点外任一节点的活动域数据损坏,则仅修改指向根节点的指针即可快速切换到非活动域副本,正常访问映射B+Tree元数据。节点的非活动域用作副本时,由于将副本分散与原本保存在一起,减少了维护副本一致性带来的额外磁盘访问的时间和空间开销;节点非活动域用作操作历史记录时,保存了其上一次作为活动域时的数据,减少了系统日志需要记录的数据量,在减少日志记录的时间和空间开销同时,也减少了回滚操作的数据重建复杂度。4)保护元数据一致性。由于在对映射B+Tree操作前,会将各节点的活动域数据复制到非活动域,并且在非活动域进行操作,因此即便在操作过程中出现控制器失效或者RAID掉电等情况,存在节点活动域的数据也能保持一致性,所影响的只是非活动域中未完成修改的操作。同时,即使单RAID数据丢失,也能通过其它RAID中存储的交叉副本进行数据重构。5)提升元数据访问性能,由于将元数据分散到系统所有RAID中,充分利用了多RAID并发的性能,提高元数据访问的1PS,解决了元数据单点性能瓶颈问题,同时支持存储系统在线扩容。实现系统扩容缩容后新旧元数据的无缝切换。
[0016]本方法弥补了现有自精简存储系统中为保证元数据安全而采用的复杂操作,减少了元数据增加和删除过程中反复申请和释放磁盘空间造成的额外开销和存储空间碎片化。在保证了元数据一致性性的前提下降低了元数据的访问性能。同时采用全分布的元数据存储方法也避免了元数据访问的单点故障问题。

【专利附图】

【附图说明】
[0017]附图1是元数据结构示意图。
[0018]附图2是映射B+Tree结构示意图。
[0019]附图3是插入节点步骤I。
[0020]附图4是插入节点步骤2。
[0021]附图5是插入节点步骤3。
[0022]附图6是分裂节点步骤I。
[0023]附图7是分裂节点步骤2。
[0024]附图8是分裂节点步骤3。
[0025]附图9是分裂节点步骤4。
[0026]附图10是分裂节点步骤5。
[0027]附图11是元数据存储结构示意图。

【具体实施方式】
[0028]下面参照附图,以本发明中映射B+Tree的插入节点和分裂节点操作为例,重点说明本发明中增加、删除和修改数据块映射中的映射B+Tree操作。删除节点和合并节点操作分别是插入节点和分裂节点操作的逆过程,在此不再赘述。同时说明元数据在各RAID中的存储结构和存储系统扩容、缩容过程中对元数据的操作。
[0029]附图1是映射B+Tree的数据结构示意图,其中每个非叶节点都包含活动域和非活动域,两者大小相等,地址空间相邻,非叶节点起始地址以节点大小对齐。叶子节点是指向数据块的指针。非叶节点中活动域与非活动域是通过父节点指向当前节点的指针决定的。称节点中地址相邻的两个空间为A域和B域,其中A域的起始地址是节点的起始地址。由于非叶节点的地址以节点大小对齐,则若父节点中指向当前节点的指针所存储的地址为A域起始地址,同时也为当前节点起始地址,则A域为活动域,B域为非活动域;反之若父节点中指向当前节点的指针所存储的地址为B域起始地址,此时该地址不能以节点大小对齐,则A域为非活动域,B域为活动域。
[0030]附图3至附图5对映射B+Tree插入节点的操作进行了流程说明;
1)如附图3所示,首先查找映射B+Tree,确定新增叶节点的父节点,将其节点活动域中数据复制到非活动域;
2)如附图4所示,修改节点非活动域,添加新叶节点索引,修改键值;
3)如附图5所示,修改当前节点的父节点中指向当前节点的指针,使其指向当前节点的非活动域,完成活动域和非活动域的转换,启用新的节点元数据,插入节点操作完成。
[0031]映射B+Tree中某个非叶节点在插入了新节点后,节点中的索引值可能超出了映射B+Tree数据结构中的节点限制,需要进行节点分裂形成两个新节点,每个新节点存储原节点一部分的数据。附图6至附图10对映射B+Tree分裂节点的操作进行了流程说明;
1)如附图6所示,映射B+Tree中某一非叶节点在插入了节点后索引值达到最大,需要进行分裂;
2)如附图7所示,复制当前节点的活动域数据到非活动域;
3)如附图8所示,分配一个新的非叶节点并初始化,将当前节点非活动域中的一部分数据迁移到新分配的节点的活动域中;
4)如附图9所示,将新分配的节点作为一个新节点插入到映射B+Tree中;
5)如附图10所示,修改所有涉及节点的索引指针,指向存有新的元数据的节点的非活动域,完成各节点活动域和非活动域的转换,启用新的节点元数据,分裂节点操作完成。
[0032]附图11是元数据实际存储结构示意图。元数据的超级块在系统中每个RAID中存放一份副本,在超级块中存放数据块映射B+Tree根节点、元数据位图B+Tree根节点、数据位图B+Tree根节点,以及系统中其它元数据如设备UUID、设备名称、设备对象索引、设备属性信息等。数据块映射B+Tree、元数据位图B+Tree和数据位图B+Tree并不是在每个RAID中存储一份相同的数据,而是将构成B+Tree的数据块按照一定负载均衡策略分散存储到所有RAID中。每个RAID中的元数据非活动空间存储当前RAID元数据活动空间中元数据的副本,同时,按照分散策略将RAID中数据块映射B+Tree、元数据位图B+Tree和数据位图B+Tree在其他RAID中存储两份副本,两份副本不在同一 RAID中,保证分散存储的元数据在系统中两个RAID失效时还能够保持完整性。
[0033]存储系统进行扩容时对元数据处理过程如下:
1、初始化新增RAID;
2、按照负载均衡策略计算扩容后元数据分布;
3、同步各RAID中元数据活动空间和非活动空间,使得两者中存储的元数据一致;
4、按照步骤2计算结果,复制元数据到新增RAID的元数据活动空间;
5、按照步骤2计算结果,修改各RAID中元数据非活动空间的元数据为扩容后状态;
6、更新各RAID中超级块、元数据位图B+Tree和数据位图B+Tree;
7、启用原有各RAID的元数据非活动空间成为活动空间;
8、同步各RAID的元数据活动空间和非活动空间,并重新建立跨RAID的元数据副本;
9、操作完成。
[0034]存储系统的缩容操作与扩容操作流程类似,在此不再赘述。
[0035]以上所述,仅为本发明的较佳实施实例而已,并非用于限定本发明的保护范围。
【权利要求】
1.一种自精简存储系统数据一致性管理方法,其特征在于设计了数据块管理的元数据结构和元数据存储结构的实现方案,其中 元数据结构包括: (1)B+Tree数据结构的改进结构; (2)应用B+Tree的改进数据结构实现的增加数据块映射、删除数据块映射和修改数据块映射操作; (3)B+Tree的改进数据结构中非叶节点的活动域与非活动域的判定方式; 根据不同的分配策略将元数据分散到存储系统中所有RAID中,通过B+Tree等方式组织管理,同时元数据在不同RAID中做交叉备份; 元数据存储结构包括:(I)元数据跨所有RAID的存储和备份;(2)应用元 数据存储结构的存储系统扩容缩容操作。
2.根据权利要求1所述的方法,其特征在于所述B+Tree数据结构的改进结构设计,为原有B+Tree数据结构中非叶节点分配额外空间,使得改进后的非叶节点空间大小为原来两倍,并且节点起始地址以节点大小对齐;节点空间划分成相邻的活动域和非活动域,活动域用于正常的元数据查询操作;非活动域用于存储活动域副本或前一次操作历史记录。
3.根据权利要求1所述的方法,其特征在于所述应用B+Tree数据结构的改进结构实现的数据块管理操作,在进行自精简数据块的映射操作时,将B+Tree改进结构的节点中活动域中数据复制到非活动域,所有修改节点中数据的操作在节点的非活动域进行,当节点中数据修改完毕后,修改指向存在数据修改的各节点的指针,使其指向各节点原来的非活动域,将存有修改后的数据的各节点非活动域变为活动域,原来的各节点活动域变为非活动域。
4.根据权利要求1所述的方法,其特征在于所述B+Tree的改进数据结构中非叶节点的活动域与非活动域的判定方式,根据父节点指向当前节点的指针所存储的地址决定活动域和非活动域;将节点分成地址相邻的两个空间:A域和B域,其中A域的起始地址是节点的起始地址;由于非叶节点的地址以节点大小对齐,则若父节点中指向当前节点的指针所存储的地址为A域起始地址,同时也为当前节点起始地址,则A域为活动域,B域为非活动域;反之若父节点中指向当前节点的指针所存储的地址为B域起始地址,此时该地址不能以节点大小对齐,则A域为非活动域,B域为活动域。
5.根据权利要求1所述的方法,其特征在于所述元数据跨所有RAID的存储和备份,将各RAID中存储元数据的元数据空间划分为两个大小相同,地址相邻的元数据活动空间和元数据非活动空间;元数据中数据量较小的数据结构,如超级块等在存储系统中每个RAID元数据活动空间中存放一份相同副本;而对于数据量较大的数据结构,如元数据映射B+Tree、元数据位图B+Tree和数据位图B+Tree,根据负载均衡策略分散到每个RAID元数据活动空间中,各RAID存放元数据的一部分,在RAID中的元数据非活动空间存放元数据活动空间的副本;同时,在各RAID中按照一定策略存放其它两个RAID中元数据的副本。
6.根据权利要求1所述的方法,其特征在于所述应用元数据存储结构的存储系统扩容和缩容操作,主要是在扩容和缩容操作时,首先同步元数据活动空间和元数据非活动空间,之后根据元数据分散策略修改各RAID中元数据非活动空间,最后转换各RAID的元数据非活动空间为活动空间,启用新的元数据完成扩容缩容操作。
【文档编号】G06F17/30GK104331478SQ201410614846
【公开日】2015年2月4日 申请日期:2014年11月5日 优先权日:2014年11月5日
【发明者】马春 申请人:浪潮电子信息产业股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1