一种高性能分布式块存储系统和管理方法与流程

文档序号:30497954发布日期:2022-06-22 07:27阅读:94来源:国知局
一种高性能分布式块存储系统和管理方法与流程

1.本发明涉及分布式存储领域,尤其是一种高性能的分布式块存储系统和管理方法。


背景技术:

2.目前有很多开源的分布式存储软件,比如glusterfs、sheepdog,这些存储软件绝大部分都采用linux自带的文件系统作为数据存储的后端,比如xfs、ext4这样的文件系统。也有像ceph的bluestore重新写了一套存储后端,绕开了文件系统直接读写物理磁盘。然而它们都是采用把一个大的虚拟磁盘拆分固定大小的对象,然后把对象分布式的存放到存储集群的各个物理磁盘中。它们都不是为块存储专门设计的,所以在块存储的场景下都有一些缺陷导致无法提供更高的性能: 1、两次寻址:如图1所示,在读写虚拟磁盘的时候要进行两次寻址。首先是在客户端使用crush算法或者查表的方式找出对象存放的主机磁盘,第二次是在数据存储端使用对象名称与偏移来寻址出对象数据具体存放在磁盘的哪一个位置。
3.2、元数据量过大:为了兼顾对象存储bluestore或者是其他的文件系统都会把存储单元拆分的很小(文件系统一般是4kb),导致有大量的用于记录数据存储位置的元数据。
4.3、系统复杂度高:因为元数据量过大,在bluestore中把元数据存放在rockdb数据库中进行加速查询,因此在每次i/o寻址的时候需要查询数据库才能获得数据的位置,这无疑加大了系统的复杂度。
5.4、i/o性能低: 在文件系统中使用内存缓存元数据用于加速i/o寻址,但是由于元数据量太大(每4kb对应一个位置元数据),所以很多元数据无法得到缓存,只能在i/o寻址的时候临时地从磁盘中读出位置元数据,这大大的降低了整个i/o的速度。 在bluestore中使用查询数据库来进行寻址,其性能也不高。


技术实现要素:

6.本发明为了克服以上技术的不足,根据集群中块存储体积大、数量少的特点,专门为块存储服务提供了一种高性能分布式块存储系统和管理方法,采用线性索引表的方式进行高性能的数据寻址与数据管理。本发明中采用三级线性索引表的方式进行寻址,并且在虚拟磁盘被客户端打开的时候从各个数据节点的磁盘中读出索引表发送给客户端进行汇总,客户端在i/o寻址的时候只需要在内存中进行一次线性寻址即能索引到数据的详细位置,极大的降低了虚拟磁盘的寻址时间。
7.本发明克服其技术问题所采用的技术方案是:本发明提出的一种高性能分布式块存储系统,至少包括一个客户端节点和若干与客户端节点耦接的数据存储节点,所述数据存储节点用于存储一个或多个虚拟磁盘的逻辑块,每个数据存储节点至少包括虚拟磁盘元数据区和用于存储数据的数据区,所述虚拟磁盘元数据区至少用于存储虚拟磁盘信息和第一类索引表,所述第一类索引表用于存储虚拟磁盘的逻辑块对应数据区的存储位置;所述
客户端节点至少配置有基于汇总第一类索引表得到对应某一虚拟磁盘的第二类索引表,所述第二类索引表还包括与之对应的虚拟磁盘的逻辑块对应的数据存储节点,磁盘编号,以及,逻辑块在磁盘中的地址。
8.进一步的,所述数据存储节点还包括用于保存数据区的数据块分配情况的磁盘分配表,以及,用于保存存储系统参数信息的磁盘格式信息区。
9.无需每个对象对应一个元数据,而是一个虚拟块存储在一个物理磁盘上共用元数据。同时增大存储单元分配的单位,每次至少分配4mb的存储空间。
10.进一步的,所述第一类索引表和第二类索引表分别包括若干级索引表,第一级索引表存储基于预设分配块大小分配的索引地址,上一级索引表存储下一级索引表起始地址,最后一级索引表用于存储的逻辑块的存储位置。
11.本发明提出的一种高性能分布式块存储系统管理方法,应用于上述高性能分布式块存储系统,包括客户端节点基于第二类索引表进行数据寻址,具体包括,通过客户端节点请求打开某一虚拟磁盘,则对应某一虚拟磁盘的所有数据存储节点发送第一类索引表至客户端节点;所述客户端节点基于接收到的所有第一类索引表汇总得到第二类索引表;客户端节点基于第二类索引表进行虚拟磁盘i/o寻址。
12.进一步的,还包括,客户端节点基于第二类索引表进行虚拟磁盘i/o寻址从而写虚拟磁盘,具体包括:客户端节点请求写入数据至某一虚拟磁盘,则客户端节点遍历第二类索引表;若查找第二类索引表的结果有效 ,则确定写入数据第一地址,并发送写请求至数据存储节点,其中,第一地址包括数据存储节点和磁盘编号,以及数据在磁盘中的位置;所述数据存储节点基于写请求和第一地址进行写入数据。
13.客户端i/o的时候可以根据第二类索引表一次性在内存中寻址到数据存储的主机、磁盘以及在磁盘中的位置。
14.进一步的,所述客户端节点基于第二类索引表进行虚拟磁盘i/o寻址从而写虚拟磁盘,还包括:若查找第二类索引表的结果无效,则客户端节点基于一致性哈希得到待写入数据的数据存储节点和磁盘编号,并发送写请求至对应的数据存储节点,其中写请求中至少标识了未分配;所述数据存储节点为待写入数据在数据区分配空间后写入数据,并将第二地址返回至客户端节点,其中,第二地址为数据在磁盘中的位置;所述客户端节点基于接收的第二地址更新第二类索引表。
15.采用一致性哈希算法把虚拟磁盘的数据均衡的分配到每一个磁盘,所以不需要额外的磁盘区段规划器等装置,同时避免了数据不均衡导致i/o全部落到少数的几个磁盘。
16.进一步的,所述客户端节点基于第二类索引表进行虚拟磁盘i/o寻址从而写虚拟磁盘,还包括数据存储节点进行写请求校验,具体包括:所述数据存储节点比较待写入的第一地址对应的虚拟磁盘的名称和写请求中的虚拟磁盘的名称是否一致,若一致,则数据存储节点进行i/o写入,否则,数据存储节点不进行i/o写入。
17.在数据存储节点进行写入数据的防护。
18.进一步的,还包括客户端节点基于第二类索引表进行虚拟磁盘i/o寻址从而读虚拟磁盘,具体包括:客户端节点查找第二类索引表得到逻辑块对应的第一地址;若查找第二类索引表的结果无效,则逻辑块未曾写入过数据;若查找第二类索引表的结果有效,则客户端节点则基于第一地址发送读请求,数据存储节点基于第一地址和读请求,将读取的数据
返回至客户端节点。
19.本发明的有益效果是:1、减少元数据的数量与体积:为后端存储设备提出一种新的数据存储格式,无需每个对象对应一个元数据,而是一个虚拟块存储在一个物理磁盘上共用元数据。同时增大存储单元分配的单位,每次至少分配4mb的存储空间,相较于普通文件系统的4kb分配单元,这极大的降低了元数据的数量。
20.2、在物理硬盘上存储其承载的虚拟磁盘的数据索引信息,在客户端打开虚拟磁盘的时候发给客户端,在客户端的内存中汇总成一个三级线性的索引表。客户端i/o的时候可以根据该索引表一次性寻址到数据存储的主机、磁盘以及在磁盘中的位置,其速度比从磁盘中读取位置信息或者是从数据库中读取位置信息快很多。
21.3、在客户端采用一致性哈希算法把虚拟磁盘的数据均衡的分配到每一个磁盘,所以不需要额外的磁盘区段规划器等装置,同时避免了数据不均衡导致i/o全部落到少数的几个磁盘。
22.4、本发明适用于分布式架构,避免了集中式存储的不可靠性。
附图说明
23.图1为现有技术进行读写虚拟磁盘进行两次寻址的示意图。
24.图2为本发明实施例的数据存储节点的存储系统磁盘格式示意图。
25.图3为本发明实施例的打开虚拟磁盘时根据第一类索引表汇总得到的第二类索引表示意图。
26.图4为本发明实施例的客户端节点的三级索引表示意图。
27.图5为本发明实施例的高性能分布式管理方法的流程图。
具体实施方式
28.为了进一步理解本发明,首先对本发明提到的部分术语进行解释:块存储:块设备中所有数据按照固定的大小分块,每一块赋予一个用于寻址的编号。块存储可以非连续的访问存储的数据,典型的块存储是硬盘;分布式块存储:单机块存储受限于自身的容量,无法实现无限扩容,而且容易出现单机故障。 所以云计算中一般采用分布式存储技术,也就是把数据存多份,每一份存在不同的主机节点上,以提高其可靠性与扩容能力;逻辑块:把虚拟磁盘逻辑地址按照固定大小的块拆分为很多很多小块,每一个小块简称为逻辑块。
29.虚拟块设备:提供给虚拟机使用的虚拟出来的块存储设备,把一个固定大小的虚拟块存储设备按照逻辑地址拆分为大小固定的逻辑块,每一个逻辑块存储在分布式存储系统的某一个或多个节点上;典型的虚拟块设备就是虚拟磁盘,用于给虚拟机提供块存储。
30.元数据:描述一个文件属性以及数据存储位置信息的所有数据,比如文件名称、大小、数据存放的位置信息等,其中,数据存放的位置信息通常称为索引。
31.一致性哈希算法:一致性哈希算法是分布式存储中最为常见的算法,它通过哈希算法的随机性,可以把数据随机、均匀的存放在存储集群的各个节点上。
32.为了便于本领域人员更好的理解本发明,下面结合附图和具体实施例对本发明做进一步详细说明,下述仅是示例性的不限定本发明的保护范围。
33.本发明所述的一种高性能分布式块存储系统,至少包括一个客户端节点和若干与客户端节点耦接的数据存储节点,数据存储节点用于存储一个或多个虚拟磁盘的逻辑块,每个数据存储节点至少包括虚拟磁盘元数据区和用于存储数据的数据区。其中虚拟磁盘元数据区用于存储虚拟磁盘对信息和第一类索引表,第一类索引表用于存储虚拟磁盘的逻辑块对应数据区的存储位置。客户端节点至少配置有基于汇总第一类索引表得到对应某一虚拟磁盘的第二类索引表,第二类索引表还包括虚拟磁盘的逻辑块对应的数据存储节点,磁盘编号以及逻辑块在磁盘的位置。
34.如图2所示,为本发明实施例中的数据存储节点的存储系统的格式示意图。将硬盘划分为4个区,分别为数据区、虚拟磁盘元数据区、磁盘分配表区和磁盘格式信息区:数据区:数据区把硬盘空间按照一定的大小分为很多块,在大部分实施方式中,每一个块为4mb,所以每一个块在硬盘中的地址都是确定的。
35.虚拟磁盘元数据区:虚拟磁盘元数据区保存着一个个虚拟磁盘存储在数据区存储位置的索引。
36.磁盘分配表:保存着数据区每一个块是否分配的信息。
37.磁盘格式信息区:该区保存该物理磁盘的格式信息,例如,数据区每一个块的大小,磁盘分配表区的大小,虚拟磁盘元数据区大小,数据区大小等。其中,虚拟磁盘元数据区保存着虚拟磁盘的第一类索引表,以第一类索引表为三级索引表对第一类索引表进行详细说明。
38.在本发明的一个实施例中,第一级索引表被配置为数组,数组中的每个元素用于记录第二级索引表的起始位置。第二级索引表被配置为数组,数组中的每个元素用于记录第三级索引表的起始位置。第三级索引表配置为数组,数组中每个元素用于记录其虚拟磁盘的逻辑块存放在该物理磁盘的哪个块中。
39.第一级索引表每一个数组元素记录着一个64gb存储空间的第二级索引表的位置;以此类推,第二级索引表每一个数组元素指向第三级索引表的位置,每一个元素对应着512mb的存储空间;第三级索引表每个元素存放着一个个4mb的逻辑块存放在集群中真实的地址。
40.在本发明的一个实施例中,每一级索引表都分配了固定字节的空间。该空间大小为磁盘的最小读写单位,从而减少额外的i/o。机械硬盘每次最小的读写、分配单位是一个扇区,也就是512字节;ssd最小的读写、分配单位一般是4096字节。以下以机械硬盘为例继续说明。
41.在本发明的一个实施例中,第一级索引表为大小为512字节的数组。每个索引表中的元素大小为4字节,记录着第二级索引表位于虚拟磁盘元数据区的哪一个分配单元中。同样第二级的每一张索引表也是512字节的数组,每个索引表中的元素大小也是4字节,记录着第三级索引表位于虚拟磁盘元数据区的哪一个分配单元中。第三级索引表也是一个512字节的数组,每个索引表中的元素大小为4字节,记录着该虚拟磁盘的一个4mb数据存放在物理磁盘的位置。
42.如图3所示,以一个64gb大小的虚拟磁盘为例说明了客户端节点上在打开虚拟磁
盘时根据第一类索引表汇总得到的第二类索引表,在本发明的一个实施例中,第二类索引表为三级索引表。第二类索引表的第一级索引表中的每个元素代表一个64gb单元,第二级索引表的每个元素对应一个512mb空间,第三级索引表的每个元素代表一个4mb单元,存放着一个个4mb的逻辑块存放在集群中真实的地址,包括主机地址、磁盘编号以及数据块地址。
43.客户端节点通过在内存中查线性表的方法即在内存中查找第二类索引表的方法,可以快速的确定虚拟磁盘数据对应的真实的地址。
44.在本发明的一个实施例中,第三级索引表为一个数组,数组的下标为虚拟磁盘块的索引,数组中的每个元素的值即为对应块的真实物理偏移。
45.为了减小索引表占用内存的大小,因此将第一类索引表和第二类索引表均设置为三层结构。
46.需要说明的是,为了实现更好的i/o均衡,对于新分配的存储空间客户端节点使用一致性哈希算法来计算虚拟硬盘的块应该存放在哪个物理磁盘上。
47.本发明另外还提出了一种基于上述高性能分布式块存储系统高性能分布式块存储管理方法,包括客户端节点基于第二类索引表进行数据寻址,流程图如图4所示,s11,通过客户端节点请求打开某一虚拟磁盘,则对应某一虚拟磁盘的所有数据存储节点发送第一类索引表至客户端节点;因为数据是分布式的存储在整个存储集群,所以每个数据存储节点上的第一类索引表都均不完整的,它只记录了自身数据存储节点上的数据索引关系,所以在打开使用的时候发送给客户端进行汇总。
48.s12,客户端节点基于接收的所有第一类索引表汇总得到第二类索引表;第二类索引表汇总得到了所有的第一类索引表的信息,第二类索引表完整了记录了某一虚拟磁盘的数据索引关系。
49.s13,客户端节点基于第二类索引表进行虚拟磁盘i/o寻址。
50.通过此种方式,在客户端的线性的第二类索引表寻址,几乎是不耗时间的,直接根据第二类索引表数组的下标就可以找到,大大提高了i/o寻址速度,极大的加速了i/o性能。
51.以如图5所示,如果要找一个偏移为516mb的数据,那么先查第二类索引表的第一级索引表找出第二级索引表的位置,然后在找出的第二级索引表中读出第二个元素,这个元素就是第三级索引表的位置。 然后在找出的第三级索引表中读出第二个元素的值便是该虚拟磁盘偏移为516mb的数据的真实位置。
52.通过此种方式,大大提高了i/o寻址速度,寻址在客户端的内存中的线性表中完成,极大的加速了i/o性能。
53.在本发明的一些实施方式中,客户端节点基于第二类索引表进行虚拟磁盘i/o寻址从而写虚拟磁盘,具体包括如下过程,通过客户端节点请求写入某一虚拟磁盘,客户端节点逐级遍历第二类索引表。
54.客户端节点首先逐级遍历第二类索引表的三级索引表,如果本次i/o写入的逻辑块已经分配过,那么在第二类索引表的三级索引表中就能检索到该数据块对应的具体地址,其中包括主机地址、磁盘编号以及数据在磁盘中的地址。然后发送给数据存储节点,从而进行i/o。
55.如果本次i/o写入的地址尚未分配,那么客户端节点先通过一致性哈希计算得到逻辑块应该被分配到哪一个数据存储节点的哪一个磁盘,然后把写入请求发送给对应的节点;存储节点接收到写入请求后会重新分配存储空间,在i/o写入后把新分配的空间地址返回给客户端;然后客户端使用该地址更新三级索引表,这样在下次i/o的时候就可以查询到该逻辑块的具体地址。
56.另外,在一些实施方式中,数据存储节点在进行i/o写入的时候需要进行防护,防止客户端传递错误的地址导致篡改了其他虚拟磁盘的数据。因此数据存储节点在写入的时候需要比较该地址隶属的虚拟磁盘名称是否与请求中的虚拟磁盘名称是否一致。
57.需要说明的是,在本发明的一个实施例中,在内存中查找线性索引表,一次性找出数据存储的主机、磁盘编号以及数据在磁盘中的位置。几乎不耗费时间,相对于采用bluestore查询rocksdb来索引,不仅索引速度更快,而且更加稳定。
58.在一些实施方式中,还包括客户端节点基于第二类索引表进行虚拟磁盘i/o寻址从而读虚拟磁盘,客户端节点查找第二类索引表得到逻辑块对应的第一地址;若查找第二类索引表的结果无效,则逻辑块未曾写入过数据;若查找第二类索引表的结果有效,则客户端节点则基于第一地址发送读请求,数据存储节点基于第一地址和读请求,将读取的数据返回至客户端节点。
59.需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
60.本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统或系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的系统及系统实施例仅仅是示意性的,可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
61.专业人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1