【技术领域】
本发明属于数据处理技术领域,具体涉及一种分布式对象存储中的元数据管理方法。
背景技术:
随着网络和信息技术的飞速发展,全球数据日益增长。面对当前pb级的海量数据存储需求,传统的存储系统在容量和性能的扩展上存在瓶颈。分布式存储系统因为具有海量数据存储、高扩展性、高性能、高可靠性、高可用性的特点,目前得到广泛研究和应用。分布式存储系统就是将数据分散存储在多台独立的存储服务器上,利用多台存储服务器分担存储负荷,利用位置服务器定位存储信息,它不但提高了系统的可靠性、可用性和存取效率,还易于扩展。
在使用和设计分布式存储系统时,非常重要的一个环节是数据寻址,即定位一个数据副本存放在哪个机器甚至哪块磁盘,这个就是通过操作元数据来管理定位的。据统计,在分布式存储系统中有超过一半以上的系统操作是元数据操作,元数据操作成为制约分布式存储系统的性能和扩展性的一个严重的瓶颈。目前有几种常用的解决方案:集中式元数据管理,分布式元数据管理,无元数据管理。
集中式元数据管理架构采用单一的元数据服务器,实现简单.但是存在单点故障等问题。
分布式元数据管理架构将元数据分散在多个结点上,进而解决了元数据服务器的性能瓶颈等问题,并提高了元数据管理架构的可扩展性,但实现较为复杂,并引入了元数据一致性的问题。
无元数据服务器的分布式架构,通过在线算法组织数据,不需要专用的元数据服务器。但是该架构对数据一致性的保障很困难.实现较为复杂。
技术实现要素:
本发明的目的是提供一种分布式对象存储中的元数据管理方法,旨在解决分布式系统中单点故障问题、元数据管理架构的扩展、以及数据和元数据一致性问题。
本发明采用以下技术方案:一种分布式对象存储中的元数据管理方法,包括:
s1、将逻辑卷划均匀分成多个逻辑单元,每个所述逻辑单元即为一个对象,每个所述对象对应一个对象元数据,所述对象元数据用于唯一确定其对应的所述对象的内容和位置;各个所述对象元数据构成元数据对象;
s2、通过计算各个所述对象和所述元数据对象内容的哈希值,在一致性哈希表中查到其副本数据在集群中的目标节点,将所述对象和所述元数据对象通过网络存储在目标节点上;
s3、通过所述逻辑卷的guid的哈希值,在所述集群的各个节点上获取到所述逻辑卷所有对象的元数据信息,完成所述逻辑卷默克尔树的重建。
进一步的,对象元数据为二元组结构,包含对象的哈希值和对象的逻辑块号,所述逻辑卷对其对象按照默克尔树来管理,所述默克尔树包括叶子节点和中间节点,所述叶子节点用于存储对象的哈希值,所述叶子节点号即为所述对象的逻辑块号,所述中间节点用于存储的就是以叶子节点哈希值为内容计算出来的哈希值。
进一步的,元数据对象包括元数据对象头信息和元数据数组;所述元数据对象头信息包括逻辑卷的guid、哈希值、元数据的数量、前面元数据对象的数量、前一个元数据对象的哈希值和元数据对象的操作序列号;所述元数据数组即为元数据的集合。
进一步的,元数据对象的大小和对象的大小一致,其包含元数据的个数为对象大小减去元数据对象头信息除以单个元数据的大小。
进一步的,步骤s2即为逻辑卷的写操作,具体包括以下步骤:
s2.1、根据逻辑卷的地址除以对象大小,算出逻辑块号;
s2.2、按照对象的数据内容算出哈希值;
s2.3、以逻辑块号和哈希值得到对象元数据,并更新到默克尔树的叶子节点;
s2.4、数据对象根据其哈希值在一致性哈希表中算出应该发往分布式集群中的目标节点;
s2.5、通过网络将数据对象存储到目标节点;
s2.6、对于元数据,会判断元数据的集合是否可以生成一个元数据对象;
s2.7、生成元数据对象头信息;
s2.8、以元数据对象头信息和元数据数组生成元数据对象;
s2.9、按照元数据对象的内容算出哈希值;
s2.10、元数据对象根据其哈希值在一致性哈希表中算出应该发往分布式集群中的目标节点;
s2.11、通过网络将元数据对象存储在目标节点。
进一步的,步骤s3即为逻辑卷的重建操作,具体包括以下步骤:
s3.1、通过逻辑卷的guid的哈希值在dht一致性哈希表中找到分布式集群中的所有目标节点;
s3.2、通过网络分别读出哈希值对应的元数据对象,找到元数据对象操作序列号最大的那个元数据对象;
s3.3、解析元数据对象头信息,得到逻辑卷的元数据对象的数量以及前一个元数据对象的哈希值;
s3.4、通过前一个元数据对象的哈希值再读出去新的元数据对象,解析出新的元数据对象头信息,依次递归读出逻辑卷所有的元数据对象;
s3.5、根据所有的元数据就可以重建逻辑卷的默克尔树。
本发明的有益效果是:对于逻辑卷的元数据通过生成元数据对象,依据其逻辑卷guid的哈希值,将元数据多副本的散列的存储在集群的各个节点上,多副本保证元数据单点故障、数据和元数据的一致性,以及元数据可以随着节点的增加和减少在dht(一致性哈希表)下随意扩展。
【附图说明】
图1为本发明一种分布式对象存储中的元数据管理方法的数据和元数据写处理流程图;
图2为本发明一种分布式对象存储中的元数据管理方法的逻辑卷的重建流程图。
【具体实施方式】
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
本发明提供了一种分布式对象存储中的元数据管理方法,包括以下步骤:
s1、将逻辑卷划均匀分成多个逻辑单元,每个逻辑单元即为一个对象,每个对象对应一个对象元数据,对象元数据用于唯一确定其对应的对象的内容和位置;各个对象元数据构成元数据对象。
其中,对象元数据为二元组结构,包含对象的哈希值和对象的逻辑块号,逻辑卷对其对象按照默克尔树来管理,默克尔树包括叶子节点和中间节点,叶子节点用于存储对象的哈希值,叶子节点号即为对象的逻辑块号;中间节点用于存储以叶子节点哈希值为内容计算出来的哈希值。
元数据对象包括元数据对象头信息和元数据数组;元数据对象头信息包括逻辑卷的guid、哈希值、元数据的数量、前面元数据对象的数量、前一个元数据对象的哈希值和元数据对象的操作序列号;元数据数组即为元数据的集合。
元数据对象的大小为和对象大小一致,其包含元数据的个数为对象大小减去元数据对象头信息除以单个元数据的大小。
s2、通过计算各个对象和元数据对象内容的哈希值,在一致性哈希表中查到其副本数据在集群中的目标节点,将对象和元数据对象通过网络存储在目标节点上。
步骤s2即为逻辑卷的写操作,具体包括以下步骤:
s2.1、根据逻辑卷的地址除以4kb,算出逻辑块号;
s2.2、按照4kb的数据内容算出哈希值;
s2.3、以逻辑块号和哈希值得到对象元数据,并更新到默克尔树的叶子节点;
s2.4、数据对象根据其哈希值在一致性哈希表中算出应该发往分布式集群中的目标节点;
s2.5、通过网络将数据对象存储到目标节点;
s2.6、对于元数据,会判断元数据的集合是否可以生成一个元数据对象;
s2.7、生成元数据对象头信息;
s2.8、以元数据对象头信息和元数据数组生成元数据对象;
s2.9、按照元数据对象的内容算出哈希值;
s2.10、元数据对象根据其哈希值在一致性哈希表中算出应该发往分布式集群中的目标节点;
s2.11、通过网络将元数据对象存储在目标节点。
s3、通过逻辑卷的guid的哈希值,在集群的各个节点上获取到逻辑卷所有对象的元数据信息,完成逻辑卷默克尔树的重建。
步骤s3即为逻辑卷的重建操作,具体包括以下步骤:
s3.1、通过逻辑卷的guid的哈希值在dht一致性哈希表中找到分布式集群中的所有目标节点;
s3.2、通过网络分别读出哈希值对应的元数据对象,找到元数据对象操作序列号最大的那个元数据对象;
s3.3、解析元数据对象头信息,得到逻辑卷的元数据对象的数量以及前一个元数据对象的哈希值;
s3.4、通过前一个元数据对象的哈希值再读出去新的元数据对象,解析出新的元数据对象头信息,依次递归读出逻辑卷所有的元数据对象;
s3.5、根据所有的元数据就可以重建逻辑卷的默克尔树。
实施例:
在分布式存储系统中,逻辑卷按4kb为单位进行划分,每个4kb就是一个object,每个object按照其内容通过hash函数算出来一个20位的哈希值,所以每个object都有一个二元组(sig,vbn)元数据object_metadate来唯一确定数据对象object的位置,sig(signature签名)就是object的内容通过hash函数算出来的哈希值,vbn(logicalblocknumber逻辑块号)标识object在逻辑卷上的位置。
逻辑卷的object元数据有两种存储形式,一种是在内存中形式,运行操作所需;一种是存储在后端存储设备上,保存元数据以便重构内存中的元数据。逻辑卷在内存中的object元数据用merkletree来管理,叶子节点号就是vbn号,叶子节点存储的逻辑卷的object的哈希值,中间节点存储的就是以其子节点哈希值为内容算出来的哈希值。以此内推,就能算出根节点的哈希值,根节点的哈希值就是逻辑卷的哈希值。
对于逻辑卷的写操作,会根据逻辑卷的地址除以4kb算出其vbn,再按照4kb的数据对应的object内容通过hash函数算出sig,这样就计算出了一个元数据object_metadata。一个4096byte大小的object对应一个28byte大小的object_metadata。
整个的写数据流程,4kb数据object会经过vbn和hash计算出object_metadata,并更新内存中merkletree叶子节点上的信息,object以其哈希值在dht(一致性哈希表)中计算出数据的各个副本所在的目标节点,再通过网络将object发往副本们所在的目标节点,刷写到相应后端存储中。
每4kb数据的object对应一个28b元数据的object_metadata,当写了n个object的时候,就会产生的n个object_metadata,当n个元数据object_metadate大小加上m_object_header元数据对象头信息大小等于4kb的时候,构成一个4kb数据的特殊对象m_object。
m_object就是元数据对象,包含了元数据对象头信息m_object_header和元数据object_metadata数组。元数据对象头信息包含了:逻辑卷的guid、哈希值、元数据的数量、前面元数据对象的数量、前一个元数据对象的哈希值、元数据对象的操作序列号等信息。元数据数组就是元数据的集合,数组长度就是4kb减去元数据头信息的大小再除以每个元数据大小。
各个数据结构如下:
当元数据对象m_object生成条件满足后,就以元数据数组为内容生成哈希值签名信息,以及更新元数据对象头信息m_object_header,最后生成一个元数据对象m_object。以逻辑卷的guid为基础生成一个哈希值sig,这就表示了这个元数据对象是属于这个逻辑卷的。m_object以sig哈希值在dht(一致性哈希表)中计算出元数据的各个副本所在的目标节点,再通过网络将m_object发往副本们所在的目标节点,刷写到相应后端存储中,这样元数据也同数据一样,多副本散列的存储在集群各个节点上。数据和元数据写处理流程即如图1所示。
当存储系统系统需要通过逻辑卷元数据重构逻辑卷的时候,就需要从后端存储介质上读出元数据重建逻辑卷的merkletree。重建过程如下:
通过逻辑卷的guid的哈希值在dht一致性哈希表中找到分布式集群中的所有目标节点,分别读出元数据对象,找到元数据对象操作序列号m_object_header.mseq最大的那个元数据对象m_object,解析元数据对象头信息m_object_header,得到逻辑卷的元数据对象的数量m_object_header.mpending、以及前一个元数据对象的哈希值m_object_header.mprevsig。之后通过m_object_header.mprevsig在读出去新的m_object,解析出新的m_object_header,依次递归读出逻辑卷所有的m_object。根据所有的object_metadata就可以重建逻辑卷的merkletree重建逻辑卷。逻辑卷的重建流程图即如图2所示。
本发明提供的一种分布式对象存储中的元数据管理方法中,逻辑卷元数据object_metadata为二元组(vbn逻辑块号,sig哈希值)结构,object_metadata在内存中通过merkletree管理,object后端存储过程,元数据对象m_object结构,元数据对象头信息m_object_header结构,元数据对象m_object的生成,元数据对象m_object后端存储过程,从后端存储中读取元数据对象m_object重建逻辑卷的算法。
本发明的优点就是对于逻辑卷的元数据通过生成元数据对象,依据其逻辑卷guid的哈希值,将元数据多副本的散列的存储在集群的各个节点上,多副本保证元数据单点故障、数据和元数据的一致性,以及元数据可以随着节点的增加和减少在dht(一致性哈希表)下随意扩展。
1.一种分布式对象存储中的元数据管理方法,其特征在于,包括:
s1、将逻辑卷划均匀分成多个逻辑单元,每个所述逻辑单元即为一个对象,每个所述对象对应一个对象元数据,所述对象元数据用于唯一确定其对应的所述对象的内容和位置;各个所述对象元数据构成元数据对象;
s2、通过计算各个所述对象和所述元数据对象内容的哈希值,在一致性哈希表中查到其副本数据在集群中的目标节点,将所述对象和所述元数据对象通过网络存储在目标节点上;
s3、通过所述逻辑卷的guid的哈希值,在所述集群的各个节点上获取到所述逻辑卷所有对象的元数据信息,完成所述逻辑卷默克尔树的重建。
2.如权利要求1所述的一种分布式对象存储中的元数据管理方法,其特征在于,所述对象元数据为二元组结构,包含对象的哈希值和对象的逻辑块号,所述逻辑卷对其对象按照默克尔树来管理,所述默克尔树包括叶子节点和中间节点,所述叶子节点用于存储对象的哈希值,所述叶子节点号即为所述对象的逻辑块号;所述中间节点用于存储的是以叶子节点哈希值为内容计算出来的哈希值。
3.如权利要求1或2所述的一种分布式对象存储中的元数据管理方法,其特征在于,所述元数据对象包括元数据对象头信息和元数据数组;所述元数据对象头信息包括逻辑卷的guid、哈希值、元数据的数量、前面元数据对象的数量、前一个元数据对象的哈希值和元数据对象的操作序列号;所述元数据数组即为元数据的集合。
4.如权利要求1或2所述的一种分布式对象存储中的元数据管理方法,其特征在于,所述元数据对象的大小和对象大小一致,其包含元数据的个数为元数据对象大小减去元数据对象头信息除以单个元数据的大小。
5.如权利要求4所述的一种分布式对象存储中的元数据管理方法,其特征在于,所述步骤s2即为逻辑卷的写操作,具体包括以下步骤:
s2.1、根据逻辑卷的地址除以对象大小,算出逻辑块号;
s2.2、按照对象的数据内容算出哈希值;
s2.3、以逻辑块号和哈希值得到对象元数据,并更新到默克尔树的叶子节点;
s2.4、数据对象根据其哈希值在一致性哈希表中算出应该发往分布式集群中的目标节点;
s2.5、通过网络将数据对象存储到目标节点;
s2.6、对于元数据,会判断元数据的集合是否可以生成一个元数据对象;
s2.7、生成元数据对象头信息;
s2.8、以元数据对象头信息和元数据数组生成元数据对象;
s2.9、按照元数据对象的内容算出哈希值;
s2.10、元数据对象根据其哈希值在一致性哈希表中算出应该发往分布式集群中的目标节点;
s2.11、通过网络将元数据对象存储在目标节点。
6.如权利要求1或2所述的一种分布式对象存储中的元数据管理方法,其特征在于,所述步骤s3即为逻辑卷的重建操作,具体包括以下步骤:
s3.1、通过逻辑卷的guid的哈希值在dht一致性哈希表中找到分布式集群中的所有目标节点;
s3.2、通过网络分别读出哈希值对应的元数据对象,找到元数据对象操作序列号最大的那个元数据对象;
s3.3、解析元数据对象头信息,得到逻辑卷的元数据对象的数量以及前一个元数据对象的哈希值;
s3.4、通过前一个元数据对象的哈希值再读出去新的元数据对象,解析出新的元数据对象头信息,依次递归读出逻辑卷所有的元数据对象;
s3.5、根据所有的元数据就可以重建逻辑卷的默克尔树。
技术总结