一种数据迁移方法和装置与流程

文档序号:11233792阅读:520来源:国知局
一种数据迁移方法和装置与流程

本发明涉及计算存储领域,特别涉及一种数据迁移方法和装置。



背景技术:

分布式存储系统可以提供分级存储功能:将存储空间划分为不同的存储级别,根据文件的优先级把文件存放在不同的存储级别上,满足用户对文件处理速度、传输带宽和存储容量的多样需求,以达到合理利用存储空间、提升存储系统访问性能、降低总体部署成本的目的。

现有技术中,把文件写入存储系统的一种典型做法是;先把文件写入高性能存储介质;扫描符合条件的文件(比如创建超过一段时间,或者少于一定访问量的文件),把符合条件的文件重新读取出来,迁移到低成本的存储介质中。

把符合条件的文件读出,以及再写入新的存储介质的这一个过程需要耗费存储系统的资源。例如采用数据打散+ec计算冗余的方式进行数据存储的存储系统中。其分级存储的具体做法是:首先要把一个文件的全部分片从高性能存储器中读到主机中,然后进行ec校验,在校验成功后,再由主机把文件再次拆分成分片,把拆分获得的文件分片写入低性能的存储器。参见附图1,先把位于第一存储池的文件分片读出,主机把读到的分片进行校验并生成文件,然后重新把我文件打散成分片,写入第二存储池。

这种迁移方案中,先对文件分片进行汇聚,然后做ec校验,接着又要把文件再次拆成文件分片,这些操作对存储系统资源的耗费更大。



技术实现要素:

本发明第一种可能的实现方式,提供一种数据迁移方法,该方法包括:从元数据中查找满足迁移条件的数据单元,获得所述数据单元的分片的键key、键-值key-value所在的源存储节点标识、以及目的存储池标识,其中,每个键对应一个值value;从所述目的存储池标识代表的目的存储池中,选择用于存储所述key-value的目的存储节点;指令所述源存储节点使用所述key从所述源存储节点获得所述key-value,把获得的所述key-value发送给所述目的存储节点。

使用该数据迁移方法,可以在kv协议的基础上,实现把一个文件的分片在不同存储节点的直接迁移。避免了先对文件分片进行汇聚,然后做ec校验,接着又要把文件再次拆成文件分片,这些操作对存储系统资源的耗费更大。

在第一种可能的实现方式种,可选的,迁移条件包括条件中的至少一个:数据单元的创建时间、数据单元的大小、数据单元名称、数据单元所在存储池。

在第一种可能的实现方式种,可选的,其中:所述源存储节点所在的存储池和所述目的存储池提供的存储性能不同。

在第一种可能的实现方式种,可选的,其中:源存储节点在需要读取和所述key-value相邻的数据时,执行把所述key-value发送给所述目的存储节点的操作。

在第一种可能的实现方式种,可选的,所述数据单元是下面其中一种:文件、对象、块或者文件的一部分。

本发明第二种可能的实现方式,提供一种迁移装置,该装置包括:查找模块,用于从元数据中查找满足迁移条件的数据单元,获得所述数据单元的分片的键key、键-值key-value所在的源存储节点标识、以及目的存储池标识,其中,每个键对应一个值value;目的存储节点确定模块,用于从所述目的存储池标识代表的目的存储池中,选择用于存储所述key-value的目的存储节点;迁移模块,用于指令所述源存储节点使用所述key从所述源存储节点获得所述key-value,把获得的所述key-value发送给所述目的存储节点。

在第二种可能的实现方式中,可选的,迁移条件包括条件中的至少一个:数据单元的创建时间、数据单元的大小、数据单元名称、数据单元所在存储池。

在第二种可能的实现方式,可选的:所述源存储节点所在的存储池和所述目的存储池提供的存储性能不同。

在第二种可能的实现方式中,可选的:所述源存储节点用于:在需要读取和所述key-value相邻的数据时,执行把所述key-value发送给所述目的存储节点的操作。

在第二种可能的实现方式中,可选的,所述数据单元是下面其中一种:文件、对象、块或者文件的一部分。

附图说明

为了更清楚地说明本发明实施例的方案,下面对实施例描述中所需要使用的附图作简单地介绍,下面描述中的附图仅仅是本发明的一些实施例,还可以根据这些附图获得其他的附图。

图1是现有技术数据迁移方案的示意图。

图2是本发明实施例数据迁移方案的示意图。

图3是本发明实施例数据迁移方法的流程图图。

图4是本发明实施例数据迁移装置的结构图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明的技术方案进行描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例所获得的所有其他实施例,都属于本发明保护的范围。

本发明实施例中的分布式存储系统可以用于存储文件、对象(object)、块(block)或者文件的一部分、对象的一部分。为了方便说明,下面以文件为例进行介绍,可以理解的是,在没有特别声明的情况下,后文提及的“文件”可以用“对象”、块、“文件的一部分”或者“对象的一部分”替换。

基于键值(keyvalue,kv)存储的分布式存储系统,是分布式存储系统的一种存在形式。分布式存储系统可以包括存储池,存储池(pool)是一个提供存储空间的逻辑上的单位,存储池包括存储节点,不同的存储池的性能级别可以不同。把一个文件存储到存储池中,具体而言是:把文件拆分从成文件分片(数据分片+校验分片),把不同的文件分片存储到不同的存储节点中,或者是把不同的文件分片存储到不同的存储器(此种情况不对存储器所属于的存储节点进行区分,由于一个存储节点可以有多个存储器,因此有可能有部分文件分片存储在同一个存储节点)中。

例如:采用分布式哈希表(dht)算法或者范围分区(rangepartition)算法确定文件分片的具体存储器,然后把这些分片存储到不同的存储器中。此外,还有多副本的存储方式,也就是把同一个文件/文件分片存储到多个存储器中。前一种存储方式,如果有文件分片丢失,可以用余下的分片通过校验算法恢复出丢失的文件分片。后一种存储方式,由于各个副本的内容相同,如果有副本丢失,读取其他副本即可。

本发明实施例提供的方案,可以把一个存储池的文件迁移到另外一个资源池。由于不同资源池的性能不同,因此本发明实施例可以实现把文件从高性能存储器迁移到低性能存储器;或者反之,把低性能存储器迁移到高性能存储器的办法。存储池性能的高低可以用每秒读写速度、存储介质的稳定性、存储池的冗余保护级别等进行描述。例如由固态硬盘(ssd)组成的存储池的性能,通常来讲大于由磁盘组成的存储池的性能;而由高速磁盘组成的存储池的性能,大于由低速磁盘组成的存储池的性能。一般来说,高性能存储池的成本大于低性能的存储池。

参见附图2,本发明实施例的文件迁移方案中,位于第一存储池的文件分片无需经过在主机或者其他存储节点的汇聚,直接迁入位于第二存储池的存储节点。该方案避免了文件分片的重新汇聚和打散,减少ec计算,减少数据迁移对前台业务的影响。

参见图3的流程图和下面的步骤,介绍了本发明实施例提供一种数据迁移方法。需要说明的是,下面的实施例以存储池之间数据迁移为例进行介绍,实际上也可以没有存储池的概念,而直接是存储节点之间的文件分片之间的迁移。

步骤11、在存储系统中预存数据迁移策略。

存储系统由多个存储池组成,每个存储池包括至少一个存储节点。存储节点例如是服务器(server)、主机(host)或者是控制器+存储器的组合。存储节点用于存储数据,还可以对存储的数据进行管理。

迁移策略可以保存在某一个存储节点中,例如存储在管理存储节点中;也可以存储在多个存储节点中,例如每个存储节点存储一部分存储策略,或者每个存储节点存储完整的存储策略。

迁移策略可以描述符合迁移条件的文件的标准。迁移条件可以包括文件所在存储池id,还可以包括:文件的创建时间、距离文件最后一次被访问的时间、文件的大小、文件名称、文件名称前缀、文件名称后缀、这些条件中的至少一个。每个迁移条件包括了具体的参数值,例如:文件的大小大于10mbytes,文件的创建时间超快10天,文件名称前缀是aaa,文件所在的存储池是存储池a。因此,迁移策略包括:迁移条件、文件所在存储池id、目标存储池id。文件所在存储池id也可以不作为迁移条件的选项,而是作为迁移策略的参数之一。换句话说,迁移策略包括:迁移条件、文件所在存储池id、目标存储池id。这两种描述方式并不矛盾,下面以前一种为例进行说明。

示例性的,一种迁移策略是,满足:文件名是前缀aaa开头的文件、创建时间早于2017/1/1、最后一次修改时间早于2017/2/1、最后一次访问时间早于2017/2/1、并且位于高性能的存储池1(源存储池)的文件的文件分片,需要迁移到底成本的存储池2(目的存储池)。

本步骤是预置步骤,并不是每次执行迁移时都需要执行本步骤。因此,本步骤在正常迁移流程中是可选的,只要在存储系统中已经存在有迁移除策略即可。

步骤12、查找符合迁移条件的文件,获得所述文件的分片的键key。获得键-值(key-value,kv)所在的源存储节点的存储节点标识,以及目的存储池标识。本步骤可以由所述管理存储节点执行,也可由所述存储系统中的其他存储节点执行。

查询操作可以周期性进行,也可以由管理员强制触发。

元数据描述了文件的各项实际参数,例如前文所述的文件的创建时间、距离文件最后一次被访问的时间、文件的大小、文件名称、文件名称前缀、文件名称后缀。因此用迁移条件和元数据进行比对,可以查找到满足迁移条件的文件。

查找到符合迁移条件的文件后,由符合迁移条件的文件的元数据可以获得这个文件的各个文件分片(简称分片)的key。

例如,一种key命名规则是:文件名前缀+自然数,并且每个分片的大小是固定的。假设对于一个前缀为abc的文件,从元数据中获知这个文件大小是10mbytes,每个分片的大小是2mbytes。我们可以得到文件的数据分片的key的命名是:aaa1,aaa2,aaa3,aaa4和aaa5。假设还有2个冗余的校验分片,那么校验分片的命名是:aaa6和aaa7。由此就可以获得这个文件的所有文件分片(校验分片和数据分片)的key。这些与数据分片和校验分片就是value,和key一一对应,需要在后续步骤中从源存储池中迁移出去。

需要说明的是,上述根据文件名生成key的命名规则是一种常见的做法,因为这种做法比较简便。除了上面这个例子还可以有其他方案。此外,有其他方式使用文件名生成key。此外,也可以不用文件名,使用其他算法生成key。例如,使用一种伪随机数算法生成的伪随机数作为key,还可以用文件的大小与英文字母的组合作为key。只要key和value一一对应,并且尽量保证(有时候不是必须保证)不同的value对应到的key不重复即可。

元数据中可以记录key-value所在的存储节点。那么,读取元数据就可以获知key-value所在的源存储节点。

另外一种获得key-value所在的源存储节点的方案介绍如下:

容易想到:在迁移key-value之前,首先需要把key-value存储到存储节点中。在把key-value存储到源存储池中时,按照分布式算法对key进行运算,以选择存储key-value的具体存储节点。因此,本步骤在获得分片的key后,按照同样的的分布式算法,可以知道key-value所在的存储节点。一种可选的分布式算法是dht:对key进行哈希运行,把计算获得的哈希值按照存储池中存储节点的数量取模运行,获得的值就是存储key-value的存储节点。例如:源存储池中一共有依次排序的:存储节点1、存储节点2、存储节点3和存储节点4四个存储节点。哈希运算后,按照存储节点的总数4取模获得的值是2,那么key-value位于排名第二的存储节点2中。

目的存储池标识可以预先设置。目的存储池可以和源存储池形成映射关系。例如:当存储池a作为源存储池时,其对应的目的存储池是存储池b;当存储池b作为源存储池时,其对应的目的存储池是存储池c;当存储池d作为源存储池时,其对应的目的存储池是存储池e。当然,也可以由特定的算法来决定,甚至可以由管理员指定,此处不做限制。

考虑到每个key-value的迁移方式相同。这些key-value的迁移可以并行执行以提高迁移效率。因此,为了描述的简便,在没有特别说明的情况下,在步骤13-步骤15中仅以其中一个key-value的操作流程进行举例。

步骤13,从所述目的存储池标识所代表的目的存储池中,选择用于存储所述key-value的目的存储节点。

本步骤可以由所述管理存储节点执行,也可由所述存储系统中的其他存储节点执行,例如由目的存储池中一个存储节点来执行。

示例性的,可以使用类似骤12的dht方案,选择目的存储池中的一个存储节点作为所述目的存储节点,用于存储所述key-value。另外,也可以轮流选择一个存储节点作为所述目的存储节点。此外,还可以随机选择一个存储节点作为目的存储节点。因此,选择方案可以有多种。只要从所述目的存储池中选择出一个存储节点即可。

步骤14,指令所述源存储节点使用所述key从所述源存储节点获得所述key-value,把获得的所述key-value发送给所述目的存储节点进行存储。源存储节点按照指令使用所述key从所述源存储节点获得所述key-value,把获得的所述key-value发送给所述目的存储节点进行存储。

目的存储节点接收所述key-value后,可以把所述key-value存储在本地的内存或者存储器中,这样就完成了一个key-value的迁移。以此类推,按照同样方法可以对余下的key-value进行迁移。如果同一个文件的所有文件分片都完成了迁移,则整个文件的迁移完成。

本步骤中,如果发出指令的存储节点和源存储节点是同一个存储节点,则指令是可选的,或者也可以看做是源存储节点自己给自己发出指令。直接由所述源存储节点从本地的存储器中获得所述key-value,把获得的所述key-value发送给所述目的存储节点进行存储。

本步骤中,如果发出指令的存储节点和源存储节点不是同一个存储节点,则发出指令的存储节点把指令发给源存储节点,让源存储节点源存储节点从本地的存储器中获得所述key-value,把获得的所述key-value发送给所述目的存储节点进行存储。

源存储节点如果有多个存储器,则还需要确定key-value具体所在的硬盘。其确定方法可以由当初key-value被存储到存储器的方式确定。根据对key进行哈希以及取模,确定key-value被存储到存储器。此外,也可以由源存储节点维护一个映射表,映射表中记录key和key-value存储位置这二者的关系,那么使用key在映射表中查找,也可以获得key-value所在的存储器。

可选的,源存储节点在收到所述指令后暂时不读取所述key-value。而是在源存储节点在需要读取与所述key-value相邻的数据时,执行把所述key-value发送给所述目的存储节点的操作。这样的好处是可以连续读取相邻的两个数据,对从硬盘(尤其是机械、软盘、光盘等依靠旋转读取数据的介质)而言,能够提高读取效率。

另外一种可选方案是,在硬盘空闲时(例如没有前台业务需要读/写所述源存储节点时),按照顺序读取待迁移的数据,这种做法可以减少迁移操作对正常业务的影响。

步骤15,在把所述key-value写入目的存储节点后操作后,目的存储节点后通知管理存储节点所述key-value写入完成。

上述描述了一个特定的key-value(为了和该文件的其他key-value进行区分,可以把这个特定的key-value命名为第一key-value)的迁移方法,除了第一key-value之外的其他key-value(数据分片或者校验分片)可以使用相同的迁移方案,在所述文件的所有key-value(按照上述方法)写入对应的目的存储器后,完成整个文件的迁移。在完成整个文件的迁移后,管理存储节点修改所述元数据中存储位置信息,把存储位置信息更新为所述目的存储池的id。

可选的,在每个key-value按照上述方法写入对应目的存储器后此外,所述管理存储节点可以通知源存储节点删除本地的key-value。

使用上述数据迁移方法,对拥有kv接口的分布式存储节点、实现了存储节点与存储节点之间点对点数据迁移。消除现有技术中,迁移数据所涉及的数据再汇聚、打散、以及计算ec等操作对系统资源的占用消耗,大幅提升系统可靠性。

此外,迁移的具体内容取决于key-value在源存储池中的存储方式。因此,上述key-value的迁移可以是key和value二者共同从源存储池迁移到目的存储池;也可以仅指其中的value从源存储池迁移到目的存储池。

本发明还提供一种存储节点,包括:处理器,还可以包括内存。内存中有计算机程序,处理器执行内存中的程序可以执行是上面不在11-步骤16中可以由管理存储节点执行的操作。

此外,除了上面是迁移方法实施例,本发明还提供一种数据迁移装置的实施例,该迁移装置和前述方法对应,可以执行上述方法。参见图4,所述数据迁移装置包括查找模块21,目的存储节点确定模块22和迁移模块23。

查找模块21,用于从元数据中查找满足迁移条件的数据单元,获得所述数据单元的分片的键key、键-值key-value所在的源存储节点标识、以及目的存储池标识,其中,每个键对应一个值value;

目的存储节点确定模块22,用于从所述目的存储池标识代表的目的存储池中,选择用于存储所述key-value的目的存储节点;

迁移模块23,用于指令所述源存储节点使用所述key从所述源存储节点获得所述key-value,把获得的所述key-value发送给所述目的存储节点进行存储。如果所述数据迁移装置集成于所述源存储节点,则所述迁移模块还可以执行:使用所述key从所述源存储节点获得所述key-value,把获得的所述key-value发送给所述目的存储节点。以供目的存储节点进行存储。

其中,迁移条件包括条件中的至少一个:数据单元的创建时间、数据单元的大小、数据单元名称、数据单元所在存储池。

其中,所述源存储节点所在的存储池和所述目的存储池提供的存储性能不同。

其中,所述源存储节点用于:在需要读取和所述key-value相邻的数据时,执行把所述key-value发送给所述目的存储节点的操作。

其中,所述数据单元是下面其中一种:文件、对象、块或者文件的一部分。

通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘,硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

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