分布式存储系统下基于快照的数据处理方法和装置与流程

文档序号:21453912发布日期:2020-07-10 17:48阅读:214来源:国知局
分布式存储系统下基于快照的数据处理方法和装置与流程

本发明涉及分布式存储领域,具体而言,涉及一种分布式存储系统下基于快照的数据处理方法和装置。



背景技术:

目前,一些存储系统能够支持块设备的跨资源池克隆功能,即在新的资源池中克隆原资源池中块设备的快照。目前ceph分布式存储系统快照采用的是cow的方式,对一个块设备执行跨资源池进行克隆操作可如图1所示,将虚拟机1的跨设备进行快照操作后,进行克隆操作,得到pool中的clone1。当要向其中写入数据时,具体步骤可如图2所示,克隆卷(即clone1)中写入4k数据,该4k数据所对应的对象在pool2中是不存在的,因此还需要把对应源对象(一般是4m)的数据从pool1中读出来,在pool2中新建一个对象,将读出来的4m数据和业务4k数据合并写入到新建的对象中。

上述方式的缺陷在于,每次写数据的时候,无论数据大小,都要先把完整的4m对象数据从快照所在的原资源池中读出来,再写入对象到克隆所在资源池,然后再写入新的数据,这个过程需要读一次写两次,会导致性能急剧下降,且会导致克隆资源池的空间占用率快速升高,最终导致读写性能下降。

针对现有技术中对块设备的快照进行跨资源池克隆后数据读写性能较低的问题,目前尚未提出有效的解决方案。



技术实现要素:

本发明实施例提供了一种分布式存储系统下基于快照的数据处理方法和装置,以至少解决现有技术中对块设备的快照进行跨资源池克隆后数据读写性能较低的技术问题。

根据本发明实施例的一个方面,提供了一种分布式存储系统下基于快照的数据处理方法,包括:获取第一资源池中的第一块设备对应的第一快照;对所述第一快照在第二资源池中进行克隆,生成所述第二资源池中的第二块设备;当接收到写入请求时,在所述第二块设备中创建新对象,并在所述新对象中直接写入所述写入请求中的待写入数据。

进一步地,所述第二块设备用于挂载给虚拟机使用,当所述虚拟机的客户端接收到写入操作时,向所述第二资源池发送所述写入请求。

进一步地,所述第一资源池由全闪存介质盘组成,所述第二资源池由硬盘驱动器磁盘介质组成。

进一步地,上述方法还包括:接收读取请求;判断所述读取请求所指示的待读取数据是否处于所述第二资源池中的第二块设备中;根据判断结果从所述第二块设备或所述第一块设备中获取所述待读取数据。

进一步地,所述读取请求包括待读取数据在块设备中的起始位置和长度,判断所述读取请求所指示的待读取数据是否处于所述第二资源池中的第二块设备中,包括:将所述起始位置和所述长度作为第一窗口与所述第二块设备对应的第二窗口进行滑动匹配;确定所述第一窗口和所述第二窗口重合的部分为存在于所述第二块设备的待读取数据,所述第一窗口和所述第二窗口不重合的部分为不存在于所述第二块设备的待读取数据。

进一步地,根据判断结果从所述第二块设备或所述第一块设备中获取所述读取数据,包括:从所述第二块设备中获取存在于所述第二块设备的待读取数据;以及从所述第一块设备中获取不存在于所述第二块设备的待读取数据。

根据本发明实施例的一个方面,提供了一种分布式存储系统下基于快照的数据处理装置,包括:获取模块,用于获取第一资源池中的第一块设备对应的第一快照;生成模块,用于对所述第一快照在第二资源池中进行克隆,生成所述第二资源池中的第二块设备;写入模块,用于当接收到写入请求时,在所述第二块设备中创建新对象,并在所述新对象中直接写入所述写入请求中的待写入数据。

进一步地,所述第二块设备用于挂载给虚拟机使用,当所述虚拟机的客户端接收到写入操作时,向所述第二资源池发送所述写入请求。

根据本发明实施例的一个方面,提供了一种存储介质,存储介质包括存储的程序,其中,在所述程序运行时控制所述存储介质所在设备执行上述的分布式存储系统下基于快照的数据处理方法。

根据本发明实施例的一个方面,提供了一种处理器,处理器用于运行程序,其中,所述程序运行时执行上述的分布式存储系统下基于快照的数据处理方法。

在本发明实施例中,获取第一资源池中的第一块设备对应的第一快照,对所述第一快照在第二资源池中进行克隆,生成所述第二资源池中的第二块设备,当接收到写入请求时,在所述第二块设备中创建新对象,并在所述新对象中直接写入所述写入请求中的待写入数据。上述方案提供的块设备的跨资源池克隆的写方法,写io时,无需重将原块设备中的数据拷贝到克隆得到的新块设备中,而是直接写入新对象,而将跨资源池克隆卷上的数据作为源资源池快照的增量数据,因此无需多次的读写,克隆卷也不会占用的较大的空间,如果数据变化量为1%,克隆卷占用空间仅为原卷大小的1%,解决了现有技术中对块设备的快照进行跨资源池克隆后数据读写性能较低的技术问题。

附图说明

此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:

图1是根据现有技术的一种块设备执行跨资源池进行克隆操作的示意图;

图2是根据现有技术的一种进行克隆操作后写入数据的示意图;

图3是根据本发明实施例的分布式存储系统下基于快照的数据处理方法的流程图;

图4是根据本发明实施例的一种在克隆卷中写数据的示意图;

图5是根据本发明实施例的一种读取数据的示意图;以及

图6是根据本发明实施例的分布式存储系统下基于快照的数据处理装置的示意图。

下面,为了便于对实施例的理解,先对实施例中出现的专业名词进行解释:

资源池:pool,也称存储池,是由一组物理磁盘或固态硬盘所组成的逻辑存储空间。

对象:资源池中存储数据的基本单元,通常设置大小为4mb。

块设备:简称卷,块设备是一个字节序列(例如,一个512字节的数据块)。基于块的存储接口是最常见的存储数据方法,它们基于旋转介质,像硬盘、cd、软盘、甚至传统的9磁道磁带。块设备可以在资源池中创建,并由一组对象组成。

cow:copy-on-write,写时拷贝,当protectedentity的某个block将被改写的时候,该block首先被copy到其他地方(即拷贝到快照系统指定的某个位置),然后再在它原来的位置(即该protectedentity的存储位置)进行改写。

row:redirect-on-write,写时重定向,row快照使用指针指向protectedentity的所有block,若一个block将被改写,存储系统将指向该block的指针指向一个新位置,然后将新数据写到该新位置。

快照:简称snap,快照是块设备在某个特定时间点的一份只读副本,该拷贝包括块设备在该时间点(拷贝开始的时间点)的所有数据。快照可以是其所表示的数据的一个副本,也可以是数据的一个复制品。

克隆:简称clone,是基于块设备的某个只读快照创建的可写块设备。克隆上的读写更改不会影响到源快照和源块设备。

具体实施方式

为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。

需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

实施例1

根据本发明实施例,提供了一种分布式存储系统下基于快照的数据处理方法的实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。

图3是根据本发明实施例的分布式存储系统下基于快照的数据处理方法的流程图,如图3所示,该方法包括如下步骤:

步骤s302,获取第一资源池中的第一块设备对应的第一快照。

具体的,上述第一块设备可以是虚拟机所使用的块设备。上述步骤用于进行虚拟机镜像,即对虚拟机所使用的块设备,执行一次快照操作,并持久化得保存这个块设备的只读快照。

步骤s304,对所述第一快照在第二资源池中进行克隆,生成所述第二资源池中的第二块设备。

在创建新的虚拟机时,对上述的第一快照进行一次克隆操作,即可得到一个新的可读写的块设备,并可以将该新的可读写的块设备挂载给新的虚拟机使用。

步骤s306,当接收到写入请求时,在所述第二块设备中创建新对象,并在所述新对象中直接写入所述写入请求中的待写入数据。

在上述步骤中,当用户通过新创建的虚拟机写入数据时,直接将待写入数据写入第二块设备中创建的新对象中。

图4是根据本发明实施例的一种在克隆卷中写数据的示意图,在一种可选的实施例中,结合图4所示,基于pool1中原卷的快照进行克隆操作,得到pool2中的克隆卷1和克隆卷2(克隆卷1和克隆卷2可以支持不同的虚拟机的使用)。通过新建的虚拟机的客户端获取写入请求,从而将待写入数据直接写入(directwrite)克隆卷1新建的对象中,并对克隆卷1进行打快照操作。例如,对于4k大小的io数据,直接在新资源池pool2的clone1中创建空的新对象,并只写入io命令所指定的4k大小的数据。

由上可知,本申请上述实施例获取第一资源池中的第一块设备对应的第一快照,对所述第一快照在第二资源池中进行克隆,生成所述第二资源池中的第二块设备,当接收到写入请求时,在所述第二块设备中创建新对象,并在所述新对象中直接写入所述写入请求中的待写入数据。上述方案提供的块设备的跨资源池克隆的写方法,写io时,无需重将原块设备中的数据拷贝到克隆得到的新块设备中,而是直接写入新对象,从而将跨资源池克隆卷上的数据作为源资源池快照的增量数据,因此无需多次的读写,克隆卷也不会占用的较大的空间,如果数据变化量为1%,克隆卷占用空间仅为原卷大小的1%,解决了现有技术中对块设备的快照进行跨资源池克隆后数据读写性能较低的技术问题。

作为一种可选的实施例,所述第二块设备用于挂载给虚拟机使用,当所述虚拟机的客户端接收到写入操作时,向所述第二资源池发送所述写入请求。

在上述步骤中,当创建新的虚拟机时,将原虚拟机的块设备的快照克隆后挂载给新的虚拟机使用。当用户从虚拟机的客户端进行写入操作时,虚拟机的客户端向第二资源池发送写入请求。

作为一种可选的实施例,所述第一资源池由全闪存介质盘组成,所述第二资源池由硬盘驱动器磁盘介质组成。

在云平台/虚拟化/云桌面等应用场景中,上述方案将虚拟机镜像所使用的块设备,运行在由全闪存介质盘组成的资源池中(全闪存盘的容量价格比hdd磁盘的成本高出多倍),而由虚拟机镜像所创建新的虚拟机块设备,则运行在由hdd(harddiskdrive,硬盘驱动器)磁盘介质组成的资源池中。这样既可以保证虚拟机的读写运行速度,又大幅降低云平台所需存储的成本。

作为一种可选的实施例,上述方法还包括:接收读取请求;判断所述读取请求所指示的待读取数据是否处于所述第二资源池中的第二块设备中;根据判断结果从所述第二块设备或所述第一块设备中获取所述待读取数据。

具体的,上述读取请求仍然是用户在新建的虚拟机上进行读取操作时发出。由于进行写操作时直接将待写入数据写入了克隆得到的第二块设备里新建的对象中,也即第二块设备中只包括通过新创建的虚拟机写入的数据,因此待读取的数据不一定存在于第二块设备中,在该种情况下,需要判断待读取数据是否存在于第二块设备,然后确定如何读取待读取数据。

在一种可选的实施中,仍结合图4所示,读取io的时候,先读取新资源池pool2中克隆卷上的对象,如果该对象可以满足读io大小,则读取完成返回;如果该对象不存在或无法满足整个读io大小,则继续读取源资源池pool1中快照上的对象,并将两次读取结果合并后返回。

作为一种可选的实施例,所述读取请求包括待读取数据在块设备中的起始位置和长度,判断所述读取请求所指示的待读取数据是否处于所述第二资源池中的第二块设备中,包括:将所述起始位置和所述长度作为第一窗口与所述第二块设备对应的第二窗口进行滑动匹配;确定所述第一窗口和所述第二窗口重合的部分为存在于所述第二块设备的待读取数据,所述第一窗口和所述第二窗口不重合的部分为不存在于所述第二块设备的待读取数据。

在上述方案中,读取请求中包括待读取数据在块设备找那个的起始位置和长度,因此根据读取请求能够得到个第一窗口。而第二块设备中所存储的数据也具有其起始位置和长度,因此可以构成第二窗口。将两个窗口进行滑动匹配,即可确定待读取数据是否存在于第二块设备中。如果第一窗口和第二窗口不重合,则可以确定待读取数据全部不处于第二块设备中,如果第一窗口和第二窗口部分重合,则可以确定第一窗口中,与第二窗口重合的部分所表示的待读取数据处于第二块设备中,并确定第一窗口中,与第二窗口不重合的部分所表示的数据不处于第二块设备中;而如果第一窗口全部被第二窗口所覆盖,则可以确定待读取数据全部属于第二块设备中。

作为一种可选的实施例,根据判断结果从所述第二块设备或所述第一块设备中获取所述读取数据,包括:从所述第二块设备中获取存在于所述第二块设备的待读取数据;以及从所述第一块设备中获取不存在于所述第二块设备的待读取数据。

图5是根据本发明实施例的一种读取数据的示意图,结合图5所示,虚拟机的客户端可以通过两条途径读取数据。如果待读取数据全部在pool2的克隆卷1(即克隆得到的第二块设备)中,则通过散列读(sparseread)(1)从克隆卷1中读取数据,如果待读取数据全部在原卷(即第一块设备)中,则通过散列读(sparseread)(2)从原卷中读取数据,如果待读取数据中的部分数据在克隆卷1中,部分数据在原卷中,则分别通过(1)和(2)读取数据,并在通过mergeextentbuffer(3)合并后返回给虚拟机的客户端。

实施例2

根据本发明实施例,提供了一种分布式存储系统下基于快照的数据处理装置的实图6是根据本发明实施例的分布式存储系统下基于快照的数据处理装置的示意图,如图6所示,该装置包括:

获取模块60,用于获取第一资源池中的第一块设备对应的第一快照。

生成模块62,用于对所述第一快照在第二资源池中进行克隆,生成所述第二资源池中的第二块设备。

写入模块64,用于当接收到写入请求时,在所述第二块设备中创建新对象,并在所述新对象中直接写入所述写入请求中的待写入数据。

作为一种可选的实施例,所述第二块设备用于挂载给虚拟机使用,当所述虚拟机的客户端接收到写入操作时,向所述第二资源池发送所述写入请求。

作为一种可选的实施例,所述第一资源池由全闪存介质盘组成,所述第二资源池由硬盘驱动器磁盘介质组成。

作为一种可选的实施例,上述装置还包括:接收模块,用于接收读取请求;判断模块,用于判断所述读取请求所指示的待读取数据是否处于所述第二资源池中的第二块设备中;读取模块,用于根据判断结果从所述第二块设备或所述第一块设备中获取所述待读取数据。

作为一种可选的实施例,所述读取请求包括待读取数据在块设备中的起始位置和长度,判断模块包括:匹配子模块,用于将所述起始位置和所述长度作为第一窗口与所述第二块设备对应的第二窗口进行滑动匹配;确定子模块,用于确定所述第一窗口和所述第二窗口重合的部分为存在于所述第二块设备的待读取数据,所述第一窗口和所述第二窗口不重合的部分为不存在于所述第二块设备的待读取数据。

作为一种可选的实施例,读取模块包括:第一读取子模块,用于从所述第二块设备中获取存在于所述第二块设备的待读取数据;以及第二读取子模块,用于从所述第一块设备中获取不存在于所述第二块设备的待读取数据。

实施例3

根据本发明实施例,提供了一种存储介质,存储介质包括存储的程序,其中,在所述程序运行时控制所述存储介质所在设备执行实施例1中所述的分布式存储系统下基于快照的数据处理方法。

实施例4

根据本发明实施例,提供了一种处理器,处理器用于运行程序,其中,所述程序运行时执行实施例1项所述的分布式存储系统下基于快照的数据处理方法。

上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

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