CN111274259A - 一种分布式存储系统中存储节点的数据更新方法 - Google Patents
一种分布式存储系统中存储节点的数据更新方法 Download PDFInfo
- Publication number
- CN111274259A CN111274259A CN202010094501.6A CN202010094501A CN111274259A CN 111274259 A CN111274259 A CN 111274259A CN 202010094501 A CN202010094501 A CN 202010094501A CN 111274259 A CN111274259 A CN 111274259A
- Authority
- CN
- China
- Prior art keywords
- data
- node
- storage
- data object
- distributed
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2365—Ensuring data consistency and integrity
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2255—Hash tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/24569—Query processing with adaptation to specific hardware, e.g. adapted for using GPUs or SSDs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/602—Providing cryptographic facilities or services
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种分布式存储系统中存储节点的数据更新方法,应用于分布式数据存储系统的每个存储节点中,在分布式数据存储系统中的存储节点变更后,获取分布式数据存储系统中存储节点变更后的节点拓扑结构及节点信息,生成分布式哈希表;根据分布式哈希表重新分配当前存储节点存储的每个数据对象;对于存储节点变化的数据对象,将数据对象发送至变化后的存储节点;更新当前存储节点的区段管理器和索引管理器中;使用分布式哈希表可以基于某种稳定哈希算法,在存储节点数发生变化时,针对同样的数据,稳定哈希算法每次计算的结果都大致相同,这样可以保证数据所在的节点长时间保持稳定,避免数据的大规模移动。
Description
【技术领域】
本发明属于计算机存储技术领域,尤其涉及一种分布式存储系统中存储节点的数据更新方法。
【背景技术】
分布式存储空间管理的基本方法是通过多种映射,将用户可见的逻辑卷设备映射到分布在各个节点上的底层数据块。而为了维护这种映射关系,系统需要对大量的元数据进行管理。元数据管理算法直接决定着系统的性能的高低和功能的优劣。
分布式管理的存储系统由许多个节点组成。系统需要跨节点地将每个服务器的零散存储空间组织起来,给用户呈现一个统一连续的视图。节点和节点之间的通讯依赖成熟的网络协议例如TCP/IP,在现代的某些场景里也可以使用新型网络设备例如ROCE设备或者INFINIBAND设备。
节点的容量和处理能力可能是不尽相同的。系统需要按照每个节点的能力,合理地分配负载给每个节点。
同时,在分布式存储系统中,节点可能会暂时或永久地失效。新的节点随时可能加入,旧的节点随时可能退出。每当组成系统的节点发生变化的时候,系统中的数据就需要在节点间进行移动,以达到节点间负载的均衡。
数据在节点间移动是通过网络,这往往是一种代价昂贵的操作。在数据移动期间,系统整体性能会下降。因此,如何减少数据移动成为一个需要解决的问题。
【发明内容】
本发明的目的是提供数一种分布式存储系统中存储节点的数据更新方法,有效避免在分布式存储系统中各存储节点之间的数据大量转移,由多个节点并发进行,充分利用网络带宽和多节点并发IO能力提升存储系统的效率。
本发明采用以下技术方案:一种分布式存储系统中存储节点的数据更新方法,应用于分布式数据存储系统的每个存储节点中,在分布式数据存储系统中的存储节点变更后,包括:
获取分布式数据存储系统中存储节点变更后的节点拓扑结构及节点信息,生成分布式哈希表;
根据分布式哈希表重新分配当前存储节点存储的每个数据对象;
对于存储节点变化的数据对象,将数据对象发送至变化后的存储节点;
更新当前存储节点的区段管理器和索引管理器中。
进一步地,还包括:
接收其他数据存储节点发出的数据对象;其中,该数据对象为在分布式哈希表中指示存储在当前存储节点的数据对象;
通过区段管理器保存数据对象,并更新当前节点的索引管理器。
进一步地,通过区段管理器保存数据对象包括:
根据数据对象生成对应的数据摘要值;
将数据对象和对应的数据摘要值写入到活跃区段中;其中,活跃区段为当前用于写入数据对象的区段;
根据写入后的活跃区段生成数据对象的物理地址;其中,物理地址包括当前存储节点的设备ID、当前活跃区段对应的区段号和数据对象在当前活跃区段中的偏移量。
进一步地,更新当前节点的索引管理器包括:
获取数据对象的数据摘要值和物理地址;
将数据摘要值和物理地址存储至索引分区的对应索引桶中;
截取数据摘要值中的部分内容生成下标,存储至对应索引桶中的下标区中。
进一步地,根据分布式哈希表重新分配当前存储节点存储的每个数据对象包括:
根据数据对象生成数据加密摘要值;
根据数据加密摘要值和分布式哈希表生成数据对象的存储节点。
进一步地,根据数据加密摘要值和分布式哈希表生成数据对象的存储节点包括:
提取分布式哈希表中的数组空间;其中,数组空间由分布式存储系统中每个存储节点的节点加密摘要值组合而成;
将数据加密摘要值与数组空间中的节点加密摘要值依次进行对比,直至找到的节点加密摘要值大于数据加密摘要值,将该节点加密摘要值对应的存储节点作为数据加密摘要值对应的数据对象的存储节点。
本发明的有益效果是:使用一个“DHT”(分布式哈希表)来决定数据应该被保存在哪一个存储节点中,分布式哈希表可以基于某种稳定哈希算法,在存储节点数发生变化时,针对同样的数据,稳定哈希算法每次计算的结果都大致相同,这样可以保证数据所在的节点长时间保持稳定,避免数据的大规模移动。
【附图说明】
图1为本发明实施例中存储节点内的存储聚合示意图;
图2为本发明实施例中的区段的数据结构图;
图3为本发明是实施例中区段的数据结构图;
图4为本发明实施例中索引管理器的结构示意图;
图5为本发明实施例中的分布式哈希表的结构示意图。
【具体实施方式】
下面结合附图和具体实施方式对本发明进行详细说明。
本发明公开了一种分布式存储系统中存储节点的数据更新方法,应用于分布式数据存储系统的每个存储节点中,在分布式数据存储系统中的存储节点变更后,包括:
获取分布式数据存储系统中存储节点变更后的节点拓扑结构及节点信息,生成分布式哈希表;根据分布式哈希表重新分配当前存储节点存储的每个数据对象;对于存储节点变化的数据对象,将数据对象发送至变化后的存储节点;更新当前存储节点的区段管理器和索引管理器中。
本实施例通过使用一个“DHT”(分布式哈希表)来决定数据应该被保存在哪一个存储节点中,分布式哈希表可以基于某种稳定哈希算法,在存储节点数发生变化时,针对同样的数据,稳定哈希算法每次计算的结果都大致相同,这样可以保证数据所在的节点长时间保持稳定,避免数据的大规模移动。
本实施例的方案是对位于多个服务器节点上的硬盘或者SDD(固态硬盘)等类型的物理存储空间进行了多层次的虚拟化。每一层次的虚拟化都提供了不同的功能。通过各层次虚拟化的相互映射和协作,最终实现其功能。
本实施例中的虚拟化层次分为:
存储节点内硬盘空间虚拟化:提供本地存储空间的聚合。
跨节点的存储空间虚拟化:提供跨节点的虚拟存储池,数据按节点空间大小均衡分布。
为实现虚拟化,本技术方案在实现中主要涉及到2层映射:
数据的物理位置映射,实现节点内硬盘空间虚拟化。
数据所在节点的映射,实现跨节点的存储空间虚拟化。
通过多层映射,存储系统在保证用户视图相对稳定的前提下,让用户数据可以在物理节点和物理设备之间自由移动而不影响用户应用。
本实施例中所提及的区段管理器也称为“EXTENT MANAGER”,可以实现本地虚拟存储池的读写。索引管理器也称为“INDEX”,其实现的是管理数据对象的物理位置映射。分布式哈希表也称为“DHT”,用于实现的是管理数据对象所在存储节点的映射。
对于区段管理器,如图1所示,为存储节点内存储聚合示意图。一般地,单台服务器中的硬盘数量和容量是有限的。本实施例首先在组成系统的每个节点内部对节点所拥有的本机物理存储空间进行聚合,使得节点内的多个物理设备在逻辑上呈现出一个统一连续的虚拟存储池。通过图1可以看到,位于单存储节点中的多个硬盘,被区段管理器“ExtentManager”发现并组织为一个虚拟的存储池,从逻辑上将零散的物理空间组织到一起,为上层应用提供一个连续的虚拟空间。另外,区段管理器与索引管理器协同工作,将随机的小写请求进行聚合后写入后端物理磁盘,从而提升物理磁盘的性能,降低SSD磁盘的写放大。
对于区段管理来讲,当区段管理器启动时,会读取用户在配置文件中指定的设备文件的路径列表。
发现物理磁盘设备的过程如下:
1)区段管理器从配置文件中获取到磁盘设备列表后,读取该磁盘列表中所有磁盘的头部,查看是否有区段管理器置位的特别标志;如磁盘头部的某一位或者某几位是否置于0。
2)对于没有特殊标志的磁盘,表示该磁盘还未进行过初始化。区段管理器将该磁盘初始化为标准格式,并在磁盘头部置上区段管理器的特殊标志。
3)对于已有特殊标志的磁盘,表示该磁盘是已经初始化完成的磁盘设备,可以直接使用。
区段管理器在成功得到物理磁盘列表后,得到磁盘设备列表。对于还没有初始化的物理磁盘设备,区段管理器将对其进行初始化。一个“区段”(Extent)代表物理上连续的一段磁盘空间,本实施例中一个区段默认为16MB大小。区段的意义主要是为了将小块随机写转换为大块顺序写,进而提高磁盘的写性能,并降低SSD设备的写放大。
一个区段在物理磁盘上的数据结构大概是如图2所示,每个区段大小为16MB。每个区段开头的4KB为区段头,区段头中主要包含了区段的描述信息,例如,剩余空间起始位置mUp,以及剩余空间结束位置mDown等。紧接区段头后面的部分为区段数据区,用于保存用户数据,区段日志等。区段中空闲空间的开始位置由mUp指针指示,结束位置由mDown指示,若需计算空闲空间大小则:mUp-mDown。
区段管理器按如下流程对磁盘设备进行初始化:
1.首先获取磁盘设备的ID,大小等信息。
2.按照16MB的大小,将磁盘空间划分成多个区段。例如,一个100GB的磁盘,被划分为100*1024/16=6400个区段。
3.在磁盘的头部位置写上如图2所示的第一个16MB的区段。该区段在区段头中带有特殊标记(即上述的置位标记),不用于保存用户数据,是一个特殊的“超级区段”。每个物理磁盘设备上,只有一个超级区段。
4.超级区段中包含整个物理设备中的基本信息,包括磁盘所包含的区段个数,空闲区段个数等等。
5.超级区段写入成功后,该磁盘设备的初始化完成。
区段管理器在运行过程中需要对磁盘上的每个区段进行跟踪。在内存里,区段管理器维护一个“区段描述符”列表。该列表中包含了一系列的“区段描述符”,每一个描述符对应一个区段。
区段管理器启动时将存储节点中所有的物理磁盘设备上的区段信息读出,全都收集到“区段描述符”列表中。这样,区段描述符列表中包含了该存储节点的所有区段信息。
“区段描述符”的结构大致如图3所示,设备ID指示该区段所在的磁盘设备的序号。区段号对应区段的编号,是一个磁盘设备内部的区段编号,在读写的时候,区段管理器根据设备ID找到区段所在的磁盘,然后,以16MB*区段号为偏移量,找到区段的开始位置。mUp和mDown,用于指示区段内部的空闲空间。空闲空间起始地址为mUp,结束地址为mDown。图2中由于已经存储了部分数据,所以,mUp和mDown的位置随之改变了。
在本发明实施例中,为了提高写性能,区段管理器可以在内存中先写满一个区段后,才刷新到物理磁盘设备。但这样带来的风险是由于区段是一个较大的数据块,16MB的区段可能在还没来得及刷新到磁盘,节点就可能意外重启,导致数据丢失。
因此,本实施例用区段管理器利用NVDIMM或者NVRAM一类的非易失存储器进行写缓存,可以既解决数据写性能问题,又同时避免数据丢失的潜在风险。
区段管理器在非易失存储器上进行数据缓存的过程如下:
1.当系统中存在非易失存储器的时候,区段管理器首先在非易失存储器上载入32个空闲区段备用;
2.区段管理器维护一个“活跃区段”(ActiveExtent)指针,指向当前正在写入的区段;
3.一开始,“活跃区段指针”指向第一个空闲区段;
4.当活跃区段写满后,跳向下一个空闲区段。此时旧的活跃区段成为“脏区段”,需要等待刷新,下一个空闲区段成为当前的活跃区段;
5.然后,区段管理器开始将脏区段刷新到磁盘设备永久保存;
6.脏区段刷新完成后,区段管理器重新载入一个空闲区段,放到之前脏区段的位置备用;
7.重复这一过程直到32个空闲区段全部写完一遍,活跃区段指针又跳到第一个区段。此时脏区段已经被刷新到磁盘,第一个区段的位置上会被另一个空闲区段代替。
区段管理器中除了4KB的区段头之外,剩余的(16MB-4KB)的空间大小被用于两部分信息:用户数据区和区段日志区。用户数据区中,保存用户下发的数据块。一般的实施例中,数据块的大小为4KB。区段日志区中,保存用户数据块所关联的元数据,例如数据摘要值,用于校验数据的有效性性。
当用户数据块下发到区段管理器时,用户数据按照从左到右的方向写入区段数据区,而与之关联的元数据则从右往左写入日志区。从而形成首位对应的关系,即:用户数据-元数据对应。对应关系从两端向中间汇聚。
如图2所示,用户数据区的开始位置为mUp所指示的位置,从左往右扩张,结束位置在mDown所指定的位置。区段日志区开始位置为mDown所指示的位置,从右往左扩张,结束位置在mUp所指定的位置。当mUp和mDown相等时,则表示该区段已经写满。
区段管理器的写过程如下:
a.当接收到一个写请求,写请求中包含数据块本身和与之对应的数据摘要值;
b.区段管理器接收到数据块后,将写请求中所包含的数据块及其摘要写入到位于非易失存储器中的“活跃区块”;
c.写入完成后,数据块所在的区段号以及设备ID,区段内偏移量即被确定下来;
d.区段管理器返回写入成功,并返回由{设备ID,区段号,偏移量}组成的三元组物理地址;
e.区段管理器继续等待新的写请求;
f.当活跃区块写满后,活跃区块指针指向下一个空闲区块,当前区块标记为脏区块;
g.区段管理器根据设备ID和区段号,将所有的脏区块刷新到底层磁盘设备做永久保存。
区段管理器的读过程如下:
a.当接收到一个读请求,读请求中必须包含所请求数据的物理地址。物理地址中必须包含:i.设备ID,ii.区段号,iii.以及数据在区段中的偏移量。
b.区段管理器根据物理地址中的设备ID,区段号,以及偏移量,计算出数据所在的物理设备逻辑地址(LBA);
c.使用逻辑地址,从物理设备中读取该数据块并返回。
另外,在区段管理器进行读过程中,需要进行数据的完整性校验。区段管理器在保存用户数据块的同时,还保存了数据块对应的数据摘要值。数据块与数据摘要值在区段的数据区和日志区中首尾成对出现,向中间收拢,一一对应。
当需要进行数据校验的时候,按照下面的步骤进行:
1)从区段用户区读出用户数据块,然后对数据块的内容进行数据摘要值计算;
2)从区段日志区中取出对应的数据摘要值;
3)将第1)步计算而得的数据摘要值与第2)步取得的数据摘要值进行对比,如果两者一致,说明数据是完整有效的;反之,说明数据发生了损坏。
对于本实施例中提及的索引管理器,其维护了数据摘要值和数据对象之间的映射关系。索引管理器和区段管理器协同工作,指示了某个数据摘要值所对应数据对象所在的物理位置。
系统将用户数据和元数据切分成预定大小的“对象”,对象的大小通常是4KB或者8KB。随后,系统依据加密摘要算法,根据每个数据对象的内容,生成一个唯一的摘要值,也叫做数据摘要值。数据摘要值与数据内容,是一对一的关系。也即数据摘要值相同则意味着数据内容相同。数据对象被保存在存储节点的存储设备上,“EXTENT MANAGER”区段管理器负责读写节点内部的虚拟存储池。数据对象具体保存的物理位置由“EXTENT MANAGER”决定。“INDEX”索引管理器维护着从数据摘要值到物理位置的映射。INDEX是类似一个数据表的结构,保存了数据指纹和物理位置的对应关系。在实现中,可以使用哈希表类似的结构,以实现快速查询。
作为本实施例的一种可能的实现方式,如图4所示,为“INDEX”的索引结构。图中的指纹1…指纹N,即为数据摘要值1…数据摘要值N。
在图4中中,将索引分为了4个分区,分别为INDEX 1-4。每个分区包含多个桶,每个桶包含多个索引记录,每一条索引记录中,保存了:
a)数据摘要值(即数据指纹);
b)数据摘要值所对应的数据对象的物理存储位置,物理位置与区段管理器中的物理地址相对应,是一个{设备ID,区段号,偏移量}三元组。
c)数据对象的引用计数。
每个索引记录都有一个与之关联的数据对象。通过在索引记录中对摘要值进行查找,可以找到其对应的数据对象的物理位置,进而通过“EXTENTMANAGER”从虚拟存储池中读取到对象的内容。由于不同数据对象的摘要值是不同的,因此索引记录也是唯一的。因此,索引记录中还保存了每个数据对象的引用计数,表示该数据对象被外界引用的次数。当引用计数降低为0,则表示该数据对象没有被外界所引用,可以对其进行回收(即删除)。
通过数据摘要值引用数据对象,使得同样内容的对象只需要保存一次,实现了数据对象的重复删除。在INDEX中保存和查找数据摘要值时,可以将元数据单独放在某个索引区,例如INDEX 1。这样使得元数据的索引相对集中,查找效率更高。INDEX是全系统被访问最为频繁的结构,要求低延时的随机访问,因此最好是常驻内存。
索引记录的快速放置:
索引记录保存的是数据摘要值和数据对象本身的物理位置的对应关系。而数据摘要值天然就是散列的,因此,索引管理器无需重新设计哈希算法,只需要利用数据摘要值的散列特点,将索引记录放置到不同的索引桶里。
通过对索引记录中的数据摘要值进行截取,可以获得天然散列的哈希值,这个哈希值作为索引桶的下标,将索引记录其放置进某个索引分区中对应下标的索引桶里。例如,数据摘要值的长度有20个字节,160位,查找时仅需要截取40位,用40位来查找,效率比较高。
索引记录的快速查找:
与索引记录放置的过程类似,通过对索引记录中的数据摘要值进行截取作为下标。使用该下标在索引分区中直接随机访问到该数据摘要值对应的索引记录所在的索引桶,在桶中查找数据摘要对应的索引记录即可。
本实施例的索引管理器和区段管理器联合作用,可以完成数据按内容进行寻址的读写。
写流程:
1)用户发出写请求,写请求中需要包含需要数据对象本身,以及数据摘要值;
2)索引管理器通过数据摘要,上述的过程放置其对应的索引记录。此时,由于数据的物理位置尚未确定,因此,索引记录中只放置了一个空的物理位置三元组;
3)索引管理器用数据对象产生一个写请求,发送给区段管理器“ExtentManager“;
4)区段管理器接到写请求之后,向位于非易失存储器中的活跃区段写入对象并返回物理地址三元组;
5)索引管理器接收到物理地址三元组,将物理地址更新到索引记录中,并返回写成功;
6)当相同的数据对象再次被写入,由于其数据摘要相同,因此索引管理器不再重复写入数据对象,而仅仅在索引记录中将引用计数加一即可。相同的数据写入,只执行到索引管理器的部分即可完成了。
读流程:
1)用户发出读请求,读请求中包含需要读取数据的数据摘要;
2)索引管理器通过数据摘要,按照上述的过程查找其对应的索引记录;
3)找到索引记录后,从记录中获取到物理地址三元组;
4)用物理地址三元组产生一个读请求,发送给区段管理器“Extent Manager”;
5)区段管理器接到读请求之后,从物理磁盘设备上读取用户数据对象并返回。
在本发明实施例中,当分布式哈希表中有其他存储节点中的数据对象需要存储到当前存储节点时,还包括以下步骤:
接收其他数据存储节点发出的数据对象;其中,该数据对象为在分布式哈希表中指示存储在当前存储节点的数据对象;通过区段管理器保存数据对象,并更新当前节点的索引管理器。
对于分布式哈希表,如图5所示,分布式哈希表中包含了下列加密摘要值:H1,H2,H3……Hn,为节点加密摘要值,DH1,DH2,…DHn,为数据加密摘要值。
分布式哈希表的构建过程如下:
1.当系统启动的时候,每个存储节点检测自身的磁盘容量;
2.每个存储节点通过集群网络向其他存储节点进行广播,广播内容中包含节点ID和节点容量;
3.节点通过协商,收集到所有节点的ID和容量,然后每个节点分别开始构建DHT;
4.存储节点使用SHA1,SHA256或者CITYHASH一类的加密摘要算法,为每个存储节点计算存储节点加密摘要值,根据存储节点容量的大小,为每个节点计算出多个加密摘要值。容量越大,加密摘要值越多,容量越小,加密摘要值越少。在某些实施例中,是按照为每1MB节点容量就生成一个加密摘要值。例如:节点容量为1TB,那么在DHT中,就会为该存储节点生成1TB/1MB=1M个节点加密摘要值。节点加密摘要值从H1,H2……,一直到Hn,每个加密摘要值都有一个与之关联的存储节点;
5.将所有加密摘要值装入一个连续的数组空间,按照加密摘要值的大小排序。由于加密摘要值是散列的,因此,按大小排列存储节点的加密摘要值,代表不同存储节点的加密摘要值打散交叉装入数组。可以证明其概率分布为统一分布(UNIFORM DISTRIBUTION);
6.数组构建完成后,DHT构建完成。
在本实施例中,使用DHT来决定用户数据对象的存储节点,具体流程如下:
每当有新的数据对象写入,系统对数据对象进行哈希计算,得到数据加密摘要值DH1,DH2……,DHn。
数据加密摘要值在上述的数组中进行比较查询,直到找到下一个比数据加密摘要值大的节点加密摘要值。此时,该节点加密摘要值所代表的存储节点,就是新的数据对象应该被保存的存储节点。
由于节点加密摘要值是根据容量计算,且统一分布。根据概率,数据对象会以节点容量大小为权重,被平均分布到每个节点。由于数据加密摘要值不会改变,因此,对同一数据对象进行计算,总会得到相同的数据摘要值。从而使得同一数据对象总是被保存在相同的存储节点上。
当存储节点新增和删除的时候,存储节点加密摘要值数组被重新计算。由于节点加密摘要值不会发生变化,因此,节点加密摘要值在数组中的相对位置基本稳定,仍然是按照大小顺序排列。这使得存储节点相对位置变化很小,需要数据的移动也很少。节点发生变化后,所需移动的数据量大约为:数据移动量=(当前的数据总量*发生变化的节点容量)/总容量。
另外,在本实施例中的DHT中,由于组成分布式系统的存储节点数量可能会很多,因此,单个存储节点故障的可能性也较大。当存储节点出现故障的时候,必须要保证用户数据仍然可用。本实施例通过对数据保存多个副本来实现单个节点的容错。
在DHT中,每个存储节点都有多个加密摘要值。不同存储节点的加密摘要值互相交叉被装入DHT。用户可以预先设置一个副本数量,用于在多个存储节点上保存多分数据拷贝,以达到数据冗余,保护数据的作用。
假设用户设置了副本数量为2,那么DHT在处理新的数据写入时,按以下步骤执行:
1.对多个数据对象进行哈希计算,得到数据加密摘要值DH1,DH2……,DHn;
2.数据加密摘要值在上述的数组中进行比较查询,直到找到下一个比数据加密摘要值大的节点加密摘要值。此时,该节点加密摘要值所代表的存储节点,就是数据对象的第一份拷贝应该被保存的节点,这里我们称之为“节点A”;
3.数据对象被发送给节点A保存,作为数据块的第一份拷贝;
4.系统继续用数据加密摘要值在数组中向后遍历并和比较数组中的存储节点加密摘要值比较,直到找到下一个大于数据加密摘要值,且非“节点A”的节点摘要。该摘要值所代表的存储节点,就是第二份数据拷贝应该去往的存储节点,称之为“节点B”;
5.数据对象被发送给节点B保存,作为数据对象的第二份拷贝;
通过这个过程,本实施例支持多个数据拷贝。多数据副本的特点是:
1.数据拷贝的份数不能大于存储节点数量;
2.系统中可以允许同时故障的节点个数=数据副本数-1;
3.单个节点最多只能包含同一数据的一份拷贝。
除了单个的存储节点可以作为容错的单位,本实施例中还支持将存储节点定义在不同的故障域,实现按故障域进行容灾。被定义在同一个故障域中的多个存储节点可以一起故障,而不会导致用户数据丢失。
在定义了故障域的系统中,DHT将故障域看成一个单独的存储节点。当有新的数据对象写入时,系统按如下顺序执行:
1.对数据对象进行哈希计算,得到数据加密摘要值DH1,DH2……,DHn;
2.数据加密摘要值在上述的数组中进行比较查询,直到找到下一个比数据加密摘要值大的节点加密摘要值。此时,该存储节点加密摘要值所代表的存储节点,就是数据对象的第一份拷贝应该被保存的节点,这里称之为“节点A”;
3.数据对象被发送给节点A保存,作为数据块的第一份拷贝;
4.系统继续用数据加密摘要值在数组中向后遍历并和比较数组中的节点加密摘要值,直到找到下一个大于数据加密摘要值,且非“节点A”所在的故障域的节点摘要值。该节点摘要值所代表的存储节点,就是第二份数据拷贝应该去往的存储节点,称之为“节点B”;
5.数据对象被发送给节点B保存,作为数据块的第二份拷贝;
6.如果用户定义的数据副本数量大于故障域的数量,那么将剩余数据在故障域间平均分布,单个故障域中可以允许同一份数据的多个拷贝。
通过这个过程,本方案支持将多个数据拷贝分配给不同的故障域。定义了故障域的多数据副本的特点是:
1.数据拷贝的份数不能大于节点数量;
2.系统中可以允许同时故障的跨故障域的节点个数=数据副本数-1;
3.系统允许同时故障的故障域的个数=数据副本数-1;
4.故障域中允许包含同一数据的多份拷贝。
具体的,通过区段管理器保存数据对象包括:
根据数据对象生成对应的数据摘要值;将数据对象和对应的数据摘要值写入到活跃区段中;其中,活跃区段为当前用于写入数据对象的区段;根据写入后的活跃区段生成数据对象的物理地址;其中,物理地址包括当前存储节点的设备ID、当前活跃区段对应的区段号和数据对象在当前活跃区段中的偏移量。
可选的,更新当前节点的索引管理器包括:
获取数据对象的数据摘要值和物理地址;将数据摘要值和物理地址存储至索引分区的对应索引桶中;截取数据摘要值中的部分内容生成下标,存储至对应索引桶中的下标区中。
本实施例中,根据分布式哈希表重新分配当前存储节点存储的每个数据对象包括:
根据数据对象生成数据加密摘要值;根据数据加密摘要值和分布式哈希表生成数据对象的存储节点。
在该实施例中,根据数据加密摘要值和分布式哈希表生成数据对象的存储节点包括:
提取分布式哈希表中的数组空间;其中,数组空间由分布式存储系统中每个存储节点的节点加密摘要值组合而成。将数据加密摘要值与数组空间中的节点加密摘要值依次进行对比,直至找到的节点加密摘要值大于数据加密摘要值,将该节点加密摘要值对应的存储节点作为数据加密摘要值对应的数据对象的存储节点。
在本实施例中,当重新计算DHT时有新的读写,按照下列逻辑执行:
1)首先使用数据对象的数据摘要值,按照当前时刻的DHT查询数据所属存储节点;
2)但此时因为DHT尚未完成,因此查询到的所属存储节点上可能还不包含该数据对象;
3)此时,通过广播数据摘要值,在全系统范围的所有存储节点上查找该对象;
4)存储节点接收到通知后,通过自身的索引管理器查找该数据对象,如果找到,则返回该数据对象。
本实施例具有如下特点:
1)DHT重建过程由系统中所有存储节点同时并发地进行,提高了效率;
2)由于系统中的元数据和用户数据都是平均分布在每个存储节点,因此不存在特殊的元数据节点,没有单点瓶颈和单点故障的风险;
3)DHT的算法保证了数据对象的归属节点相对稳定,数据移动量很小;
4)整个过程通过底层的数据移动和修改中间层的映射来完成,对上层应用而言无感知。
通过上述对于本发明实施例的描述可知,本实施例中巧妙地安排元数据组织方式,实现了将用户数据和元数据一视同仁,共享同一块存储池。使得元数据本身也可以被精简配置以及重复删除。同时,因为对元数据和用户数据同源,所以在实现中只需要同一套逻辑来进行管理,无需区别对待,大大降低了软件逻辑的复杂度。从而,提高了空间利用率以及运行效率。
此外,本实施例对跨节点的零散存储空间进行了规整,对外统一呈现一个连续的逻辑空间。通过多层次的虚拟化,掩盖了数据在底层的实际存储细节。数据可以在底层节点间自由移动,上层应用对此无感知。数据节点互为服务备份,采用完全的点到点架构,系统中无特权节点,使得系统达到很高的可用性。
Claims (6)
1.一种分布式存储系统中存储节点的数据更新方法,其特征在于,应用于分布式数据存储系统的每个存储节点中,在所述分布式数据存储系统中的存储节点变更后,包括:
获取分布式数据存储系统中存储节点变更后的节点拓扑结构及节点信息,生成分布式哈希表;
根据所述分布式哈希表重新分配当前存储节点存储的每个数据对象;
对于存储节点变化的数据对象,将所述数据对象发送至变化后的存储节点;
更新当前存储节点的区段管理器和索引管理器中。
2.如权利要求1所述的一种分布式存储系统中存储节点的数据更新方法,其特征在于,还包括:
接收其他数据存储节点发出的数据对象;其中,该数据对象为在所述分布式哈希表中指示存储在当前存储节点的数据对象;
通过所述区段管理器保存所述数据对象,并更新当前节点的索引管理器。
3.如权利要求2所述的一种分布式存储系统中存储节点的数据更新方法,其特征在于,通过所述区段管理器保存所述数据对象包括:
根据所述数据对象生成对应的数据摘要值;
将所述数据对象和对应的数据摘要值写入到活跃区段中;其中,活跃区段为当前用于写入数据对象的区段;
根据写入后的活跃区段生成所述数据对象的物理地址;其中,所述物理地址包括当前存储节点的设备ID、当前活跃区段对应的区段号和数据对象在当前活跃区段中的偏移量。
4.如权利要求3所述的一种分布式存储系统中存储节点的数据更新方法,其特征在于,更新当前节点的索引管理器包括:
获取所述数据对象的数据摘要值和物理地址;
将所述数据摘要值和物理地址存储至索引分区的对应索引桶中;
截取所述数据摘要值中的部分内容生成下标,存储至所述对应索引桶中的下标区中。
5.如权利要求1或4所述的一种分布式存储系统中存储节点的数据更新方法,其特征在于,根据所述分布式哈希表重新分配当前存储节点存储的每个数据对象包括:
根据所述数据对象生成数据加密摘要值;
根据所述数据加密摘要值和分布式哈希表生成所述数据对象的存储节点。
6.如权利要求5所述的一种分布式存储系统中存储节点的数据更新方法,其特征在于,根据所述数据加密摘要值和分布式哈希表生成所述数据对象的存储节点包括:
提取所述分布式哈希表中的数组空间;其中,所述数组空间由分布式存储系统中每个存储节点的节点加密摘要值组合而成;
将所述数据加密摘要值与所述数组空间中的节点加密摘要值依次进行对比,直至找到的节点加密摘要值大于所述数据加密摘要值,将该节点加密摘要值对应的存储节点作为所述数据加密摘要值对应的数据对象的存储节点。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010094501.6A CN111274259A (zh) | 2020-02-16 | 2020-02-16 | 一种分布式存储系统中存储节点的数据更新方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010094501.6A CN111274259A (zh) | 2020-02-16 | 2020-02-16 | 一种分布式存储系统中存储节点的数据更新方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111274259A true CN111274259A (zh) | 2020-06-12 |
Family
ID=71002807
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010094501.6A Pending CN111274259A (zh) | 2020-02-16 | 2020-02-16 | 一种分布式存储系统中存储节点的数据更新方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111274259A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111857592A (zh) * | 2020-07-21 | 2020-10-30 | 星辰天合(北京)数据科技有限公司 | 基于对象存储系统的数据存储方法及装置、电子设备 |
CN112799852A (zh) * | 2021-04-12 | 2021-05-14 | 北京一流科技有限公司 | 逻辑节点的多维sbp分布式签名决策系统及其方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102035861A (zh) * | 2009-09-24 | 2011-04-27 | 中兴通讯股份有限公司 | 一种单跳分布式哈希表叠加网络的负载均衡方法和系统 |
CN102457429A (zh) * | 2010-10-27 | 2012-05-16 | 中兴通讯股份有限公司 | 分布式哈希表网络的负载均衡实现方法及装置 |
CN103488727A (zh) * | 2013-09-16 | 2014-01-01 | 河海大学 | 基于周期对数的二维时序数据存储和查询方法 |
CN104395904A (zh) * | 2012-04-27 | 2015-03-04 | 网络装置公司 | 高效的数据对象存储和检索 |
CN104657362A (zh) * | 2013-11-18 | 2015-05-27 | 深圳市腾讯计算机系统有限公司 | 数据存储、查询方法和装置 |
-
2020
- 2020-02-16 CN CN202010094501.6A patent/CN111274259A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102035861A (zh) * | 2009-09-24 | 2011-04-27 | 中兴通讯股份有限公司 | 一种单跳分布式哈希表叠加网络的负载均衡方法和系统 |
CN102457429A (zh) * | 2010-10-27 | 2012-05-16 | 中兴通讯股份有限公司 | 分布式哈希表网络的负载均衡实现方法及装置 |
CN104395904A (zh) * | 2012-04-27 | 2015-03-04 | 网络装置公司 | 高效的数据对象存储和检索 |
CN103488727A (zh) * | 2013-09-16 | 2014-01-01 | 河海大学 | 基于周期对数的二维时序数据存储和查询方法 |
CN104657362A (zh) * | 2013-11-18 | 2015-05-27 | 深圳市腾讯计算机系统有限公司 | 数据存储、查询方法和装置 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111857592A (zh) * | 2020-07-21 | 2020-10-30 | 星辰天合(北京)数据科技有限公司 | 基于对象存储系统的数据存储方法及装置、电子设备 |
CN112799852A (zh) * | 2021-04-12 | 2021-05-14 | 北京一流科技有限公司 | 逻辑节点的多维sbp分布式签名决策系统及其方法 |
CN112799852B (zh) * | 2021-04-12 | 2021-07-30 | 北京一流科技有限公司 | 逻辑节点的多维sbp分布式签名决策系统及其方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11372544B2 (en) | Write type based crediting for block level write throttling to control impact to read input/output operations | |
US8051050B2 (en) | Block-level data de-duplication using thinly provisioned data storage volumes | |
US11392544B2 (en) | System and method for leveraging key-value storage to efficiently store data and metadata in a distributed file system | |
US7676628B1 (en) | Methods, systems, and computer program products for providing access to shared storage by computing grids and clusters with large numbers of nodes | |
US7882304B2 (en) | System and method for efficient updates of sequential block storage | |
EP1569085B1 (en) | Method and apparatus for increasing data storage capacity | |
US7406484B1 (en) | Storage allocation in a distributed segmented file system | |
CN111324305B (zh) | 一种分布式存储系统中数据写入/读取方法 | |
CN103593477A (zh) | 一种哈希数据库的配置方法和装置 | |
US11314454B2 (en) | Method and apparatus for managing storage device in storage system | |
US11625169B2 (en) | Efficient token management in a storage system | |
US20200320014A1 (en) | Method and Apparatus for Managing Storage Device in Storage System | |
US20200379686A1 (en) | Flash registry with write leveling | |
CN111274259A (zh) | 一种分布式存储系统中存储节点的数据更新方法 | |
US7424574B1 (en) | Method and apparatus for dynamic striping | |
CN117573676A (zh) | 基于存储系统的地址处理方法、装置、存储系统及介质 | |
CN111338569A (zh) | 一种基于直接映射的对象存储后端优化方法 | |
WO2022267508A1 (zh) | 元数据压缩方法及装置 | |
Klein et al. | Dxram: A persistent in-memory storage for billions of small objects | |
CN114647388B (zh) | 一种分布式块存储系统和管理方法 | |
CN117931811B (zh) | 数据库处理方法、装置、计算机设备和存储介质 | |
CN111309261A (zh) | 一种分布式存储系统中单节点上数据物理位置映射方法 | |
US20230266919A1 (en) | Hint-based fast data operations with replication in object-based storage | |
US20210334247A1 (en) | Group based qos policies for volumes | |
JPH0282332A (ja) | 索引ファイルのインデックス用入出力バッファ方式 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20200612 |