数据迁移方法、装置、设备及存储介质与流程

文档序号:25542480发布日期:2021-06-18 20:39阅读:136来源:国知局
数据迁移方法、装置、设备及存储介质与流程

本申请涉及存储技术领域,尤其涉及一种数据迁移方法、装置、设备及存储介质。



背景技术:

伴随着互联网技术的快速普及,随之而来的是互联网用户及用户数据的急速增长,而传统的单体数据存储系统已经无法满足海量数据的存储需求,因此分布式存储系统应运而生。

现有技术中,为了保证数据的可靠性,通常会将数据以多副本或纠删码的形式进行存储。以多副本为例,现有方案会将不同的副本存储至分布式存储系统中的不同位置,以实现故障隔离。当存储系统中存储资源发生变化时,例如:添加存储资源以及存储资源故障之后重新上线等,各存储资源间的数据负载的均衡状态将可能被打破,而为了使存储系统重新达到一个均衡状态,各个存储资源间便需要进行数据迁移操作。



技术实现要素:

本申请提供一种数据迁移方法、装置、设备及存储介质,用于通过数据迁移提升数据的可靠性。

于是,在本申请的一个实施例中,提供了一种数据迁移方法。该方法包括:

当存储系统扩容时,确定分块组的故障隔离等级;所述故障隔离等级与所述分块组的多个分块在存储系统中分布的离散程度有关;

根据所述故障隔离等级以及所述存储系统的扩容方式,确定所述分块组是否为待迁移分块组;

所述分块组为待迁移分块组时,根据所述分块组的多个分块在所述存储系统中的分布情况,从所述分块组中确定出源分块;

执行将所述源分块中的数据迁移至对应的目标分块的操作;

其中,所述目标分块是通过所述扩容方式扩容得到的。

在本申请的另一实施例中,提供了一种数据迁移装置。所述装置应用于存储系统,所述存储系统包括:至少一个存储节点;每一个存储节点包括若干块硬盘;每块硬盘被划分成若干个分块;所述装置包括:

第一确定模块,用于当存储系统扩容时,确定分块组的故障隔离等级;所述故障隔离等级与所述分块组的多个分块在所述存储系统中分布的离散程度有关;

第二确定模块,用于根据所述故障隔离等级以及所述存储系统的扩容方式,确定所述分块组是否为待迁移分块组;

第三确定模块,用于所述分块组为待迁移分块组时,根据所述分块组的多个分块在所述存储系统中的分布情况,从所述分块组中确定出源分块;

执行模块,用于执行将所述源分块中的数据迁移至对应的目标分块的操作;

其中,所述目标分块是通过所述扩容方式扩容得到的。

在本申请的又一实施例中,提供了一种电子设备。该电子设备,包括:存储器和处理器;所述存储器用于存储一条或多条计算机指令,所述一条或多条计算机指令被所述处理器执行时能够实现上述所述数据迁移方法中的步骤。

在本申请的又一实施例中,提供了一种存储有计算机程序的计算机可读存储介质。所述计算机程序被计算机执行时能够实现上述所述数据迁移方法中的步骤。

在本申请实施例提供的技术方案中,当存储系统扩容时,根据存储系统中分块组的当前故障隔离等级以及存储系统的扩容方式,可判断出扩容后的存储系统是否满足提升该分块组的数据可靠性的条件。若满足,则确定该分块组为待迁移分块组。后续根据该分块组的多个分块在存储系统中的分布情况,确定出源分块,并将源分块的数据迁移至通过扩容方式得到的目标分块中。采用本申请实施例提供的技术方案不仅能够降低因扩容导致的存储空间使用率不均衡程度,还能够提升分块组的数据可靠性。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本申请一实施例提供的存储系统的结构框图;

图2为本申请另一实施例提供的数据迁移方法的流程示意图;

图3为本申请实施例提供的存储系统相关模块的结构框图;

图4为本申请另一实施例提供的电子设备的结构框图。

具体实施方式

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

此外,在本申请的说明书、权利要求书及上述附图中描述的一些流程中,包含了按照特定顺序出现的多个操作,这些操作可以不按照其在本文中出现的顺序来执行或并行执行。操作的序号如101、102等,仅仅是用于区分各个不同的操作,序号本身不代表任何的执行顺序。另外,这些流程可以包括更多或更少的操作,并且这些操作可以按顺序执行或并行执行。需要说明的是,本文中的“第一”、“第二”等描述,是用于区分不同的消息、设备、模块等,不代表先后顺序,也不限定“第一”和“第二”是不同的类型。

在介绍本申请提供的数据迁移方法之前,先对本申请提供的所述方法所基于的系统架构进行说明。

图1为本申请实施例提供的一种存储系统的结构示意图。如图1所示,该存储系统包括:至少一个存储节点100;每一个存储节点100包括若干块硬盘110;每块硬盘110被划分成若干个分块。

其中,存储系统可以对存储节点100中的硬盘进行集中管理。

存储节点100,是一个连接到网络的电子设备,能够通过通信通道发送、接收或转发信息,且其上存在若干块硬盘。存储节点100可以是服务器、工作站等,但不限于此。

可采用块级虚拟化技术将每块硬盘110划分成若干个分块ck(chunk)进行管理。每个分块的存储空间大小相等。这样,后续即可组建分块组ckg(chunkgroup)。分块组中分块的数量需要根据具体存储任务来确定。例如:存储任务是将待存储数据以多副本形式进行存储,那么,对应的分块组中分块的数量就是副本数;再例如:存储任务是将待存储数据以纠删码形式进行存储,那么,对应的分块组中分块的数量就是划分该待存储数据得到的数据块数量和校验块数量之和。

在本申请实施例中,可根据存储任务所需要的分块数量以及故障隔离等级,组建出具有相应故障隔离等级的分块组。故障隔离等级可分为节点级故障隔离、硬盘级故障隔离和分块级故障隔离。节点级故障隔离指的是分块组的多个分块来自于存储系统中不同的存储节点;硬盘级故障隔离指的是分块组的多个分块并不完全来自于存储系统中不同的存储节点(也即分块组中存在两个及以上分块来自于同一存储节点),但来自于存储系统中不同的硬盘;分块级故障隔离指的是分块组的多个分块并不完全来自于存储系统中不同的硬盘,也即分块组中存在两个及以上分块来自于同一硬盘。可见,分块组的故障隔离等级与分块组的多个分块在存储系统中分布的离散程度有关。节点级故障隔离的分块组的多个分块在存储系统中分布的离散程度,明显大于硬盘级故障隔离的分块组的多个分块在存储系统中分布的离散程度;硬盘级故障隔离的分块组的多个分块在存储系统中分布的离散程度,明显大于分块级故障隔离的分块组的多个分块在存储系统中分布的离散程度。节点级故障隔离高于硬盘级故障隔离;硬盘级故障隔离高于分块级故障隔离。需要说明的是,分块组的多个分块在存储系统中的离散程度越大,该分块组的数据可靠性就越高。

在本申请实施例中,分块组的故障隔离等级表明的是该分块组对应的数据可靠性或该分块组对故障的承受能力。不同的故障隔离等级的分块组对故障的承受能力不同。节点级故障隔离优于(即高于)硬盘级故障隔离,硬盘级故障隔离优于(即高于)分块级故障隔离,也即:节点级故障隔离的分块组对故障的承受能力强于硬盘级故障隔离的分块组对故障的承受能力;硬盘级故障隔离的分块组对故障的承受能力强于分块级故障隔离的分块组对故障的承受能力。以两副本类型的分块组为例,采用节点级故障隔离则可以承受一个节点异常,采用硬盘级故障隔离则只可以承受一个硬盘异常,采用分块级故障隔离则仅能承受一个分块异常。该异常指的可以是物理存储资源损坏、也可以是因网络异常导致的存储资源不可访问。因此,提高分块组的故障隔离等级可以提升数据的安全性或可靠性,即在存储资源允许的情况下应尽量使分块来自于不同节点。在一实例中,可将节点级故障隔离的分块组的健康等级记为健康health,将硬盘级故障隔离的分块组的健康等级记为虚弱weak,将分块级故障隔离的分块组的健康等级记为危险danger。

需要说明的是,当上述存储节点的数量为1个时,上述存储系统即为单机存储系统;当上述存储节点的数量大于1个时,上述存储系统可称为分布式存储系统。

在一实例中,如图1所示,该存储系统还包括处理节点200。所述处理节点200,用于当存储系统扩容时,确定分块组的故障隔离等级;所述故障隔离等级与所述分块组的多个分块在所述存储系统中分布的离散程度有关;根据所述故障隔离等级以及所述存储系统的扩容方式,确定所述分块组是否为待迁移分块组;所述分块组为待迁移分块组时,根据所述分块组的多个分块在所述存储系统中的分布情况,从所述分块组中确定出源分块;执行将所述源分块中的数据迁移至对应的目标分块的操作;其中,所述目标分块是通过所述扩容方式扩容得到的。

本实施例中,存储系统中各节点,如处理节点、存储节点的具体工作流程及之间的信令交互将在以下各实施例中作进一步的说明。

图2示出了本申请一实施例提供的数据迁移方法的流程示意图。该方法的执行主体可以为图2所示的存储系统中的处理节点。该处理节点可以是上述存储系统中至少一个存储节点100中的一个,也可以是区别于上述至少一个存储节点的其他节点,本申请实施例对此不做具体限定。其中,处理节点可以是常用服务器、云端或虚拟服务器等,本申请实施例对此不作具体限定。存储节点也可以是常用服务器、云端或虚拟服务器等,本申请实施例对此不作具体限定。如图2所示,该方法包括:

101、当存储系统扩容时,确定分块组的故障隔离等级。

102、根据所述故障隔离等级以及所述存储系统的扩容方式,确定所述分块组是否为待迁移分块组。

103、所述分块组为待迁移分块组时,根据所述分块组的多个分块在所述存储系统中的分布情况,从所述分块组中确定出源分块。

104、执行将所述源分块中的数据迁移至对应的目标分块的操作。

上述101中,其中,所述故障隔离等级与所述分块组的多个分块在存储系统中分布的离散程度有关。

在一实例中,可根据事先针对该分块组标记的健康等级来确定该分块组的故障隔离等级。例如:若分块组的健康等级为health,则该分块组的故障隔离等级为节点级故障隔离;若分块组的健康等级为weak,则该分块组的故障隔离等级为硬盘级故障隔离;若分块组的健康等级记为danger,则该分块级的故障隔离等级为分块级隔离。

在另一实例中,可根据该分块组在存储系统中的分布情况,来确定该分块组的故障隔离等级。

上述102中,存储系统的扩容方式通常可包括两种方式:一种是添加存储节点的方式;另一种是添加硬盘的方式。其中,添加的存储节点或硬盘可以是新增存储节点或新增硬盘;还可以是存储系统中因故障下线后又重新上线的存储节点或硬盘。在本实施例中,因故障下线后又重新上线的存储节点或硬盘中存储的原有数据已被清除。

由于分块组的多个分块在存储系统中的离散程度越大,该分块组的数据可靠性就越高。那么,根据分块组的故障隔离等级以及存储系统的扩容方式,可确定扩容后存储系统能否满足提升分块组的数据可靠性的条件,也即确定扩容后存储系统能否满足增大分块组的多个分块在该存储系统中的离散程度的条件。若满足,则将该分块组确定为待迁移分块组。若不满足,在数据迁移时,可忽略该分块组。

上述103中,所述分块组为待迁移分块组时,根据所述分块组的多个分块在所述存储系统中的分布情况,从所述分块组中确定出源分块。具体地,根据所述分块组的多个分块在所述存储系统中的分布情况,确定所述分块组中离散程度最低的两个分块;从这两个分块中确定出一源分块。实际应用时,可根据分块组的多个分块在存储系统中的分布情况,确定分块组中任意两分块之间的离散程度。例如:两个分块分别位于两个存储节点上时,则将这两个分块的离散程度值设置为3;两个分块分别位于同一存储节点的两个硬盘上时,则将两个分块的离散程度值设置为2;两个分块位于同一硬盘上时,则将两个分块的离散程度值设置为1。离散程度值越小,代表离散程度越低。注:若分块组中离散程度最低的两个分块存在多对时,可随机选取其中一对即可。

上述104中,其中,所述目标分块是通过所述扩容方式扩容得到的。那么,将源分块中的数据迁移至对应的目标分块,也就是,将该分块组中的源分块替换成对应的目标分块,替换后,该分块组的多个分块在存储系统中分布的离散程度增加。离散程度增加,那么分块组的数据可靠性也会提升。

执行将所述源分块中的数据迁移至对应的目标分块的操作。具体地,可向所述源分块所在的存储节点发送数据迁移任务,该数据迁移任务中包括源分块的信息和目标分块的信息。这样,源分块所在的存储节点接收到数据迁移任务后,根据数据迁移任务中包括的源分块的信息和目标分块的信息,将源分块中的数据迁移至目标分块。

在本申请实施例提供的技术方案中,当存储系统扩容时,根据存储系统中分块组的当前故障隔离等级以及存储系统的扩容方式,可判断出扩容后的存储系统是否满足提升该分块组的数据可靠性的条件。若满足,则确定该分块组为待迁移分块组。后续根据该分块组的多个分块在存储系统中的分布情况,确定出源分块,并将源分块的数据迁移至通过扩容方式得到的目标分块中。采用本申请实施例提供的技术方案不仅能够降低因扩容导致的存储空间使用率不均衡程度,还能够提升分块组的数据可靠性。

可选的,上述102中“根据所述故障隔离等级以及所述存储系统的扩容方式,确定所述分块组是否为待迁移分块组”,具体可采用如下步骤来实现:

1021、当所述扩容方式为添加存储节点时,判断所述故障隔离等级是否低于节点级故障隔离。

其中,故障隔离等级为节点级故障隔离的分块组的多个分块来自于不同的存储节点。

1022、所述故障隔离等级低于节点级故障隔离时,确定所述分块组为待迁移分块组。

上述1021中,硬盘级故障隔离、分块级故障隔离均低于节点级故障隔离。注:分块级故障隔离低于硬盘级故障隔离;硬盘级故障隔离低于节点级故障隔离。

若上述分块组的故障隔离等级为硬盘级故障隔离或分块级故障隔离,则该分块组的故障隔离等级低于节点级故障隔离。

进一步的,上述方法,还可包括:

105、从添加的存储节点中的任一硬盘中确定出所述目标分块。

添加的存储节点中包括若干块硬盘;可从这若干块硬盘中随机选取一个硬盘或者通过某种选取策略从这若干块硬盘中选取一个硬盘作为目标硬盘;从目标硬盘中确定出目标分块。上述选取策略可根据实际需要来设定,本申请实施例对此不作具体限定。

可选的,上述102中“根据所述故障隔离等级以及所述存储系统的扩容方式,确定所述分块组是否为待迁移分块组”,还包括:

1023、当所述扩容方式为添加硬盘时,判断所述故障隔离等级是否低于硬盘级故障隔离。

其中,故障隔离等级为硬盘级故障隔离的分块组的多个分块来自于不同的硬盘;硬盘级故障隔离低于节点级故障隔离。

1024、所述故障隔离等级低于硬盘级故障隔离时,确定所述分块组为待迁移分块组。

上述1023中,若上述分块组的故障隔离等级为分块级故障隔离,则该分块组的故障隔离等级低于硬盘级故障隔离。

进一步的,上述方法,还可包括:

106、从添加的硬盘中确定出所述目标分块。

该硬盘是添加到存储系统已有存储节点中。

可选的,上述103中“根据所述分块组的多个分块在所述存储系统中的分布情况,从所述分块组中确定出源分块”,可采用如下步骤来实现:

1031、所述故障隔离等级为硬盘级故障隔离时,根据所述分块组的多个分块在所述存储系统中的分布情况,从为所述分块组提供分块的至少一个存储节点中确定出满足第一预设条件的存储节点。

1032、从所述满足第一预设条件的存储节点中,确定出源存储节点。

1033、从所述源存储节点为所述分块组提供的分块中确定出需进行数据迁移的源分块。

上述1031中,故障隔离等级为硬盘级故障隔离,可见,存储系统的扩容方式是添加存储节点。

其中,满足第一预设条件的存储节点指的是为所述分块组提供的分块数量大于第一预设阈值的存储节点;其中,所述第一预设阈值大于或等于1。

在一实例中上述第一预设阈值可以为1。那么,为分块组提供的两个及以上分块的存储节点也即是满足第一预设条件的存储节点。

上述1032中,满足第一预设条件的存储节点为一个时,直接将其作为源存储节点即可;满足第一预设条件的存储节点数量为多个时,可随机选取其中一个存储节点作为源存储节点;或者,可选取存储空间使用率最高的存储节点作为所述源存储节点。

从所述满足第一预设条件的存储节点中,选取存储空间使用率最高的存储节点作为所述源存储节点,可进一步降低存储空间使用率不均衡程度。

上述1033中,可从所述源存储节点为所述分块组提供的分块中随机选取一个分块作为需进行数据迁移的源分块。

可选的,上述103中“根据所述分块组的多个分块在所述存储系统中的分布情况,从所述分块组中确定出源分块”,还可包括如下步骤:

1031、所述故障隔离等级为分块级故障隔离时,根据所述分块组的多个分块在所述存储系统中的分布情况,从为所述分块组提供分块的至少一个硬盘中确定出满足第二预设条件的硬盘。

1032、从所述满足第二预设条件的硬盘中,确定出源硬盘。

1033、从所述源硬盘为所述分块组提供的分块中确定出需进行数据迁移的源分块。

上述1031中,故障隔离等级为分块级故障隔离,可见,存储系统的扩容方式可以是添加存储节点,也可以是添加硬盘。

其中,满足第二预设条件的硬盘指的是为所述分块组提供的分块数量大于第二预设阈值的硬盘;其中,所述第二预设阈值大于或等于1。

在一具体实例中,第二预设阈值可以为1。那么,为分块组提供的两个及以上分块的硬盘也即是满足第二预设条件的硬盘。

上述1032中,满足第二预设条件的硬盘为一个时,直接将其作为源硬盘即可;满足第二预设条件的硬盘数量为多个时,可随机选取其中一个硬盘作为源硬盘;或者,可选取存储空间使用率最高的硬盘作为所述源硬盘。

从所述满足第二预设条件的硬盘中,选取存储空间使用率最高的硬盘作为所述源硬盘,可进一步降低存储空间使用率不均衡程度。

上述1033中,可随机从所述源硬盘为所述分块组提供的分块中选取一个分块作为需进行数据迁移的源分块。

为了减少无效数据的迁移,上述104中“执行将所述源分块中的数据迁移至对应的目标分块的操作”,具体可以为:将所述源分块的信息和所述目标分块的信息发送至所述源分块所在的存储节点,以由所述源分块所在的存储节点将所述源分块进行划分,得到多个子分块;并将所述多个子分块中存在有效数据的子分块的数据迁移至对应的目标分块。

上述源分块的信息可包括源分块所在存储节点的唯一身份标识符、源分块所在硬盘的唯一身份标识符以及所述源分块在其所在硬盘上的地址偏移量。

上述目标分块的信息可包括目标分块所在存储节点的唯一身份标识符、目标分块所在硬盘的唯一身份标识符以及所述目标分块在其所在硬盘上的地址偏移量。

处理节点可在向所述源分块所在的存储节点发送的数据迁移任务中携带所述源分块的信息和所述目标分块的信息。所述源分块所在的存储节点接收到数据迁移任务后,将所述源分块进行划分,得到多个子分块;判断每个子分块中是否存在有效数据;并将所述多个子分块中存在有效数据的子分块的数据迁移至对应的目标分块;忽略所述不存在有效数据的子分块。这样,可有效减少无效数据的迁移。

此外,本申请实施例提供的技术方案支持并发迁移多个数据迁移任务。由于每个数据迁移任务涉及的源分块和目标分块隶属于存储系统内的不同存储节点和不同硬盘,因此并发执行多个数据迁移任务可以同时利用存储系统内多块硬盘的带宽。此外,在选取并发执行的数据迁移任务时,优先考虑源分块和目标分块分散在尽量多的硬盘中的数据迁移任务,从而取得最佳的数据迁移性能。

具体地,上述104中“执行将所述源分块中的数据迁移至对应的目标分块的操作”,具体可以为:并行执行将所述源分块和其他源分块中的数据迁移至各自对应的目标分块的操作。

其中,其他源分块及其对应的目标分块的确定方式可采用现有技术来实现,也可采用上述各实施例提供的方案来确定,本申请实施例对此不做具体限定。

在存储系统中所有分块组按照上述各实施例中所提供的方法都达到所能达到的最佳故障隔离等级之后,可继续判断存储节点间是否存在存储空间使用率不均衡的情况。可通过设置存储节点间的有关重均衡的阈值来控制重均衡的启停。具体的,上述方法,还可包括如下步骤:

107、当所述存储系统中存储节点间的存储空间使用率的不均衡程度大于或等于第一阈值时,触发存储节点间的重均衡。

在一具体实例中,上述存储节点间的存储空间使用率的不均衡程度可由存储系统中存储空间使用率最高的存储节点的存储空间使用率与存储空间使用率最低的存储节点的存储空间使用率的差值来表示。差值越大,不均衡程度就越大。

当存储节点间的存储空间使用率的不均衡程度大于或等于第一阈值时,触发存储节点间的重均衡。存储节点间的重均衡可包括:

s11、从所述存储系统中存储空间使用率大于平均使用率的存储节点中确定出至少一个待迁出数据的存储节点。

上述平均使用率等于所述存储系统中所有存储节点的存储空间使用率的总和与所述存储系统中所有存储节点的总数的比值。

在一具体实例中,可对存储空间使用率大于第一平均使用率的存储节点进行存储空间使用率由高到低的排序,选取排序靠前的n个存储节点作为上述至少一个待迁出数据的存储节点。其中,n为大于或等于1的整数。其中,n的大小可根据实际需要来设定,本申请实施例对此不做具体限定。

s12、从所述存储系统中存储空间使用率小于所述第一平均使用率的存储节点中确定出至少一个待迁入数据的存储节点。

在一具体实例中,可对存储空间使用率小于所述平均使用率的存储节点进行存储空间使用率由高到低的排序,选取排序靠后的m个存储节点作为上述至少一个待迁入数据的存储节点。其中,m的大小可根据实际需要来设定,本申请实施例对此不做具体限定。

s13、从所述存储系统中确定出一分块组。

可采用遍历的方式从存储系统中确定出一分块组。

s14、判断所述分块组中是否存在来自于所述至少一个待迁出数据的存储节点中一存储节点的分块。

若存在,则执行下述步骤s15;若不存在,则忽略该分块组,返回执行上述步骤s13。

s15、将所述分块组中来自于所述至少一个待迁出数据的存储节点中一存储节点的一分块确定为源分块。

s16、从上述至少一个待迁入数据的存储节点中确定出是否存在满足所述分块组当前分布离散程度的存储节点。

若存在,则执行下述步骤s17;若不存在,则忽略该分块组,返回执行上述步骤s13。

当前分布离散程度也即表示了当前故障隔离需求。

s17、从上述至少一个待迁入数据的存储节点中满足所述分块组当前分布离散程度的存储节点中选取一分块作为对应的目标分块。

s18、执行将上述源分块中的数据迁移至所述目标分块的操作。

具体的,上述方法,还可包括如下步骤:

108、当所述存储系统中存储节点间的存储空间使用率的不均衡程度小于或等于第二阈值时,停止存储节点间的重均衡。

其中,所述第一阈值大于所述第二阈值。

在执行上述步骤107之后,可每个预设时间间隔判断所述存储系统中存储节点间的存储空间使用率的不均衡程度是否小于或等于第二阈值。

一旦所述存储系统中存储节点间的存储空间使用率的不均衡程度小于或等于第二阈值,也即存储节点间重新达到了均衡状态,故停止存储节点间的重均衡。

存储节点间重新达到了均衡状态之后,仍需判断存储节点内各硬盘的空间使用率是否存在不均衡情况。因此,在所述停止存储节点间的重均衡之后,上述方法,还可包括如下步骤:

109、当所述存储系统中存在内部硬盘间存储空间使用率的不均衡程度大于或等于第三阈值的存储节点时,从内部硬盘间存储空间使用率的不均衡程度大于或等于第三阈值的存储节点中确定出待处理节点。

在一具体实例中,存储节点内部硬盘间存储空间使用率的不均衡程度可由该存储节点中存储空间使用率最高的硬盘的存储空间使用率与存储空间使用率最低的硬盘的存储空间使用率的差值来表示。差值越大,不均衡程度就越大。

可采用遍历的方式从内部硬盘间存储空间使用率的不均衡程度大于或等于第三阈值的存储节点中确定出待处理存储节点。

110、触发所述待处理节点内的重均衡。

触发待处理节点内的重均衡也即是触发待处理节点内硬盘间的重均衡。硬盘间的重均衡可包括:

s21、从待处理存储节点中存储空间使用率大于第二平均使用率的硬盘中确定出至少一个待迁出数据的硬盘。

上述第二平均使用率等于所述待处理存储节点中所有硬盘的存储空间使用率的总和与所述待处理存储节点中所有硬盘的总数的比值。

在一具体实例中,可对存储空间使用率大于平均使用率的硬盘进行存储空间使用率由高到低的排序,选取排序靠前的n个硬盘作为上述至少一个待迁出数据的硬盘。其中,n为大于或等于1的整数。其中,n的大小可根据实际需要来设定,本申请实施例对此不做具体限定。

s22、从所述待处理节点中存储空间使用率小于所述第二平均使用率的硬盘中确定出至少一个待迁入数据的硬盘。

在一具体实例中,可对存储空间使用率小于所述第二平均使用率的硬盘进行存储空间使用率由高到低的排序,选取排序靠后的m个硬盘作为上述至少一个待迁入数据的硬盘。其中,m的大小可根据实际需要来设定,本申请实施例对此不做具体限定。

s23、从所述存储系统中确定出一分块组。

可采用遍历的方式从存储系统中确定出一分块组。

s24、判断所述分块组中是否存在来自于所述至少一个待迁出数据的硬盘中一硬盘的分块。

若存在,则执行下述步骤s25;若不存在,则忽略该分块组,返回执行上述步骤s23。

s25、将所述分块组中来自于所述至少一个待迁出数据的硬盘中一硬盘的一分块确定为源分块。

s26、从上述至少一个待迁入数据的硬盘中确定出是否存在满足所述分块组当前分布离散程度的硬盘。

若存在,则执行下述步骤s27;若不存在,则忽略该分块组,返回执行上述步骤s23。

当前分布离散程度也即表示了当前故障隔离需求。

s27、从上述至少一个待迁入数据的硬盘中满足所述分块组当前分布离散程度的硬盘中选取一分块作为对应的目标分块。

s28、执行将上述源分块中的数据迁移至所述目标分块的操作。

具体的,上述方法,还可包括如下步骤:

111、在触发所述待处理节点内的重均衡之后,当所述待处理节点内部的硬盘间存储空间使用率的不均衡程度小于或等于第四阈值时,停止存储节点内的重均衡。

其中,所述第三阈值大于所述第四阈值。

在执行上述步骤110之后,可每个预设时间间隔判断所述待处理节点内部的硬盘间存储空间使用率的不均衡程度是否小于或等于第四阈值。

一旦所述待处理节点内部的硬盘间存储空间使用率的不均衡程度小于或等于第四阈值,也即待处理节点内硬盘间重新达到了均衡状态,故停止待处理节点内的重均衡。

上述第一阈值、第二阈值、第三阈值以及第四阈值的大小可根据实际需要来设定,本申请实施例对此不做具体限定。

下面将结合图3对本申请实施例提供的存储系统的处理逻辑进行介绍:

如图3所示,该存储系统中处理节点200上运行有存储空间管理模块31、重均衡模块36中的任务生成单元361和任务处理单元362以及任务探测模块35。该存储系统中各存储节点100上运行有协同模块33、数据存取模块34以及重均衡模块36中任务执行单元363和数据迁移单元364。

在一实例中,处理节点200还可运行有条带空间管理模块32,或者各存储节点上还可运行有条带空间管理模块32。

其中,存储空间管理模块31采用块级虚拟化技术将阵列内其负责管理的所有硬盘划分为固定大小的分块进行管理,并提供分配分块、回收分块、组建分块组等服务。其中组建分块组是指选取多个分块按照多副本或者纠删码以指定的故障隔离等级组成分块组。存储空间管理模块31根据需求组建出相应故障隔离等级的分块组,所述的故障隔离等级可分为节点级故障隔离、硬盘级故障隔离、分块级故障隔离等,其中节点级故障隔离是指参与组建分块组的分块来自于不同的节点,硬盘级故障隔离是指参与组建分块组的分块并不完全来自于不同节点但来自于不同的硬盘,分块级故障隔离是指参与组建分块组的分块为不同分块即可,不同的故障隔离等级的分块组对于故障的承受能力不同。以两副本类型的分块组为例,采用节点级故障隔离则可以承受一个节点异常,采用硬盘级故障隔离则只可以承受一个硬盘异常,采用分块级故障隔离则仅能承受一个分块异常。所述异常可以是物理资源损坏,也可以是因网络异常导致的资源不可访问。因此,提高分块组的故障隔离等级可以提升数据的安全性,即在资源允许的情况下应尽量使分块来自于不同节点。

条带空间管理模块32向存储空间管理模块31申请分块组,并将其再次划分为固定大小的条带(segment)进行管理,而segment也是数据迁移的最小单位。上述实施例中的子分块也即是条带。此外,条带空间管理模块32还提供分配segment、回收segment、判别segment是否包含有效数据等服务。

协同模块33用于满足不同存储节点的协同、交互需求,实现重均衡任务在节点间分发及应答,可以由分布式系统的可靠协调系统zookeeper、分布式一致性键值存储系统etcd等来实现。

数据存取模块34可以根据指定的多副本、纠删码类型从存储设备上读取数据或向存储设备写入数据。此外,还可以实现从指定的源存储设备上读取数据并写入目标存储设备上。存储设备指的是硬盘。

任务探测模块35根据存储资源的变化情况可划分出三种触发重均衡的场景:

其一,打破原有的各节点各硬盘的资源使用率(也即上文中的存储空间使用率)的均衡状态。例如运行过程中,有节点失效,硬盘失效。失效期间该节点或硬盘不会参与分块分配,并且会将原在该节点、硬盘的数据,重构到其他位置,而当节点、硬盘恢复后,便可能会造成不均衡。此外,新增节点、硬盘也可会造成不均衡的场景出现。从存储池层面看,即各节点的资源使用率不均衡情况超过了设定阈值(也即上述第一阈值),因而在条件允许的情况下须将资源使用率高的节点中的数据迁往至资源使用率低的节点。从节点层面看,便是节点内各硬盘的资源使用率不均衡情况超过了设定阈值(也即上述第三阈值),因而在条件允许的情况下须将资源使用率高的硬盘中的数据迁往至资源使用率低的硬盘。

其二,能够提高分块组的健康等级。即便同是三副本,可靠性却存在差异,其中以三副本分别分布在三个不同节点上为最佳(health),以虽未全分布在不同节点上,但分布在不同硬盘上次之(weak),而以未能分布在不同磁盘上为最差情况(danger)。

在一实例中,分块组可应用于存储元数据。

其三,在系统允许的情况下,原有的存储资源准备删除。此时,存储在其上的数据就不得不进行迁移。

重均衡模块36,用于实现自动提升副本在存储系统中分布的离散程度,增强数据安全性,减少无效数据的迁移,提升带宽的有效利用率,提升迁移速度,并使得系统处于负载均衡状态。如图3所示,重均衡模块36细分为任务生成单元361、任务处理单元362、任务执行单元363、数据迁移单元364。

其中,任务生成单元361,用于:

删除节点,遍历集群(也即上述存储系统)内所有分块组并判断分块组中是否包含属于待删除节点的分块组,若是则将其作为源分块,之后再从未参与对应分块组组建的剩余节点中选取目标节点,进而选出目标分块,从而构成一个数据迁移任务。

删除硬盘,遍历集群内所有分块组并判断分块组中是否包含属于待删除硬盘的分块,若是则将其作为源分块,之后再从待删除硬盘对应的节点及未参与对应ckg组建的剩余节点中选取目标节点,进而选出目标分块,从而构成一个数据迁移任务。

当集群通过新增节点的方式扩容时,一方面需要解决可能存在的节点间的资源使用率不均衡的问题,另一方面还需要考虑是否存在需要提升分布离散程度的分块组。考虑到提升分块组的分布离散程度的过程中也相应降低了节点间的资源使用率不均衡的情况,因此优先处理提升分块组分布离散程度的任务,之后再继续进行节点间使用率的调整。

可按照上述实施例中所提供的方法查找出源分块和目标分块,从而构成一个数据迁移任务。

当集群通过新增硬盘的方式扩容时,一方面需要解决可能存在的节点间的资源使用率不均衡的问题及节点内各硬盘间的资源使用率不均衡的问题,另一方面也需要考虑是否存在需要提升分布离散程度的分块组。与添加节点扩容的处理类似,考虑到提升分块组的分布离散程度的过程中也相应降低了节点间以及节点内各硬盘间的资源使用率不均衡的情况,因此也优先处理提升分块组分布离散程度的任务,之后再继续进行节点间、节点内使用率的调整。

也可按照上述实施例中所提供的方法查找出源分块和目标分块,从而构成一个数据迁移任务。

当集群中所有分块组都达到所能达到的最佳分布离散程度之后,继续判断节点间是否存在使用率不均衡的情况。若存在,则遍历集群中所有分块组并判断分块组中是否存在属于使用率较高节点的分块作为源分块,之后再判断使用率较低的节点中是否存在满足故障隔离要求的节点,若存在则从中选取分块作为目标分块,从而构成一个数据迁移任务。具体过程可参见上述各实施例中相应内容,在此不再赘述。

在节点间的使用率差值小于或等于第二阈值之后,仍需继续判断节点内各硬盘间的使用率是否超过第三阈值,若是则遍历集群中所有分块组并判断分块组中是否存在属于使用率较高硬盘的分块作为源分块,之后再判断源分块对应的节点内是否存在使用率较低且满足故障隔离要求的硬盘,若存在则从中选取分块作为目标分块,从而构成一个数据迁移任务。

任务生成单元361一次处理一种类型的重均衡任务,即根据任务类型生成一个个数据迁移任务,而为了提高重均衡工作的效率,可采用批量处理的方式,即一个重均衡任务中可包含多个数据迁移任务,最后交由任务处理单元362进行处理。重均衡任务的类型包括提升分块组的多个分块分布的离散程度的任务类型、节点间的重均衡任务类型以及节点内的重均衡任务类型。可优先处理提升分块组的多个分块分布的离散程度的任务类型的任务、再处理节点间的重均衡任务类型的任务,最后处理节点内的重均衡任务类型的任务。一次处理一种类型是可简化处理流程。

任务处理单元362,与任务生成单元361一样是只能运行在主节点上,而考虑到任务执行单元可以运行在集群内的各个存储节点上,因此需通过协同模块33进行交互。

任务处理单元362通过协同模块33将重均衡任务分发至任务执行单元363,然后等待任务执行单元363返回执行结果,并根据执行结果进行相关的收敛工作。所述执行结果中包含每个数据迁移任务的执行结果,即任务执行成功或失败,收敛工作主要根据数据迁移任务的执行结果进行相应处理:若数据迁移任务执行成功则向存储空间管理模块31释放源分块,若数据迁移任务执行失败则向存储空间管理模块31释放目标分块。在完成收敛工作之后再将此次重均衡任务标记为处理完成。

任务执行单元363,通过协同模块33获取到任务处理单元362分发的子任务包之后,再将子任务包中的数据迁移任务拆解出来交由多个数据迁移单元364,并根据数据迁移单元364执行的结果对相应数据迁移任务进行标记,即是否执行成功。在完成所有数据迁移任务之后,再将执行结果打包并通过协同模块33同步给处理节点的任务处理单元362。

数据迁移单元364将数据迁移任务进一步拆解,取出源分块和目标分块,并通过数据存取模块34将数据从源分块中迁移至目标分块中。所述迁移过程是将分块切分成segment,一次数据迁移量可为一个segment或多个segment同时进行,且在真正提交给数据存取模块34进行数据迁移前还会由条带空间管理模块32判断segment中是否存在有效数据,只有存在有效数据才会提交,否则直接略过,从而避免无效的迁移操作以节约带宽,同时提升迁移效率。

上述存储系统的工作流程如下:

s1、任务探测模块35感知到集群出现所述需进行数据迁移的场景,则设置需处理的重均衡任务类型并触发重均衡模块36开始工作。

s2、重均衡模块36获取所需执行的优先级最高的任务类型,之后任务生成单元361依据任务类型组建任务包,任务包是由一系列数据迁移任务组成,数据迁移任务包含源分块、目标分块以及两者的相关描述信息,最后将生成的任务包交由任务处理单元362进行处理。

s3、任务处理单元362首先清理协同模块33中残留的历史数据,再将任务包交予协同模块33,然后睡眠等待回应,再由协同模块33将任务包转交给任务执行单元363。

s4、任务执行单元363在接收到任务包之后,对任务包进行拆解,并将数据迁移任务分发给多个数据迁移单元364,即可以同时处理多个数据迁移任务。

s5、数据迁移单元364取出数据迁移任务中的源分块、目标分块以及两者的相关描述信息,并锁定源分块,防止迁移过程中写入数据造成数据不一致问题。接着,将源分块切分成以segment为单位进行迁移,一次数据迁移量可为一个segment或多个segment同时进行,且在真正提交给数据存取模块34进行数据迁移前还会由条带空间管理模块32判断segment中是否存在有效数据,只有存在有效数据才会提交给数据存取模块34完成物理上的数据迁移。在完成所述源分块中的数据迁移之后,解除对其的锁定。

s6、任务执行单元363汇总所有数据迁移单元的执行结果,并将最终的任务完成情况交予协同模块33,再由协同模块33转交给等待中的任务处理单元362.

s7、任务处理单元362收到任务执行单元363的应答之后,根据各个数据迁移任务的执行结果进行收敛工作,执行成功则将源分块归还给存储空间管理模块31,执行失败则将目标分块归还向给存储空间管理模块31,再继续下一轮重均衡任务。

综上所述,本申请实施例提供的技术方案具有如下有益效果:

1、增强数据安全性

本申请实施例提供的技术方案能够支持自动提升副本的隔离等级。如当通过新增节点的方式对集群进行扩容时,会自动检测是否存在包含属于同一节点的多个ck的ckg,若存在则从属于同一节点的ck中选取源ck,并将其包含的数据迁移至新增的节点中,实现ckg分散到尽量多的不同节点中。当通过新增硬盘的方式对集群进行扩容时,自动检测是否存在包含属于同一硬盘的多个ck的ckg,若存在则从属于同一硬盘的ck中选取源ck,并将其包含的数据迁移至新增的硬盘中,实现ckg分散到尽量多的不同节点中,即便不能分散到不同节点中也要尽量分散到不同硬盘中。通过自动提升副本的隔离等级从而增强了数据的安全性。

2、减少无效数据迁移

本申请实施例提供的技术方案支持调整数据迁移的基本单位,最小可低至一次仅迁移一个segment。通过条带空间管理模块对待迁移数据进行有效性判别,从而可以在segment粒度上保证迁移的数据均为有效数据,业务可以根据需求调整一次的数据迁移量,基本单位是segment,以满足不同业务的调度、性能需求,且可以减少无效数据迁移。

3、提升迁移性能

本申请实施例提供的技术方案支持并发迁移多个数据迁移任务。由于各数据迁移任务涉及的源分块和目标分块隶属于集群内的不同节点和不同硬盘,因此并发执行多个数据迁移任务可以同时利用集群内多块的硬盘的带宽。此外,在选取并发执行的数据迁移任务时,优先考虑数据迁移任务中的分块应分散至尽量多的硬盘中,从而取得最佳的数据迁移性能和数据迁移速度。

4、平衡空间利用率

本申请实施例提供的技术方案支持均衡集群内各节点间、各硬盘间的空间使用率。通过设置相关聚酯来控制节点间、节点内数据重均衡的启停。

5、管理方便

本申请实施例提供的技术方案可简化重均衡管理。通过设定相应阈值可控制对应重均衡过程的启停。在具体实施时,还可配置重均衡的时间段,即重均衡任务只在设定的时间段自动根据设定的阈值决定是否生成和执行,完成之后则自动停止,全程无需人工干预。

本申请实施例提供的技术方案可用于单机存储系统、分布式存储系统以及由单机存储系统切换至分布式存储系统中需要进行高效数据迁移并保证故障隔离需求的场景。

本申请一实施例提供了一种数据迁移装置。所述装置应用于存储系统,所述存储系统包括:至少一个存储节点;每一个存储节点包括若干块硬盘;每块硬盘被划分成若干个分块;该装置,包括:

第一确定模块,用于当存储系统扩容时,确定分块组的故障隔离等级;所述故障隔离等级与所述分块组的多个分块在所述存储系统中分布的离散程度有关;

第二确定模块,用于根据所述故障隔离等级以及所述存储系统的扩容方式,确定所述分块组是否为待迁移分块组;

第三确定模块,用于所述分块组为待迁移分块组时,根据所述分块组的多个分块在所述存储系统中的分布情况,从所述分块组中确定出源分块;

执行模块,用于执行将所述源分块中的数据迁移至对应的目标分块的操作;

其中,所述目标分块是通过所述扩容方式扩容得到的。

可选的,第二确定模块,具体用于:

当所述扩容方式为添加存储节点时,判断所述故障隔离等级是否低于节点级故障隔离;其中,故障隔离等级为节点级故障隔离的分块组的多个分块来自于不同的存储节点;

所述故障隔离等级低于节点级故障隔离时,确定所述分块组为待迁移分块组;

相应地,所述第三确定模块,还用于:

从添加的存储节点中的任一硬盘中确定出所述目标分块。

可选的,第二确定模块,具体用于:

当所述扩容方式为添加硬盘时,判断所述故障隔离等级是否低于硬盘级故障隔离;其中,故障隔离等级为硬盘级故障隔离的分块组的多个分块来自于不同的硬盘;硬盘级故障隔离低于节点级故障隔离;

所述故障隔离等级低于硬盘级故障隔离时,确定所述分块组为待迁移分块组;

相应地,所述第三确定模块,还用于:

从添加的硬盘中,确定出所述目标分块。

可选的,所述执行模块,还用于:

当所述存储系统中存储节点间的存储空间使用率的不均衡程度大于或等于第一阈值时,触发存储节点间的重均衡;

在所述触发存储节点间的重均衡之后,当所述存储系统中存储节点间的存储空间使用率的不均衡程度小于或等于第二阈值时,停止存储节点间的重均衡;

其中,所述第一阈值大于所述第二阈值。

可选的,在所述停止存储节点间的重均衡之后,所述执行模块,还用于:

当所述存储系统中存在内部硬盘间存储空间使用率的不均衡程度大于或等于第三阈值的存储节点时,从内部硬盘间存储空间使用率的不均衡程度大于或等于第三阈值的存储节点中确定出待处理节点;

触发所述待处理节点内的重均衡;

在触发所述待处理节点内的重均衡之后,当所述待处理节点内部的硬盘间存储空间使用率的不均衡程度小于或等于第四阈值时,停止所述待处理节点内的重均衡;

其中,所述第三阈值大于所述第四阈值。

这里需要说明的是:上述实施例提供的数据迁移装置可实现上述各方法实施例中描述的技术方案,上述各模块具体实现的原理可参见上述各方法实施例中的相应内容,此处不再赘述。

图4示出了本申请一实施例提供的电子设备的结构示意图。如图4所示,所述电子设备包括存储器1101以及处理器1102。存储器1101可被配置为存储其它各种数据以支持在电子设备上的操作。这些数据的示例包括用于在电子设备上操作的任何应用程序或方法的指令。存储器1101可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(sram),电可擦除可编程只读存储器(eeprom),可擦除可编程只读存储器(eprom),可编程只读存储器(prom),只读存储器(rom),磁存储器,快闪存储器,磁盘或光盘。

所述存储器1101,用于存储一条或多条计算机指令;

所述处理器1102,与所述存储器1101耦合,用于执行所述存储器1101中存储的所述一条或多条计算机指令,以实现上述各方法实施例提供的数据迁移方法。

进一步,如图4所示,电子设备还包括:通信组件1103、显示器1104、电源组件1105、音频组件1106等其它组件。图4中仅示意性给出部分组件,并不意味着电子设备只包括图4所示组件。

相应地,本申请实施例还提供一种存储有计算机程序的计算机可读存储介质,所述计算机程序被计算机执行时能够实现上述各方法实施例提供的数据迁移方法的步骤或功能。

以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

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

最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。

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