掌桥专利:专业的专利平台
掌桥专利
首页

磁盘迁移方法、系统、设备及介质

文献发布时间:2023-06-19 16:04:54



技术领域

本发明涉及计算机技术领域,尤其涉及一种磁盘迁移方法、系统、设备及介质。

背景技术

在分布式纠删存储系统中,数据分布在集群不同的数据节点上,数据节点通常由数十块磁盘存储数据,当集群容量写满时,为了能够让存储集群继续存储新的数据,通常会采用扩节点的方式提高集群的可用容量,在纠删为N+M的冗余策略下扩节点时如果按N+M的节点数扩展,对于用户而言一次扩容的成本是巨大的,亟需一种成本低的磁盘迁移方案。

发明内容

鉴于以上所述现有技术的缺点,本发明提供一种磁盘迁移方法、系统、设备及介质,以解决上述技术问题。

本发明提供的一种磁盘迁移方法,所述方法包括:

获取集群中磁盘容量、新增节点信息和原有节点信息,并确定各所述原有节点的迁出磁盘数,新增节点信息包括新增节点数量和各新增节点的新增节点可用容量,原有节点信息包括原有节点数量和各原有节点的原有节点可用容量;

根据各原有节点的迁出磁盘数从各原有节点的原有磁盘中确定多个待迁出磁盘组,得到各原有节点对应的多个待迁出磁盘组;

分别将各原有节点对应的待迁出磁盘组进行组合,得到多个磁盘迁出方案;

分别将各磁盘迁出方案中的迁出磁盘迁入新增节点,得到多个磁盘迁移方案;

确定各磁盘迁移方案的待迁移分块数据数量,并将待迁移分块数据数量最少的磁盘迁移方案作为优选迁移方案,以供进行磁盘迁移。

可选的,原有节点的迁出磁盘数的确定方式包括:

根据新增节点可用容量和原有节点可用容量确定当前集群总可用容量;

根据新增节点数量和原有节点数量确定当前集群节点总数;

根据当前集群总可用容量和当前集群节点总数确定当前集群各节点平均可用总量;

获取各原有节点中原有磁盘的可用容量,根据当前集群各节点平均可用总量和原有磁盘的可用容量确定原有节点的迁出磁盘数。

可选的,磁盘迁移方案的待迁移分块数据数量的确定方式包括:

获取节点最大可写入同组分块数据数量和磁盘迁移方案中各集群节点的节点同组分块数据数量,集群节点包括新增节点和原有节点;

根据节点最大可写入同组分块数据数量和磁盘迁移方案中各集群节点的节点同组分块数据数量确定磁盘迁移方案的待迁移分块数据数量。

可选的,磁盘迁移方案包括新增节点的迁入磁盘槽位信息、原有节点的迁出磁盘槽位信息、原有节点的迁入磁盘槽位信息,所述方法还包括:

根据优选迁移方案的新增节点的迁入磁盘槽位信息、原有节点的迁出磁盘槽位信息、原有节点的迁入磁盘槽位信息生成磁盘插拔提示消息。

可选的,根据优选迁移方案对至少一部分原有磁盘和至少一部分新增磁盘进行插拔后,所述方法还包括:

获取集群节点中各当前磁盘的磁盘配置信息,所述集群节点包括原有节点和新增节点,所述当前磁盘包括原有磁盘和新增磁盘;

若磁盘配置信息包括磁盘识别信息和节点识别信息,且节点识别信息与当前节点的节点预设信息相同,控制当前磁盘上线;

若磁盘配置信息包括磁盘识别信息和节点识别信息,且节点识别信息与当前节点的节点预设信息不同,对当前磁盘配置新的磁盘识别信息和新的节点识别信息,并将新的磁盘识别信息和新的节点识别信息确定为磁盘配置信息,控制当前磁盘上线;

若磁盘配置信息不包括磁盘识别信息和/或节点识别信息,对当前磁盘配置磁盘识别信息和/或节点识别信息,并将磁盘识别信息和节点识别信息确定为磁盘配置信息,控制当前磁盘上线。

可选的,控制当前磁盘上线之前,所述方法还包括:

获取并记录当前磁盘的磁盘配置信息;

若磁盘配置信息包括磁盘识别信息、节点识别信息、新的磁盘识别信息和新的节点识别信息,将磁盘配置信息更新为新的磁盘识别信息和新的节点识别信息,通知当前磁盘上线。

可选的,所述方法还包括:

获取优选迁移方案的待迁移分块数据数量;

若优选迁移方案的待迁移分块数据数量大于零,根据节点最大可写入同组分块数据数量和优选迁移方案中各集群节点的节点同组分块数据数量确定各集群节点的节点待迁移分块数据;

根据负载均衡原则从各集群节点中选择至少一个目标节点,将各集群节点的节点待迁移分块数据迁移到目标节点。

可选的,根据负载均衡原则从各集群节点中选择至少一个目标节点之前,所述方法还包括:

对各集群节点上的各当前磁盘进行磁盘清理。

本发明还提供了一种磁盘迁移系统,所述系统包括:

获取模块,用于获取集群中磁盘容量、新增节点信息和原有节点信息,并确定各所述原有节点的迁出磁盘数,新增节点信息包括新增节点数量和各新增节点的新增节点可用容量,原有节点信息包括原有节点数量和各原有节点的原有节点可用容量;

待迁出磁盘组确定模块,用于根据各原有节点的迁出磁盘数从各原有节点的原有磁盘中确定多个待迁出磁盘组,得到各原有节点对应的多个待迁出磁盘组;

磁盘迁出方案确定模块,用于分别将各原有节点对应的待迁出磁盘组进行组合,得到多个磁盘迁出方案;

磁盘迁移方案确定模块,用于分别将各磁盘迁出方案中的迁出磁盘迁入新增节点,得到多个磁盘迁移方案;

优选迁移方案确定模块,用于确定各磁盘迁移方案的待迁移分块数据数量,并将待迁移分块数据数量最少的磁盘迁移方案作为优选迁移方案,以供进行磁盘迁移。

本发明还提供了一种电子设备,包括处理器、存储器和通信总线;

所述通信总线用于将所述处理器和存储器连接;

所述处理器用于执行所述存储器中存储的计算机程序,以实现如上述中任一项实施例所述的方法。

本发明还提供了一种计算机可读存储介质,其上存储有计算机程序,

所述计算机程序用于使计算机执行如上述任一项实施例所述的方法。

本发明的有益效果:本发明提出的一种磁盘迁移方法、系统、设备及介质,该方法通过获取集群中磁盘容量、新增节点信息和原有节点信息,并确定各原有节点的迁出磁盘数,进而得到多个磁盘迁出方案,分别将各磁盘迁出方案中的迁出磁盘迁入新增节点,得到多个磁盘迁移方案,确定各磁盘迁移方案的待迁移分块数据数量,并将待迁移分块数据数量最少的磁盘迁移方案作为优选迁移方案,以供进行磁盘迁移,能够以较少的新增节点实现集群扩容,数据迁移量少,扩容成本更低。

附图说明

图1是本发明一实施例中提供的磁盘迁移方法的一种流程示意图;

图2是本发明一实施例中提供的磁盘迁移方法的一种具体的流程示意图;

图3是本发明一实施例中提供的优选迁移方案确定的一种具体的流程示意图;

图4是本发明一实施例中提供的分布式存储系统的结构示意图;

图5是本发明一实施例中提供的磁盘数据迁移的一种具体示例的结构示意图;

图6是本发明一实施例中提供的磁盘管理的一种具体的流程示意图;

图7是本发明一实施例中提供的元数据更新的一种具体的流程示意图;

图8是本发明一实施例中提供的磁盘数据迁移的一种具体的流程示意图;

图9是本发明一实施例提供的磁盘迁移系统的一种结构示意图;

图10是本发明一实施例提供的磁盘迁移系统的一种具体的结构示意图;

图11是本发明一实施例提供的一种电子设备的结构示意图。

具体实施方式

以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。

需要说明的是,以下实施例中所提供的图示仅以示意方式说明本发明的基本构想,遂图式中仅显示与本发明中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。

在下文描述中,探讨了大量细节,以提供对本发明实施例的更透彻的解释,然而,对本领域技术人员来说,可以在没有这些具体细节的情况下实施本发明的实施例是显而易见的,在其他实施例中,以方框图的形式而不是以细节的形式来示出公知的结构和设备,以避免使本发明的实施例难以理解。

如图1所示,本实施例提供了一种磁盘迁移方法,该方法包括:

步骤S101:获取集群中磁盘容量、新增节点信息和原有节点信息,并确定各原有节点的迁出磁盘数。

磁盘容量为集群中原有节点的各原有磁盘的磁盘总容量以及新增节点中的新增磁盘的磁盘总容量。若原有磁盘与新增磁盘为同样规格(至少具有相同的磁盘总容量)的磁盘,磁盘容量为与新增磁盘或原有磁盘的磁盘总容量的相同数值。

若原有磁盘中存在多个磁盘总容量的磁盘,和/或新增磁盘与至少一个原有磁盘的磁盘总容量不同时,磁盘容量可以是新增磁盘与原有磁盘的磁盘总容量之和除以新增磁盘与原有磁盘的总数,也即,此时磁盘容量为磁盘总容量总数的平均数。例如,存在m个原有磁盘的磁盘总容量为x,n个原有磁盘的磁盘总容量为y,p个新增磁盘的磁盘总容量为z,此时,磁盘容量A=(mx+ny+pz)/(m+n+z)。对于原有磁盘中存在多个磁盘总容量的磁盘,和/或新增磁盘与至少一个原有磁盘的磁盘总容量不同时本领域技术人员还可以采用所知晓的其他方式实现磁盘容量的确定。

其中,新增节点信息包括新增节点数量和各新增节点的新增节点可用容量,新增节点可用容量可以根据新增节点的数量、各新增节点中新增磁盘的数量以及各新增磁盘的磁盘总容量来确定。新增节点可用容量为各新增节点中新增磁盘的新增总容量之和。

其中,原有节点信息包括原有节点数量和和各原有节点的原有节点可用容量,原有节点可用容量为原有节点中各原有磁盘的可用容量(除去已占用容量外剩余容量)之和。

在一个实施例中,原有节点的迁出磁盘数的确定方式包括:

根据新增节点可用容量和原有节点可用容量确定当前集群总可用容量;

根据新增节点数量和原有节点数量确定当前集群节点总数;

根据当前集群总可用容量和当前集群节点总数确定当前集群各节点平均可用总量;

获取各原有节点中原有磁盘的可用容量,根据当前集群各节点平均可用总量和原有磁盘的可用容量确定原有节点的迁出磁盘数。

可选的,扩节点后集群的当前集群总可用容量的确定方式包括:

C=C1+C2 公式(1);

其中,C为当前集群总可用容量,C1为原有节点可用容量,C2为新增节点可用容量。

可选的,当前集群节点总数的确定方式包括:

N=N1+N2 公式(2);

其中,N为当前集群节点总数,N1为新增节点数量,N2为原有节点数量。

可选的,每个节点的当前集群各节点平均可用总量的确定方式包括:

A=C/(N1+N2) 公式(3);

其中,A为当前集群各节点平均可用总量,C为当前集群总可用容量,N1为新增节点数量,N2为原有节点数量。

可选的,原有节点的迁出磁盘数的确定方式包括:

Mout=|A–Cn|/Cdisk 公式(4);

其中,Mout为原有节点的迁出磁盘数,A为当前集群各节点平均可用总量,Cn为原有磁盘的可用容量,Cdisk为磁盘容量。

需要说明的是,根据公式(4)所确定的迁出磁盘数可能得到的数字为小数,此时可以由本领域技术人员根据需要确定取整方式,包括但不限于四舍五入、保留整数位等。例如,原有节点的迁出磁盘数为Mout=ROUND(|A–Cn|/Cdisk)。

当迁出磁盘数在确定的过程中采用了取整的处理后,在确定完成了每一个原有节点和新增节点的迁出磁盘数后,还需要确定下各新增节点的迁出磁盘数之和是否小于新增节点的新增磁盘数量之和。若新增节点迁出磁盘数之和小于新增节点的新增磁盘数量之和,则可以不用下一步处理,否则若迁出磁盘数之和大于新增节点的新增磁盘数量之和,则可以根据迁出磁盘数之和与新增节点的新增磁盘数量之和之间的差值,选择若干个原有节点以减少原有节点的迁出磁盘数。例如,迁出磁盘数之和与新增节点的新增磁盘数量之和之间的差值为N,将迁出磁盘数最小的前N为原有节点的迁出磁盘数各较少1。

可选的,为保证集群的负载均衡,将原有节点的迁出磁盘迁入新增节点,将新增节点的新增磁盘迁入到原有节点,其中各节点中磁盘的迁入数量与迁出数量相等。新增节点的迁出磁盘数有也可以采用公式(4)的方式确定。也即,新增节点或原有节点的迁入磁盘数的确定方式包括:

Mout=Min 公式(5);

其中,Mout为各节点的迁出磁盘数,Min为各节点的迁入磁盘数。

步骤S102:根据各原有节点的迁出磁盘数从各原有节点的多个原有磁盘中确定多个待迁出磁盘组,得到各原有节点对应的多个待迁出磁盘组。

理论上迁出磁盘数小于原有节点上的原有磁盘总数,此时,对于一个原有节点的迁出磁盘的选择就有至少两种方案,每一种迁出磁盘的组合形成一个待迁出磁盘组。例如,一个原有节点上包括有m个原有磁盘,该原有节点的迁出磁盘数为n,此时,从原有节点中确定多个待迁出磁盘组相当于在m个原有磁盘中选择n个磁盘,每一种选择方式即为一个待迁出磁盘组,则待迁出磁盘组的数量最多为

步骤S103:分别将各原有节点对应的待迁出磁盘组进行组合,得到多个磁盘迁出方案。

也即,每一个原有节点取一个待迁出磁盘组,形成一个磁盘迁出方案。由于每一个原有节点包括至少两个待迁出磁盘组,则磁盘迁移方案存在多种。例如,共有10个原有节点,每一个原有节点均有两个待迁出磁盘组,此时,磁盘迁出方案的数量为2

步骤S104:分别将各磁盘迁出方案中的迁出磁盘迁入新增节点,得到多个磁盘迁移方案。

新增节点可以是一个或多个。当存在多个新增节点时,各新增节点中新增磁盘的数量可以是相同的,也可以是不同的。

例如,若新增节点有q个,磁盘迁出方案有t个,每一个磁盘迁出方案中的迁出磁盘为s个,每个新增节点的迁出磁盘数量相同(各新增节点的新增磁盘数量相等),此时,磁盘迁移方案的数量为

此外,本领域技术人员也可以根据所知晓的其他方式进行磁盘迁出和磁盘迁移方案的确定。

可以理解,步骤S103和步骤S104是根据原有节点的迁出磁盘数从原有节点进行磁盘迁出迁移至某一个或多个新增节点下,然后再在一个或多个新增节点中选取与迁出磁盘数一致的新增磁盘迁入到该原有节点,直到所有的原有节点均完成了磁盘迁移,得到一个磁盘迁移方案。可以通过轮询的方式实现磁盘迁移方案的遍历,得到全部可行的磁盘迁移方案。

步骤S105:确定各磁盘迁移方案的待迁移分块数据数量,并将待迁移分块数据数量最少的磁盘迁移方案作为优选迁移方案,以供进行磁盘迁移。

在一个实施例中,磁盘迁移方案的待迁移分块数据数量的确定方式包括:

获取节点最大可写入同组分块数据数量和磁盘迁移方案中各集群节点的节点同组分块数据数量,集群节点包括新增节点和原有节点;

根据节点最大可写入同组分块数据数量和磁盘迁移方案中各集群节点的节点同组分块数据数量确定磁盘迁移方案的待迁移分块数据数量。

可选的,待迁移分块数据数量等于各集群节点的节点迁移分块数据数量之和,其中节点迁移分块数据数量=节点同组分块数据数量-节点最大可写入同组分块数据数量。

下面通过一个具体实施例,示例性的对上述优选迁移方案的确定流程进行说明。以纠删模式为2+1:1为例,每个集群节点最多可以写入的block数为1(节点最大可写入同组分块数据数量为1),原有节点数为3(分别为N1,N2,N3),每个原有节点的原有磁盘数为40个,每个原有磁盘的磁盘总容量为100GB,每个磁盘剩余容量(原有磁盘的可用容量)为10GB;新增加一个节点N4,新增磁盘数为40,每个新增磁盘的磁盘总容量为100GB,每个磁盘剩余容量(可用容量)为100GB。

根据公式(1),扩节点后集群的当前集群总可用容量C=(100–90)*40*3+40*100=5200GB;

根据公式(3),每个节点的当前集群各节点平均可用总量A=5200/4=1300GB;

根据公式(4),可得到如下信息:

N1节点迁入磁盘数Min:(1300–10*40)/100=9;

N1节点迁出磁盘数Mout:9;

N2节点迁入磁盘数Min:(1300–10*40)/100=9;

N2节点迁出磁盘数Mout:9;

N3节点迁入磁盘数Min:(1300–10*40)/100=9;

N3节点迁出磁盘数Mout:9;

N4节点迁入磁盘数Min:|1300-100*40|/100=27;

N4节点迁出磁盘数Mout:27。

基于上述信息可以得到如下磁盘迁移方案:

方案1、从N1节点选择编号1-9的磁盘,N2节点选择编号1-9的磁盘,N3节点选择编号1-9的磁盘,计算如果当前27块磁盘迁移至N4节点下的block数据迁移量(N4节点为新增节点不需要考虑其磁盘迁出后的数据迁移),通过磁盘节点ID(节点识别信息)和磁盘ID(磁盘识别信息)查询磁盘上所有的元数据信息。假如N1节点1-9号磁盘上有数据:1-1-1,N2节点1-9号磁盘上有数据1-1-2,N3节点1-9号磁盘有数据1-1-3,则迁移后N4节点存在3份同一组的block信息,则需要迁移的block(待迁移分块数据数量)为3-1=2。

方案2、从N1节点选择编号1-9的磁盘,N2节点选择编号1-9的磁盘,N3节点选择编号2-10的磁盘,计算如果当前27块磁盘迁移至N4节点下的block数据迁移量(N4节点为新增节点不需要考虑其磁盘迁出后的数据迁移),通过磁盘节点ID和磁盘ID查询磁盘上所有的元数据信息。假如N1节点1-9号磁盘上有数据:1-1-1,N2节点1-9号磁盘上有数据1-1-2,N3节点2-10号磁盘有数据2-1-3,则迁移后N4节点存在2份同一组的block信息,则需要迁移的block(待迁移分块数据数量)为2-1=1。

上述示例中方案2比方案1更优。

按照上述方案还可以确定有方案3-方案729,且分别可以确定各方案所需要迁移的block数量(待迁移分块数据数量)。

通过以上方法直到所有的情况处理完成后得出迁移数最少(待迁移分块数据数量最少)的磁盘迁移方案作为优选方案。

可选的,若存在至少两个磁盘迁移方案的待迁移分块数据数量相等,且低于其他磁盘迁移方案的待迁移分块数据数量,也即,存在至少两个磁盘迁移方案的待迁移分块数据数量最少,此时可以选择其中一个磁盘迁移方案作为优选迁移方案。

若存在至少两个磁盘迁移方案的待迁移分块数据数量相等,且低于其他磁盘迁移方案的待迁移分块数据数量,也即,存在至少两个磁盘迁移方案的待迁移分块数据数量最少,即存在至少两个磁盘迁移方案可作为优选迁移方案,此时该方法还包括:

获取各原始磁盘的预设磁盘迁移难度;

根据各原始磁盘的预设磁盘迁移难度确定各优选迁移方案的方案权重;

将方案权重最小的优选迁移方案作为最终迁移方案。

其中,方案权重等于各优选迁移方案中迁移磁盘的预设磁盘迁移难度之和。磁盘迁移难度越大,预设磁盘迁移难度越大。该预设磁盘迁移难度可以由本领域技术人员预先设定。

在一个实施例中,磁盘迁移方案包括新增节点的迁入磁盘槽位信息、原有节点的迁出磁盘槽位信息、原有节点的迁入磁盘槽位信息,该方法还包括:

根据优选迁移方案的新增节点的迁入磁盘槽位信息、原有节点的迁出磁盘槽位信息、原有节点的迁入磁盘槽位信息生成磁盘插拔提示消息,该磁盘插拔提示消息用于提示磁盘位置,以方便后续进行磁盘插拔。

通过上述方式可以让用户直观的知晓应该将某一节点上的哪些位置上的磁盘进行拔出,并将空余的槽位安装新增磁盘,且对于存在多个新增节点时,用户也能明确知晓哪些原有磁盘放置于哪个新增节点下。这样清晰的提示将提升磁盘插拔效率,更加方便用户。

可选的,磁盘迁移方案还可以包括新增节点的迁出磁盘槽位信息,相应的,优选迁移方案中也包括有迁出磁盘槽位信息,这样可以使得用户知晓对于新增节点拔除哪些槽位上的新增磁盘。

可选的,磁盘插拔也可以通过本领域技术人员所知晓的其他方式实现,不限于人工插拔。

可以理解的,新增节点的迁入磁盘槽位信息、原有节点的迁出磁盘槽位信息、原有节点的迁入磁盘槽位信息可以通过新增磁盘或者原有磁盘的预先设定好的磁盘配置信息-槽位信息映射关系来确定。对于原有节点,当知晓需要移出哪些原有磁盘时,也就知晓了这些需要移出的原有磁盘的磁盘配置信息,基于该磁盘配置信息和预先设定好的磁盘配置信息-槽位信息映射关系来确定各需要移出的原有磁盘的磁盘槽位信息,对于新增节点,由于优选迁移方案中还包括新增节点中移入哪些原有节点,与上述方法类似的,就可以知晓被移出的原有节点移入到哪一个新增节点下。

在一个实施例中,根据优选迁移方案对至少一部分原有磁盘和至少一部分新增磁盘进行插拔后(根据优选迁移方案完成各新增节点和原有节点下的磁盘插拔后),该方法还包括:

获取集群节点中各当前磁盘的磁盘配置信息,集群节点包括原有节点和新增节点,当前磁盘包括原有磁盘和新增磁盘,当前磁盘集合中包括全部的原有磁盘和新增磁盘,也即当前磁盘为进行磁盘插拔后集群中各个集群节点下的磁盘;

若磁盘配置信息包括磁盘识别信息和节点识别信息,且节点识别信息与当前节点的节点预设信息相同,控制当前磁盘上线,可以理解,该磁盘配置信息所对应的当前磁盘在磁盘插拔前后均存在于同一个集群节点下,此时可以完成该当前磁盘的上限;

若磁盘配置信息包括磁盘识别信息和节点识别信息,且节点识别信息与当前节点的节点预设信息不同,对当前磁盘配置新的磁盘识别信息和新的节点识别信息,并将新的磁盘识别信息和新的节点识别信息确定为磁盘配置信息,控制当前磁盘上线,可以理解,该磁盘配置信息对应的当前磁盘在进行磁盘插拔前位于集群节点A,在磁盘插拔后位于集群节点B,其所在的集群节点发生了改变,此时需要为该当前磁盘重新配置新的磁盘配置信息后,再让该当前磁盘上线,需要说明的是,每一个集群节点均有全局唯一的节点预设信息,若某一当前磁盘在磁盘插拔前后均位于同一个集群节点,那么该当前磁盘的节点识别信息与节点预设信息一致,否则当前磁盘发生了节点变更,则变更后节点的节点预设信息与当前节点的节点识别信息不同;

若磁盘配置信息不包括磁盘识别信息和/或节点识别信息,对当前磁盘配置磁盘识别信息和/或节点识别信息,并将磁盘识别信息和节点识别信息确定为磁盘配置信息,控制当前磁盘上线,可以理解,对于新增磁盘,可能尚未配置过磁盘识别信息和/或节点识别信息,此事该新增磁盘不包括磁盘识别信息和/或节点识别信息,需要对其进行配置,在配置过程中,该新增磁盘的节点识别信息与新增磁盘所在的集群节点的节点预设信息相同,磁盘识别信息为该新增磁盘的全局唯一识别信息。

该过程可以视为对进行了磁盘插拔后的磁盘进行磁盘管理,通过对各磁盘的磁盘配置信息进行检查,可以方便对每一个磁盘身份进行确认,方便后续对磁盘的进一步管理。磁盘上线后,该磁盘变为可用。

在一个实施例中,控制当前磁盘上线之前,该方法还包括:

获取并记录当前磁盘的磁盘配置信息;

若磁盘配置信息包括磁盘识别信息、节点识别信息、新的磁盘识别信息和新的节点识别信息,将磁盘配置信息更新为新的磁盘识别信息和新的节点识别信息,通知当前磁盘上线。

也即,元数据管理模块将重新配置的新的磁盘识别信息替换原有的磁盘识别信息、将新的节点识别信息替换掉原有的节点识别信息后,再通知当前磁盘上线,磁盘管理模块接收到该上线通知后,再控制该当前磁盘上线。

由于磁盘从一个节点转移到另一个节点后,磁盘上的元数据信息(磁盘配置信息)可能会发生变更,因此需要对元数据进行更新,根据需要迁移的磁盘节点识别信息NodeId、磁盘识别信息DiskID,暂停对于该磁盘的数据恢复,数据恢复在该磁盘迁移完成后开启,在磁盘迁移过程中可能发生断电,网络故障等异常,在迁移前首先将待漂移的磁盘记录在数据库中,记录下磁盘的新的节点识别信息SrcNodeId、新的磁盘识别信息SrcDiskId、节点识别信息DesNodeID、磁盘识别信息DesDiskId,以及迁移状态,发生异常恢复后可重新进行迁移流程,通过节点识别信息SrcNodeId和节点识别信息SrcDiskId将原磁盘上数据的元数据更新为新的节点识别信息NodeID、新的磁盘识别信息DiskID,更新完成通知磁盘进行上线。

采用扩节点的方式提高集群的可用容量,在纠删为N+M的冗余策略下扩节点时,如果新扩节点数小于N+M,则新扩的节点不满足可写下N+M份数据,同时新扩的节点可用容量远远大于集群中已有数据节点可用容量,这样会导致各个数据节点间容量的差异过大出现负载不均衡问题,引起存储集群整体性能的下降,不能达到扩容的效果,故,当新增节点小于集群的纠删冗余策略N+M时,该方法还包括:

获取优选迁移方案的待迁移分块数据数量;

若优选迁移方案的待迁移分块数据数量大于零,根据节点最大可写入同组分块数据数量和优选迁移方案中各集群节点的节点同组分块数据数量确定各集群节点的节点待迁移分块数据;

根据负载均衡原则从各集群节点中选择至少一个目标节点,将各集群节点的节点待迁移分块数据迁移到目标节点,这样能够使进行了磁盘插拔后的集群内部数据分布符合纠删策略,父负载更为均衡。

其中,根据节点最大可写入同组分块数据数量和优选迁移方案中各集群节点的节点同组分块数据数量确定各集群节点的节点待迁移分块数据包括:

若节点最大可写入同组分块数据数量大于或等于集群节点的节点同组分块数据数量,该集群节点中无节点待迁移分块数据,将该集群节点作为待选目标节点;

若节点最大可写入同组分块数据数量小于集群节点的节点同组分块数据数量,该集群节点中节点待迁移分块数据数量等于集群节点的节点同组分块数据数量与节点最大可写入同组分块数据数量之差,节点待迁移分块数据为从该集群节点中节点同组分块数据选择节点待迁移分块数据数量个分块数据,选择的规则可以由本领域技术人员根据需要确认,如随机选择等。

对于一个集群节点的节点同组分块数据数量可能只有一个,也可能存在多个,例如,该集群节点包括三组不同的数据A、B、C,其中数据A包括有两个分块数据,数据B包括有三个分块数据,数据C包括有四个分块数据,当前纠删码为4+2:1,每个集群节点最大写入分块数据block数为2个(2/1=2),此时可知,该集群节点中存在两个分块数据量大于节点最大可写入同组分块数据数量,该集群节点的待迁移分块数据数量为3个(4-2+3-2=3),可以从数据B任选一个分块数据,数据C任选两个分块数据作为节点待迁移分块数据。

目标节点可以是各待选目标节点中剩余节点容量(节点可用容量)最大的一个待选目标节点,或剩余节点容量从大到小排列,前N名待选目标节点作为目标节点。具体的目标节点的选择也可以根据本领域技术人员所知晓的其他方式实现。

在一个实施例中,根据负载均衡原则从各集群节点中选择至少一个目标节点之前,该方法还包括:

对各集群节点上的各当前磁盘进行磁盘清理。

也即,在完成了磁盘插拔后,对各个节点上的磁盘进行磁盘清理,这样至少一部分的磁盘的可用磁盘容量将有可能大于初始进行磁盘迁移方案时所记入的磁盘可用容量,在此基础上,再根据负载均衡原则从各集群节点中选择至少一个目标节点将使得集群中的负载更为均衡。负载均衡原则可以理解为将节点待迁移分块数据迁移到其他结点可用容量相对更大的节点下,对于存在多个待迁移分块数据的情况,可以将多个待迁移分块数据分散到多个目标节点。

上述实施例提供的磁盘迁移方法,通过获取磁盘容量、新增节点信息和集群中各原有节点的原有节点信息,并确定各原有节点的迁出磁盘数,进而得到多个磁盘迁出方案,分别将各磁盘迁出方案中的迁出磁盘迁入新增节点,得到多个磁盘迁移方案,确定各磁盘迁移方案的待迁移分块数据数量,并将待迁移分块数据数量最少的磁盘迁移方案作为优选迁移方案,以供进行磁盘迁移,能够以较少的新增节点实现集群扩容,数据迁移量少,扩容成本更低。

可选的,通过预先计算数据分布加人工介入的方式(确定优选迁移方案再进行磁盘迁移的方式),可以极大的减少扩节点后为达到集群数据负载均衡所带来的数据迁移,可以在少量数据迁移的情况下达到负载均衡,可以快速完成扩节点后的数据均衡。

可选的,根据优选迁移方案对至少一部分原有磁盘和至少一部分新增磁盘进行插拔后,进行磁盘配置信息的确认与更新完成后,再控制磁盘上线,也保证了数据的高可靠性。

在分布式纠删存储系统中,数据分布在集群不同的数据节点上,数据节点通常由数十块磁盘存储数据,当集群容量写满时,为了能够让存储集群继续存储新的数据,通常会采用扩节点的方式提高集群的可用容量,在纠删为N+M的冗余策略下扩节点时如果新扩节点数小于N+M,则新扩的节点不满足可写下N+M份数据,同时新扩的节点可用容量远远大于集群中已有数据节点可用容量,这样会导致各个数据节点间容量的差异过大出现负载不均衡问题,引起存储集群整体性能的下降,不能达到扩容的效果;如果按N+M的节点数扩展,对于用户而言一次扩容的成本是巨大的。

为解决常规扩节点方法中新扩节点的数量不同带来的负载不均衡和高成本问题,使得扩节点不再受新扩节点数量的限制,以下通过一个具体的实施例示意性的说明上述实施例所提供的磁盘迁移方法,参见图2,该具体的方法包括:

步骤S201:确定优选迁移方案。

参见图3,优选迁移方案的确定方式可以包括:

步骤S2011:根据磁盘容量、新增节点数量、新增节点可用容量、原有节点数量、原有节点可用容量以及各原有节点下原有磁盘的可用容量确定各原有节点的迁出磁盘数。

步骤S2012:根据各原有节点的迁出磁盘数确定多个磁盘迁移方案。

步骤S2013:分别计算每一个磁盘迁移方案的待迁移分块数据数量。

步骤S2014:将待迁移分块数据数量最少的一个磁盘迁移方案作为优选迁移方案。

其中,各原有节点的迁出磁盘数与该原有节点的迁入磁盘数相等。迁出磁盘数的确定可以参考上述公式(1)-公式(5)。

一种示例性优选迁移方案的确定方式为:根据步骤S2011计算出的原节点i需要迁移出的迁出磁盘数为Mini,轮训节点1-N,每个节点i分别选出Mini个磁盘,计算每一种组合下需要数据迁移的block数目(待迁移分块数据数量),取待迁移分块数据数量少的组合作为最后的方案。

例如,根据集群现有可用容量与新增节点可用容量计算每个节点可分配的容量(当前集群各节点平均可用总量),计算每个节点需要迁出的磁盘数(迁出磁盘数),通过需要迁出磁盘数分别计算出每一种组合(磁盘迁移方案)下的需要迁移的分块数据(block)数(待迁移分块数据数量)。

其中,block迁移的判断由纠删数据分布要求指出:在N+M:K的纠删码中,一个数据节点最多可允许写入的block数等于M/K,判断每个数据节点上的block分布数,存在超过M/K的则需要迁移,取block迁移数最少的一种组合作为优选迁移方案。可选的,以磁盘槽位号的形式告知用户优选迁移方案。

步骤S202:根据步骤S201中提供的优选迁移方案,人工介入进行磁盘迁移。

步骤S203:配置磁盘配置信息,进行磁盘管理。

磁盘管理模块感知非本节点的磁盘上线(该集群节点上迁入了新的磁盘),需要触发磁盘迁移,其将会携带待迁移的磁盘信息通过元数据更新模块开始磁盘迁移。

例如,在新磁盘M上线时为磁盘M分配一个磁盘ID(DiskID,磁盘识别信息),并将数据节点ID(NodeID,节点识别信息)和DiskID一同写入磁盘,在磁盘上线时根据磁盘记录的NodeID判断该磁盘是否是本节点的磁盘,不是则为磁盘重新分配一个DiskID(配置新的磁盘识别信息),携带上磁盘的新NodeID(与当前磁盘M所在节点的节点预设信息相同)、DiskID和老NodeID、DiskID,通知元数据更新模块触发磁盘迁移后等待磁盘元数据更新完成,磁盘元数据更新完成后将磁盘中记录的NodeID和DiskID更新为新的完成上线过程,磁盘变为可用。

步骤S204:元数据更新。

元数据更新模块将待磁盘信息记录至数据库格式SrcNodeID(新的节点识别信息)-SrcDiskID(新的磁盘识别信息)-DesNodeID(原有的节点识别信息)-DesDiskID(原有的节点识别信息)-DriftStatu,初始化迁移状态为元数据更新状态(0,MetaUpdate),将数据的元数据信息全部更新完成后修改数据库迁移状态为元数据更新完成状态(1,MetaUpdateOver)。通知元数据更新完成。

由于磁盘迁移至其他集群节点后,磁盘上数据的元数据信息会发生变更则需要对元数据进行更新。根据需要迁移的磁盘原NodeId、DiskID,暂停对于该磁盘的数据恢复,数据恢复在该磁盘迁移完成后开启,在磁盘迁移过程中可能发生断电,网络故障等异常,在迁移前首先将待漂移的磁盘记录在数据库中,记录下磁盘的SrcNodeId、SrcDiskId、DesNodeID、DesDiskId,以及迁移状态,发生异常恢复后可重新进行迁移流程,通过SrcNodeId和SrcDiskId将原磁盘上数据的元数据更新为新的NodeID、DiskID,更新完成通知磁盘进行上线。

步骤S205:磁盘上线。

磁盘管理接收到元数据更新完成的消息后,更新磁盘NodeID和DiskID信息,磁盘完成上线。

步骤S206:磁盘数据迁移。

数据迁移模块定时从数据库中获取迁移状态为MetaUpdateOver的磁盘进行数据迁移,迁移完成后将迁移信息从数据库移除完成磁盘迁移过程。

以在分布式存储中常用的冗余策略为纠删码和多副本为例,当磁盘发生迁移时,数据在集群中的分布情况将会发生改变,数据分布可能不再满足冗余策略的高可靠性,此时通过数据迁移来保磁盘迁移后数据的高可靠性。根据迁移磁盘上分布的数据信息,查询出其同组的数据分布情况,根据纠删数据分布要求确定分块数据block是否需要迁移,需要迁移则根据负载均衡选择目标节点,将迁移的block信息记录至数据库,格式为:SrcNodeId-SrcDiskId-DesNodeID-DesDiskId-MigrateStatu,初始化迁移状态为未开始(0,MigrateDefault),将上述信息发送至目标数据节点进行数据迁移后修改迁移状态为(1,MigrateStarting)等待数据节点迁移完成后,将SrcNodeId-SrcDiskId上分块数据block数据删除,完成一份数据迁移。

上述实施例提供的方法与现有的扩节点后达到集群负载均衡的方法中通常需要对全局数据进行迁移,将集群已有数据节点上的数据往新扩的数据节点上迁移,这样就导致存在大量的数据迁移,大量数据迁移将会带来集群性能的消耗,并且耗时长,集群不能快速达到一个负载均衡的环境相比,本实施例提供的磁盘迁移方法,应用于分布式存储系统,通过预计算数据分布加人工介入的方式,将使得集群扩新节点后在少量数据迁移下达到负载均衡。预计算将给出磁盘的迁移方案(优选迁移方案),计算出哪些磁盘迁往新的数据节点的最优方案,通过新扩节点的磁盘数和磁盘容量在扩节点前预先给出磁盘迁移方案,在预计算时保证磁盘迁移后数据是均衡的,允许集群内数据节点间磁盘插拔,再通过用户对磁盘进行迁移,达到扩节点后的负载均衡同时保证数据的高可靠性,通过对插拔后的磁盘进行数据迁移的方式以达到满足存储集群的冗余策略,保证发生磁盘迁移后数据的高可靠性。

下面再通过一个具体的实施例,对上述提到的磁盘迁移方法进行进一步的说明。

参见图4,图4为一种分布式存储系统的结构示意图,该分布式存储系统包含三个元数据管理节点10(主节点),101(备节点),102(备节点)和M个数据节点(原始节点)11、12、13、…,每个数据节点下包含n块数据磁盘(原始磁盘),由元数据管理节点统筹控制磁盘迁移流程。

继续参见图3,为通过预计算确定优选迁移方案的一种流程示意图,通过容量计算优选迁移方案。

参见图5,图5为一种磁盘数据迁移的流程示意图,以4+2:1纠删码为例,每个数据节点最大写入block数为(2/1=2),图5中一组block(分块数据)在数据节点上的分布个数依次为(2,2,1,1),当DataNode1上磁盘1(Disk1)被拔出插在了DataNode2上时,DataNode2发现其NodeID(节点标识信息)为1与本节点(节点预设信息2)不相等,则认为该磁盘Disk1是需要迁移的磁盘,则上报MetaServer(元数据数据库),并携带该磁盘原磁盘配置信息NodeID-DiskID(1-1),新NodeID-DiskID(2-3),MetaServer收到消息将原来在1-1上的block的元数据信息均修改为2-3。元数据更新后一组block的分布情况则变为(1,3,1,1),DataNode2存在block为3份超过最大允许数据2,不满足4+2:1策略,则根据负载均衡选择DataNode4作为迁移数据的目标节点,将DataNode2上的一份数据迁移至DataNode4,完成后block分布情况将变为(1,2,1,2),满足4+2:1高可靠性,磁盘上所有数据处理完成后磁盘(1-1)被更新为(2-3)完成磁盘迁移。

参见图6示例性地,图6为一种磁盘管理流程示意图,由磁盘管理模块执行该流程,该磁盘管理模块感知和触发磁盘迁移流程,NodeID(节点识别信息)和DiskID(磁盘识别信息)将被记录在磁盘的diskinfo.conf文件上,判断diskinfo.conf文件是否存在确定是否是老盘(该节点的原有磁盘非新增磁盘),读取diskinfo.conf中记录的NodeID和DiskID,判断是否是本节点磁盘,不是则上报,磁盘迁移完成将新的NodeID和DiskID更新至diskinfo.conf。具体的,如图6所示,当磁盘插入后,读取磁盘配置文件diskinfo.conf,获取NodeID(图中的nodeid)和DiskID(图中的diskid),若磁盘中无diskinfo.conf文件,则可以确定该磁盘为新磁盘上线,为该磁盘分配diskid,将nodeid、diskid写入diskinfo.conf文件,其中nodeid为当前节点的节点预设信息,完成磁盘上线。若磁盘中有diskinfo.conf文件,说明是老磁盘上线,也即该磁盘为原有磁盘,可能是当前节点上的原有磁盘,也可能是其他节点上的原有磁盘,可以通过判断磁盘上nodeid与当前节点的nodeid(节点预设信息)是否相等,若相等,完成该磁盘上线,若不相等,上报该磁盘信息,等待磁盘磁盘元数据更新完成后,为磁盘分配diskid,将nodeid、diskid写入diskinfo.conf文件,完成磁盘上线,结束该磁盘管理流程。

参见图7,图7为元数据更新的一种流程示意图。如图7所示,首先将磁盘迁移信息记录至redis的TBL_DRIFT表中,格式为:1-1-2-3-0(SrcNodeID-SrcDiskID-DesNodeID-DesDiskID-DriftStatu),关闭对磁盘1-1的数据恢复检查,根据要变更的磁盘信息对元数据进行变更后更新TBL_DRIFT为1-1-2-3-1。

参见图8,图8为数据迁移的一种流程示意图,如图8所示,从Redis的TBL_DRIFT表获取到迁移状态为1的磁盘,依次获取该磁盘上的分区数据block信息,获取block的同组block信息,根据纠删策略计算一个节点的最大允许写入block数(节点最大可写入同组分块数据数量),判断集群中是否有节点block数大于最大允许写入书,若是,则说明需要进行数据迁移,将block迁移信息记录至Redis的TBL_MIGRATE表,如1-1-2-3-0,根据负载均衡选择目标节点进行迁移,将磁盘上block数据多的往少的节点迁移,迁移后更新Redis表TBL_MIGRATE,如1-1-2-3-1,等待目标节点上报迁移成功后将原始数据删除,再重新执行依次获取该磁盘上的block信息,直到各节点的block数均小于或等于最大允许写入数。若各节点的block数均小于或等于最大允许写入数,则说明不需要进行数据迁移,从Redis的TBL_DRIFT表删除磁盘迁移信息,磁盘迁移完成,开启该磁盘数据恢复功能,结束该流程。

继续以图5的示例为例,该数据迁移流程为:从TBL_DRIFT表获取到迁移信息1-1-2-3-1,查询磁盘(2-3)上的block数据以及其同组的block数据,根据纠删策略计算一个节点最大可写入block数,对于节点上block数大于最大可写入数的进行迁移,将迁移的block信息记录至TBL_MIGRATE表中格式:blockid+2-3-4-1-0,根据负载均衡选择目标节点并将待迁移的block信息发送至目标节点后更新TBL_MIGRATE表为2-3-4-1-1,等待目标节点上报迁移完成后将原始数据2-3上block下发删除完成block从2-3迁移至4-1。

请参阅图9,本实施例提供了一种磁盘迁移系统900,该磁盘迁移系统包括:

获取模块901,用于获取磁盘容量、新增节点信息和集群中各原有节点的原有节点信息,并确定各原有节点的迁出磁盘数;

待迁出磁盘组确定模块902,用于根据原有节点的迁出磁盘数从原有节点中确定多个待迁出磁盘组,得到各原有节点对应的多个待迁出磁盘组;

磁盘迁出方案确定模块903,用于分别将各原有节点对应的待迁出磁盘组进行组合,得到多个磁盘迁出方案;

磁盘迁移方案确定模块904,用于分别将各磁盘迁出方案中的迁出磁盘迁入新增节点,得到多个磁盘迁移方案;

优选迁移方案确定模块905,用于确定各磁盘迁移方案的待迁移分块数据数量,并将待迁移分块数据数量最少的磁盘迁移方案作为优选迁移方案,以供进行磁盘迁移。

在一个实施例中,参见图10,图10为另一种磁盘迁移系统的结构示意图,如图10所示,该磁盘迁移系统1000包括预计算模块1001、磁盘管理模块1002、元数据更新模块1003、数据迁移模块1004。其中预计算模块包括有获取模块、待迁出磁盘组确定模块、磁盘迁出方案确定模块、磁盘迁移方案确定模块、优选迁移方案确定模块,该预计算模块通过新增节点的磁盘数和容量计算集群中现有节点上哪些磁盘需要迁至新迁入节点,给出最佳方案(优选迁移方案)。磁盘管理模块用于管理磁盘上线与下线,判断是否是其他数据节点上的磁盘并触发磁盘迁移,执行磁盘管理流程。元数据更新模块用于接收磁盘管理模块上报的磁盘迁移请求并处理,将写在迁移磁盘上数据的元数据更新至新节点,完成后将通知数据迁移模块进行数据迁移,执行元数据更新流程。数据迁移模块用于针对磁盘上的数据,查询出其同组的数据分布情况,根据当前集群冗余策略进行数据迁移,执行磁盘数据迁移流程。

在本实施例中,该系统实质上是设置了多个模块用以执行上述实施例中的方法,具体功能和技术效果参照上述方法实施例即可,此处不再赘述。

参见图11,本发明实施例还提供了一种电子设备1100,包括处理器1101、存储器1102和通信总线1103;

通信总线1103用于将处理器1101和存储器连接1102;

处理器1101用于执行存储器1102中存储的计算机程序,以实现如上述实施例一中的一个或多个所述的方法。

本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,

计算机程序用于使计算机执行如上述实施例一中的任一项所述的方法。

本申请实施例还提供了一种非易失性可读存储介质,该存储介质中存储有一个或多个模块(programs),该一个或多个模块被应用在设备时,可以使得该设备执行本申请实施例的实施例一所包含步骤的指令(instructions)。

需要说明的是,本公开上述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、RF(射频)等等,或者上述的任意合适的组合。

上述计算机可读介质可以是上述电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。

可以以一种或多种程序设计语言或其组合来编写用于执行本公开的操作的计算机程序代码,上述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。

附图中的流程图和框图,图示了按照本公开各种实施例的方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何熟悉此技术的人士皆可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本发明所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本发明的权利要求所涵盖。

技术分类

06120114696444