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

一种复制组的生成方法、装置、设备及计算机存储介质

文献发布时间:2023-06-19 19:00:17


一种复制组的生成方法、装置、设备及计算机存储介质

技术领域

本申请实施例涉及互联网服务技术领域,涉及但不限于一种复制组的生成方法、装置、设备及计算机存储介质。

背景技术

相关技术中,分布式存储系统由同构的存储节点组成。同构的存储节点指的是,多个存储节点位于多个主机上,每个主机上的存储节点数量相同。同构的存储系统使得分布式存储系统的负载均衡和容错很容易实现,只需要将数据均匀地分布在多个主机上即可同时满足负载均衡和容错的需求。

然而,随着企业设备的更新换代,分布式存储系统中开始逐步引入异构的存储节点。如何基于异构的存储节点同时满足分布式存储系统的负载均衡和容错的需求成为亟待解决的问题。

发明内容

有鉴于此,本申请实施例提供一种复制组的生成方法、装置、设备及计算机存储介质。

本申请实施例的技术方案是这样实现的:

第一方面,本申请实施例提供一种复制组的生成方法,所述方法包括:确定多个复制组和用于承载所述多个复制组的多个存储节点,其中,每个复制组中的数据分布在承载复制组的存储节点上,所述多个存储节点位于多个主机上,所述多个主机中至少存在两个主机,所述两个主机上具有的存储节点的数量不同;根据所述多个复制组的数量和每个复制组所需存储节点的数量,将所述多个复制组中的每个复制组中的数据分配至所述多个存储节点中的至少一个存储节点,以使得所述多个存储节点中的各存储节点上承载的复制组的数量之间的差异小于第一阈值,且承载每一复制组的至少一个存储节点中位于同一主机的存储节点的数量小于第二阈值。

第二方面,本申请实施例提供一种复制组的生成装置,所述装置包括:确定模块,用于确定多个复制组和用于承载所述多个复制组的多个存储节点,其中,每个复制组中的数据分布在承载复制组的存储节点上,所述多个存储节点位于多个主机上,所述多个主机中至少存在两个主机,所述两个主机上具有的存储节点的数量不同;分配模块,用于根据所述多个复制组的数量和每个复制组所需存储节点的数量,将所述多个复制组中的每个复制组中的数据分配至所述多个存储节点中的至少一个存储节点,以使得所述多个存储节点中的各存储节点上承载的复制组的数量之间的差异小于第一阈值,且承载每一复制组的至少一个存储节点中位于同一主机的存储节点的数量小于第二阈值。

第三方面,本申请实施例提供一种电子设备,包括存储器和处理器,所述存储器存储有可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述方法。

第四方面,本申请实施例提供一种计算机存储介质,存储有可执行指令,用于引起处理器执行时,实现上述方法。

本申请实施例中,首先确定多个复制组和用于承载所述多个复制组的多个存储节点,然后根据所述多个复制组的数量和每个复制组所需存储节点的数量,将所述多个复制组中的每个复制组中的数据分配至所述多个存储节点中的至少一个存储节点,以使得所述多个存储节点中的各存储节点上承载的复制组的数量之间的差异小于第一阈值,且承载每一复制组的至少一个存储节点中位于同一主机的存储节点的数量小于第二阈值。这样,将多个存储节点中的各存储节点承载的复制组的数量之间的差异,可以有效满足分布式存储系统的负载均衡;承载每一复制组的至少一个存储节点中位于同一主机的存储节点的数量小于第二阈值,可以在任一复制组中的任一存储节点因为主机断网、断电、磁盘故障、误操作等不可以使用的情况下,其余不在同一主机上的存储节点可以继续正常工作,不会造成该复制组中数据的丢失。

附图说明

图1A为本申请实施例提供的一种复制组的生成方法的实现流程示意图;

图1B为本申请实施例提供的四主机八存储节点的示意图;

图1C为本申请实施例提供的六主机七存储节点的示意图;

图2A为本申请实施例提供的一种复制组的生成方法的实现流程示意图;

图2B为本申请实施例提供的六主机七存储节点生成七复制组的示意图;

图3为本申请实施例提供的一种复制组的生成方法的实现流程示意图;

图4A为本申请实施例提供的一种生成所有复制组的流程示意图;

图4B为本申请实施例提供的一种生成任一复制组的流程示意图;

图5为本申请实施例提供的复制组的生成装置的组成结构示意图;

图6为本申请实施例提供的电子设备的一种硬件实体示意图。

具体实施方式

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对发明的具体技术方案做进一步详细描述。以下实施例用于说明本申请,但不用来限制本申请的范围。

在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。

在以下的描述中,所涉及的术语“第一\第二\第三”仅仅是是区别类似的对象,不代表针对对象的特定排序,可以理解地,“第一\第二\第三”在允许的情况下可以互换特定的顺序或先后次序,以使这里描述的本申请实施例能够以除了在这里图示或描述的以外的顺序实施。

除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本申请实施例的目的,不是旨在限制本申请。

对本申请实施例进行进一步详细说明之前,对本申请实施例中涉及的名词和术语进行说明,本申请实施例中涉及的名词和术语适用于如下的解释。

分布式存储系统:运行于通过网络连接的多存储节点(数据中心,存储主机,或硬盘)之上的存储系统。

复制组:存储系统中的提供容错的单元,复制组由多个节点组成,一个复制组中的若干节点故障或离线时,不会造成该复制组中数据的丢失。

故障域:故障发生时,受影响的存储节点集合。例如,主机断网会导致该主机中所有的磁盘不可用。分布式存储系统如果能在主机故障时继续提供服务,可以称其提供主机级故障域的容错能力。

分布式哈希表(Distributed Hash Table,DHT):一种分布式存储系统。在不需要服务器的情况下,每个客户端负责一个小范围的路由,并负责存储一小部分数据,从而实现整个DHT网络的寻址和存储。

分布式文件系统(Ceph):是一种为优秀的性能、可靠性和可扩展性而设计的统一的、分布式文件系统。

CRUSH:Ceph采用的复制组中存储节点分配的算法。

贪心算法(又称贪婪算法):指在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,所做出的仅是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,但对范围相当广泛的许多问题他能产生整体最优解或者是整体最优解的近似解。

纠删码(erasure coding,EC):是一种数据保护方法,可以将数据分割成片段,把冗余数据块扩展、编码,并将其存储在不同的位置,比如磁盘、存储节点或者其它地理位置。

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。

应当理解,此处所描述的一些实施例仅仅用以解释本申请的技术方案,并不用于限定本申请的技术范围。

本申请实施例提供的一种复制组的生成方法,如图1A所示,该方法包括:

步骤S101、确定多个复制组和用于承载所述多个复制组的多个存储节点,其中,每个复制组中的数据分布在承载复制组的存储节点上,所述多个存储节点位于多个主机上,所述多个主机中至少存在两个主机,所述两个主机上具有的存储节点的数量不同;

复制组指一份数据的多个拷贝,其中每一份数据拷贝被称为数据副本,复制组中的每个数据副本需要被存放于不同的主机中。复制组是存储系统中的提供容错的单元。复制组由多个存储节点组成,可以将同一数据的不同数据副本存储至不同的存储节点。一个复制组中的若干存储节点故障或离线时,不会造成该复制组中数据的丢失。举例来说,纠删码方法中包括复制组的生成。

在生成多个复制组之前需要先确定用于承载多个复制组中的数据的多个存储节点。每个复制组所需存储节点的数量是相同的。在实施过程中,可以根据实际需求确定需要生成的多个复制组的数量和每个复制组所需存储节点的数量。举例来说,可以根据实际需求确定需要生成7个复制组,每个复制组需要3个存储节点。

待承载复制组的存储节点可以是来自不同主机的存储节点,也可以是来自同一主机的存储节点,如图1B所示的四个主机h1、h2、h3和h4,每一主机各包括2个存储节点,其中,存储节点11和12来自同一主机,存储节点21和22来自同一主机,存储节点31和32来自同一主机,存储节点41和42来自同一主机。承载复制组的存储节点21、32和41来自不同主机。

多个存储节点位于多个主机上,多个主机中至少存在两个主机,两个主机上具有的存储节点的数量不同的分布式存储系统,可以称为异构的存储节点存储系统。如图1C所示待承载复制组的多个存储节点包括主机h1上的存储节点A、主机h2上的存储节点B、主机h3上的存储节点C和D、主机h4上的存储节点E、主机h5上的存储节点F、主机h6上的存储节点G。这里,主机h3上的存储节点的个数与其余主机的存储节点的个数不同,即,该图1C所示的分布式存储系统可以称为异构的存储节点存储系统。

步骤S102、根据所述多个复制组的数量和每个复制组所需存储节点的数量,将所述多个复制组中的每个复制组中的数据分配至所述多个存储节点中的至少一个存储节点,以使得所述多个存储节点中的各存储节点上承载的复制组的数量之间的差异小于第一阈值,且承载每一复制组的至少一个存储节点中位于同一主机的存储节点的数量小于第二阈值。

举例来说,可以根据实际需求设置第一阈值为1,即,多个存储节点中的各存储节点上承载的复制组的数量之间的差异小于1。这样,可以实现多个存储节点中的各存储节点承载的复制组的数量无差异,即,每个存储节点承载的复制组的数量相同,以满足负载均衡。

在一些实施例中,可以基于每个复制组所需存储节点的数量,确定承载每一复制组的至少一个存储节点中位于同一主机的存储节点的第二阈值;因为复制组所需存储节点的数量越大,容错性能越好,举例来说,在复制组需要5个存储节点的情况下,可以允许2个存储节点故障而不影响复制组的数据存储功能,即,可以基于复制组所需存储节点的数量为5,确定承载每一复制组的至少一个存储节点中位于同一主机的存储节点的第二阈值为2。

在一些实施例中,如图1C所示,多个存储节点包括主机h1上的存储节点A、主机h2上的存储节点B、主机h3上的存储节点C和D、主机h4上的存储节点E、主机h5上的存储节点F、主机h6上的存储节点G,其中,存储节点C和D位于同一主机h3。

在一些实施例中,可以根据实际情况确定多个复制组的数量为7,每个复制组所需存储节点的数量为3,承载每一复制组的至少一个存储节点中位于同一主机的存储节点的第二阈值为1。

利用贪心算法,得到分配结果,如下表1所示:

表1

从上表1可以看出,存储节点A、B、C、D、E、F和G均承载7个复制组中的3个复制组,即,存储节点A、B、C、D、E、F和G均衡地分配至7个不同的复制组,且在同一主机h3上的存储节点组中的存储节点C和D没有同时承载同一复制组的数据。

本申请实施例中,首先确定多个复制组和用于承载所述多个复制组的多个存储节点,然后根据所述多个复制组的数量和每个复制组所需存储节点的数量,将所述多个复制组中的每个复制组中的数据分配至所述多个存储节点中的至少一个存储节点,以使得所述多个存储节点中的各存储节点上承载的复制组的数量之间的差异小于第一阈值,且承载每一复制组的至少一个存储节点中位于同一主机的存储节点的数量小于第二阈值。这样,将多个存储节点中的各存储节点承载的复制组的数量之间的差异,可以有效满足分布式存储系统的负载均衡;承载每一复制组的至少一个存储节点中位于同一主机的存储节点的数量小于第二阈值,可以在任一复制组中的任一存储节点因为主机断网、断电、磁盘故障、误操作等不可以使用的情况下,其余不在同一主机上的存储节点可以继续正常工作,不会造成该复制组中数据的丢失。

本申请实施例提供的一种复制组的生成方法,如图2A所示,该方法包括:

步骤S201、确定多个复制组和用于承载所述多个复制组的多个存储节点,其中,每个复制组中的数据分布在承载复制组的存储节点上,所述多个存储节点位于多个主机上,所述多个主机中至少存在两个主机,所述两个主机上具有的存储节点的数量不同;

步骤S202、根据所述每个复制组所需存储节点的数量确定所述第二阈值;

在实施过程中,可以根据每个复制组所需存储节点的数量,有效确定属于同一主机的存储节点分配至同一复制组的第二阈值,以使得分配至复制组中的存储节点满足故障域的要求。举例来说,在每个复制组所需存储节点的数量为3的情况下,确定数量阈值为1,即,承载每一复制组的至少一个存储节点中位于同一主机的存储节点的数量小于1。

步骤S203、对所述多个存储节点中的各存储节点进行排序,得到候选节点列表;

在一些实施例中,可以将如图1C所示的主机h1上的存储节点A、主机h2上的存储节点B、主机h3上的存储节点C和D、主机h4上的存储节点E、主机h5上的存储节点F、主机h6上的存储节点G进行排序,得到候选节点列表ABCDEFG。

步骤S204、按照顺序将所述候选节点列表中排在首位的存储节点,确定为第一存储节点;

在一些实施例中,如图2B所示,需要基于候选节点列表ABCDEFG,生成7组复制组,每一复制组由3个存储节点承载。以生成复制组1为例,在生成复制组1节点列表中第一个存储节点,候选节点列表为ABCDEFG的情况下,将A确定为第一存储节点;在生成复制组1节点列表中第二个存储节点,候选节点列表为BCDEFGA的情况下,将B确定为第一存储节点;在生成复制组1节点列表中第三个存储节点,候选节点列表为CDEFGAB的情况下,将C确定为第一存储节点。

步骤S205、在确定所述当前复制组中与所述第一存储节点位于同一主机的存储节点的数量小于所述第二阈值的情况下,将所述当前复制组中的数据分配至所述第一存储节点;

在一些实施例中,如图2B所示,以生成复制组1为例,在生成复制组1节点列表中第二个存储节点,候选列表为BCDEFGA的情况下,需要判断第一存储节点B与已经生成的第一个存储节点A是否属于同一存储节点组,即判断存储节点B与存储节点A是否部署在同一主机上。

在一些实施例中,在确定所述当前复制组中与第一存储节点位于同一主机的存储节点的数量小于1的情况下,即,当前复制组中没有与第一存储节点位于同一主机的存储节点的情况下,如图2B所示,存储节点B与存储节点A分别部署在不同的主机上,可以将复制组1中的数据分配至存储节点B。

步骤S206、基于每个复制组所需存储节点的数量,确定所述第一存储节点为所述当前复制组中最后一个存储节点,且基于所述多个复制组的数量确定所述当前复制组为所述多个复制组中最后一个复制组的情况下,确定对各所述复制组完成存储节点分配。

在一些实施例中,如图2B所示,在生成复制组7的情况下,基于每个复制组所需存储节点的数量为3,可以确定存储节点G为复制组7的最后一个存储节点;基于多个复制组的数量为7,再确定复制组7为多个复制组中最后一个复制组的情况下,确定对7个复制组完成存储节点分配。

本申请实施例中,可以根据每个复制组所需存储节点的数量,有效确定属于同一主机的存储节点分配至同一复制组的第二阈值,以使得分配至的复制组中的存储节点满足故障域的要求,在任一复制组中的任一存储节点因为主机断网、断电、磁盘故障、误操作等不可以使用的情况下,其余不在同一主机上的存储节点可以继续正常工作,不会造成该复制组中数据的丢失。

本申请实施例中,多个存储节点中的各存储节点进行排序,得到候选节点列表;按照顺序将候选节点列表中排在首位的存储节点,确定为第一存储节点;在确定当前复制组中与所述第一存储节点位于同一主机的存储节点的数量小于所述第二阈值的情况下,将当前复制组中的数据分配至第一存储节点。这样,基于排序得到的候选节点列表可以将多个存储节点中的各存储节点均衡分配至每一复制组中,且使得分配至复制组中的存储节点满足故障域的要求。

本申请实施例中,基于每个复制组所需存储节点的数量,确定第一存储节点为当前复制组中最后一个存储节点,且基于多个复制组的数量确定当前复制组为多个复制组中最后一个复制组的情况下,确定对各复制组完成存储节点分配。这样,可以基于每个复制组所需存储节点的数量,确定是否完成每一复制组中存储节点的分配;基于多个复制组的数量确定对各复制组完成存储节点分配。

本申请实施例提供的一种复制组的生成方法,如图3所示,该方法包括:

步骤S301、确定多个复制组和用于承载所述多个复制组的多个存储节点,其中,每个复制组中的数据分布在承载复制组的存储节点上,所述多个存储节点位于多个主机上,所述多个主机中至少存在两个主机,所述两个主机上具有的存储节点的数量不同;

步骤S302、根据所述每个复制组所需存储节点的数量确定所述第二阈值;

步骤S303、将所述多个存储节点中各存储节点以随机顺序写入候选节点列表;

在一些实施例中,可以将多个存储节点以随机顺序写入候选节点列表,举例来说,可以将如图1C所示的存储在主机h1上的存储节点A、主机h2上的存储节点B、主机h3上的存储节点C和D、主机h4上的存储节点E、主机h5上的存储节点F、主机h6上的存储节点G进行随机排序,得到例如ABCDEFG、EFABCDG等以随机排序得到的候选节点列表。

步骤S304、基于已承载复制组的各存储节点上承载的复制组的数量,将所述承载的复制组的数量最小的存储节点排在所述候选节点列表的首位;

候选节点列表中,可以记录每个存储节点已经承载的复制组的数量。在进行存储节点选择的情况下,可以按着每个存储节点出现在复制组中的数量从小到大的顺序,依次尝试排在候选节点列表的首位。

步骤S305、确定所述候选节点列表中排在首位的存储节点为第一存储节点;

步骤S306、在确定所述当前复制组中与所述第一存储节点位于同一主机的存储节点的数量小于所述第二阈值的情况下,将所述当前复制组中的数据分配至所述第一存储节点;

步骤S307、在将所述第一存储节点分配至所述当前复制组后,将所述第一存储节点移至所述候选节点列表的末位,得到更新的候选节点列表;

在一些实施例中,如图2B所示,需要基于候选节点列表ABCDEFG,生成7组复制组,每一复制组由3个存储节点承载。以生成复制组1为例,在将第一存储节点A分配至复制组1后,将存储节点A移至候选节点列表的末位,得到更新的候选节点列表为BCDEFGA。

步骤S308、基于每个复制组所需存储节点的数量,确定所述第一存储节点为所述当前复制组中最后一个存储节点,且基于所述多个复制组的数量确定所述当前复制组为所述多个复制组中最后一个复制组的情况下,确定对各所述多个复制组完成存储节点分配。

本申请实施例中,候选节点列表中可以记录每个存储节点已经承载的复制组的数量。在进行存储节点选择的情况下,可以按着每个存储节点出现在复制组中的数量从小到大的顺序,依次尝试排在候选节点列表的首位,以满足分布式存储系统的负载均衡。

本申请实施例中,将多个存储节点中各存储节点以随机顺序写入候选节点列表,使用该候选节点列表也可以有效生成满足负载均衡和故障域要求的多个复制组。

本申请实施例提供的一种复制组的生成方法,该方法包括:

步骤321、确定多个复制组和用于承载所述多个复制组的多个存储节点,其中,每个复制组中的数据分布在承载复制组的存储节点上,所述多个存储节点位于多个主机上,所述多个主机中至少存在两个主机,所述两个主机上具有的存储节点的数量不同;

步骤322、对所述多个存储节点中的各存储节点进行排序,得到候选节点列表;

步骤323、按照顺序将所述候选节点列表中排在首位的存储节点,确定为第一存储节点;

步骤324、在确定所述当前复制组中与所述第一存储节点位于同一主机的存储节点的数量等于所述第二阈值的情况下,按照顺序将所述候选节点列表中排在第二位的存储节点,确定为所述第一存储节点;

在一些实施例中,如图2B所示,在生成复制组4的第二个存储节点的情况下,确定候选节点列表DEFGAB中的第一存储节点D与复制组4中的第一个存储节点C属于同一存储节点组,即,确定复制组4中与存储节点D位于同一主机的存储节点的数量等于1,可以按照顺序将候选节点列表DEFGAB中排在第二位的存储节点E,确定为第一存储节点。

步骤325、在确定所述第一存储节点与所述当前复制组中位于同一主机的存储节点的数量小于所述第二阈值的情况下,将所述第一存储节点分配至所述当前复制组;

在一些实施例中,如图2B所示,在生成复制组4的第二个存储节点的情况下,在判断第一存储节点E与复制组4中的第一个存储节点C不属于同一存储节点组的情况下,将E分配至复制组4。

步骤326、基于每一复制组所需存储节点的数量,确定所述第一存储节点不为所述当前复制组中最后一个存储节点的情况下,将所述第一存储节点移至所述候选节点列表的末位,将所述候选节点列表中排在第一位的存储节点的位置固定在所述候选节点列表的第一位,得到更新的候选节点列表;

在一些实施例中,如图2B所示,在生成复制组4的第二个存储节点E的情况下,将存储节点D固定在候选节点列表的第一位,得到更新的候选节点列表DFGABCE。同样,在在生成复制组4的第三个存储节点F的情况下,将存储节点D固定在候选节点列表的第一位,得到更新的候选节点列表DGABCEF。

步骤327、按照顺序将所述更新的候选节点列表中排在首位的存储节点,确定为所述第一存储节点,直至完成所述当前复制组的存储节点分配;

在判断所述第一存储节点与所述当前复制组中属于同一所述存储节点组的存储节点的数量小于所述第二阈值的情况下,将所述第一存储节点分配至所述当前复制组;基于每一所述复制组中存储节点的数量,确定所述第一存储节点为所述当前复制组中最后一个存储节点,确定对所述当前复制组完成存储节点分配。

在一些实施例中,如图2B所示,在生成复制组5的第一个存储节点的情况下,将更新的候选节点列表DGABCEF中排在首位的存储节点D确定为第一存储节点。在生成复制组5的第二个存储节点的情况下,在判断所述第一存储节点G与复制组5中的存储节点D不属于同一所述存储节点组的情况下,将所述第一存储节点G分配至复制组5。在生成复制组5的第三个存储节点的情况下,在判断所述第一存储节点A与复制组5中的存储节点D和G不属于同一所述存储节点组的情况下,将所述第一存储节点A分配至复制组5,以完成复制组5的存储节点分配。

步骤328、基于所述多个复制组的数量确定所述当前复制组不为所述多个复制组中最后一个复制组的情况下,将所述第一存储节点移至所述候选节点列表的末位,得到更新的候选节点列表;

在一些实施例中,如图2B所示,基于多个复制组的数量为7,在确定复制组1中不为7个复制组中最后一个复制组的情况下,将所述第一存储节点C移至所述候选节点列表的末位,得到更新的候选节点列表DEFGABC。

步骤329、按照顺序将所述更新的候选节点列表中排在首位的存储节点,确定为所述第一存储节点,

直至完成所述多个复制组中最后一个复制组的存储节点分配;

在判断所述第一存储节点与所述当前复制组中属于同一所述存储节点组的存储节点的数量小于所述第二阈值的情况下,将所述第一存储节点分配至所述当前复制组;基于所述多个复制组的数量确定所述当前复制组为所述多个复制组中最后一个复制组的情况下,确定对各所述复制组完成存储节点分配。

在一些实施例中,如图2B所示,基于复制组的数量为7,确定复制组7为多个复制组中最后一个复制组的情况下,确定对7个复制组完成存储节点分配。

本申请实施例中,在确定第一存储节点与待分配的当前复制组已分配的其他任意一个存储节点属于同一存储节点组,且当前复制组中与第一存储节点属于同一存储节点组的存储节点的数量等于所述第二阈值的情况下,按照顺序将候选节点列表中排在第二位的存储节点,确定为所述第一存储节点,这样,可以有效避免同一个复制组中属于同一主机的存储节点的数量大于数量阈值,以满足复制组对故障域的要求。

本申请实施例中,基于每一复制组所需存储节点的数量,确定第一存储节点不为所述当前复制组中最后一个存储节点的情况下,更新候选节点列表,继续分配存储节点给待分配的复制组,直到满足复制组所需的存储节点数量要求。

本申请实施例中,基于所述多个复制组的数量确定当前复制组不为多个复制组中最后一个复制组的情况下,更新候选节点列表,继续分配存储节点至多个复制组中剩余的复制组,直到满足多个复制组中的复制组数量要求。

分布式存储系统将数据存储在不同的存储节点中。由于断网、断电、磁盘故障、误操作等事件,会出现部分存储节点的数据丢失或者不可用的问题。为了保证数据的安全性和可用性,容错是分布式系统的重要特性。

通常通过在系统中存储冗余数据来实现容错,例如,使用副本方案将相同数据的不同副本存储在一个复制组中的所有存储节点上。

由于存储系统中有多个存储节点,确定某数据的数据分布(将副本具体存储在哪些存储节点上),是分布式存储系统的关键问题。

如图1B所示,每份数据都会被存储在某一个复制组(包括存储节点21、32和42)中。这样,数据就被存储在该复制组中的每个存储节点上。

分布式存储系统中通常有若干个复制组。确定复制组中的节点列表通常有两种方式:

方式一、基于计算的方式:具有代表性的有Ceph的CRUSH算法,DHT等。这些系统以集群拓扑为输入,能够计算出每个复制组中的存储节点列表。基于计算的系统,往往会造成不同的节点属于不同数目个复制组,从而会造成负载不均的问题。除此之外,DHT对于故障域的支持(例如,要求复制组中的节点都不属于同一主机)不够友好。

方式二、基于查表的方式:复制组对应的存储节点列表存储在元数据服务器中,访问数据前需要对复制组的节点列表进行查询。基于查表方式时,需要决定复制组中的存储节点列表。决定节点列表的常用算法有随机算法和轮询调度算法(Round-Robin)。随机算法和基于计算的方式一样,会造成负载不均的问题。Round-Robin算法在同构集群表现较好,但是在异构算法和特殊参数情况下也较难同时满足负载均衡和故障域的需求。

基于查表方式的复制组的节点列表,需要满足两个条件:

条件一、满足故障域需求:例如,冗余策略容复制组中单节点故障,分布式存储系统容单主机故障的复制组,需要满足复制组中的每个存储节点都分布在不同的主机上。

条件二、在满足条件一的前提下,同故障域中各存储节点应该能够达到负载均衡(各存储节点属于的故障域数目最多相差1)。如果无法满足各存储节点负载均衡,则必须满足每主机内的存储节点间达到负载均衡。

本申请实施例使用贪心算法解决复制组存储节点的选择问题,需要维护以下数据结构:1、候选节点列表:初始状态为任意顺序的包含各存储节点的列表;2、每一复制组对应的存储节点列表:初始为空,算法运行完之后为返回结果。

图4A为本申请实施例提供的一种生成所有复制组流程示意图,如图4A所示,生成所有复制组的过程包括以下步骤:

步骤S401、初始化候选节点列表;

在一些实施例中,可以以任意顺序将集群中的所有存储节点插入候选节点列表。

步骤S402、判断所有复制组是否已生成完;

在确定所有复制组已生成完的情况下,流程结束;在确定所有复制组为已生成完的情况下,转至步骤S403。

步骤S403、依次生成每一复制组对应的存储节点列表。

在一些实施例中,可以根据实际需求确定复制组存储节点列表中复制组的数量,再依次生成复制组存储节点列表中的每一复制组对应的多个存储节点。在确定复制组存储节点列表中,已经完成了所有复制组生成的情况下,确定流程结束。

本申请实施例中,首先以任意顺序将集群中的所有存储节点插入候选节点列表,然后在确定复制组存储节点列表中,已经完成了所有复制组生成的情况下,确定流程结束。这样,可以获得满足复制组数量要求的复制组存储节点列表。

图4B为本申请实施例提供的一种生成任一复制组的流程示意图,如图4B所示,生成任一复制组的过程包括以下步骤:

步骤S411、初始化存储节点列表为空;

步骤S412、确定存储节点列表的长度是否小于每一复制组中的存储节点数量;

在一些实施例中,可以根据实际需求设置每一复制组中的存储节点数量。这里,每一复制组中的存储节点数量决定了存储节点列表的长度。在确定存储节点列表的长度小于节点数目的情况下,转至执行步骤S413;在确定存储节点列表的长度等于节点数目的情况下,转至步骤S416,即,完成对一个复制组中存储节点的分配。

步骤S413、确定候选节点列表中第1个存储节点是否违反故障域要求;

在一些实施例中,候选节点列表是以任意顺序排列的用于配置复制组的所有存储节点。违反故障域要求的判断可以是,例如,在同一复制组中分配3个存储节点的情况下,不能有多于一个节点属于同一主机,即,当该复制组的节点列表中,同一主机的存储节点数目超过1时,则说明违反了故障域要求。

当采用更高的副本数时,故障域要求会变成“同一复制组内,不能有多于m(m≥1)个节点属于同一主机”,即,此时的故障域判断需要根据实际情况做相应改变。

在确定候选节点列表中第1个存储节点不违反故障域要求的情况下,转至执行步骤S414;在确定候选节点列表中第1个存储节点违反故障域要求的情况下,转至执行步骤S415。

步骤S414、将候选节点列表中的第1个节点加入存储节点列表,并将其移动至候选节点列表最后;

在进行节点选择时,可以按着每个节点出现在各复制组中的数目从小到大的顺序,依次尝试加入存储节点列表。

步骤S415、将候选节点列表中第2个存储节点作为待加入存储节点列表中的存储节点;

在一些实施例中,可以将候选节点列表中第1个存储节点保持在第一的位置,将候选节点列表中第2个存储节点作为待加入存储节点列表中的存储节。在将第2个存储节点加入复制组后,将其移动至候选节点列表最后。可以保证被跳过的节点(第一存储节点),在下一个复制组的节点选择时,还可以优先被选择,避免出现负载不均的状况。

步骤S416、结束,返回节点列表。

本申请实施例中,描述了在确定多个复制组中每一复制组数量的情况下,如何基于候选节点列表将用于配置复制组的存储节点合理分配至复制组。这样,可以在任意异构集群的配置中,达到上述的故障域和负载均衡的需求。确定纠删码中复制组的存储节点,也可以使用本申请实施例提供的方法。

基于前述的实施例,本申请实施例提供一种复制组的生成装置,该装置包括所包括的各模块,各模块包括各子模块,各子模块包括单元,可以通过电子设备中的处理器来实现;当然也可通过具体的逻辑电路实现;在实施的过程中,处理器可以为中央处理器(CPU)、微处理器(MPU)、数字信号处理器(DSP)或现场可编程门阵列(FPGA)等。

图5为本申请实施例提供的复制组的生成装置的组成结构示意图,如图5所示,所述装置500包括:

第一确定模块501,用于确定多个复制组和用于承载所述多个复制组的多个存储节点,其中,每个复制组中的数据分布在承载复制组的存储节点上,所述多个存储节点位于多个主机上,所述多个主机中至少存在两个主机,所述两个主机上具有的存储节点的数量不同;

分配模块502,用于根据所述多个复制组的数量和每个复制组所需存储节点的数量,将所述多个复制组中的每个复制组中的数据分配至所述多个存储节点中的至少一个存储节点,以使得所述多个存储节点中的各存储节点上承载的复制组的数量之间的差异小于第一阈值,且承载每一复制组的至少一个存储节点中位于同一主机的存储节点的数量小于第二阈值。

在一些实施例中,所述分配模块502包括排序子模块、第一确定子模块、第一分配子模块和第二确定子模块,其中,所述排序子模块,用于对所述多个存储节点中的各存储节点进行排序,得到候选节点列表;所述第一确定子模块,用于按照顺序将所述候选节点列表中排在首位的存储节点,确定为第一存储节点;所述第一分配子模块,用于在确定所述当前复制组中与所述第一存储节点属于同一主机的存储节点的数量小于所述第二阈值的情况下,将所述当前复制组中的数据分配至所述第一存储节点;所述第二确定子模块,用于基于每个复制组所需存储节点的数量,确定所述第一存储节点为所述当前复制组中最后一个存储节点,且基于所述多个复制组的数量确定所述当前复制组为所述多个复制组中最后一个复制组的情况下,确定对各所述复制组完成存储节点分配。

在一些实施例中,所述第一确定子模块包括排列单元和确定单元,其中,所述排列单元,用于基于已承载复制组的各存储节点上承载的复制组的数量,将所述承载的复制组的数量最小的存储节点排在所述候选节点列表的首位;所述确定单元,用于确定所述候选节点列表中排在首位的存储节点为第一存储节点。

在一些实施例中,所述排序子模块,还用于将所述多个存储节点中各存储节点以随机顺序写入候选节点列表。所述分配模块502还包括移动子模块,用于在将所述第一存储节点分配至所述当前复制组后,将所述第一存储节点移至所述候选节点列表的末位,得到更新的候选节点列表。

在一些实施例中,所述分配模块502还包括:第三确定子模块、第二分配子模块和第一更新子模块,其中,所述第三确定子模块,用于在确定所述当前复制组中与所述第一存储节点位于同一主机的存储节点的数量等于所述第二阈值的情况下,按照顺序将所述候选节点列表中排在第二位的存储节点,确定为所述第一存储节点;所述第二分配子模块,用于在确定所述第一存储节点与所述当前复制组中位于同一主机的存储节点的数量小于所述第二阈值的情况下,将所述第一存储节点分配至所述当前复制组;所述第一更新子模块,用于将所述第一存储节点移至所述候选节点列表的末位,将所述候选节点列表中排在第一位的存储节点的位置固定在所述候选节点列表的第一位,得到更新的候选节点列表。

在一些实施例中,所述分配模块502还包括:第二更新子模块和第四确定子模块,其中,所述第二更新子模块,用于基于每一所述复制组所需存储节点的数量,确定所述第一存储节点不为所述当前复制组中最后一个存储节点的情况下,将所述第一存储节点移至所述候选节点列表的末位,得到更新的候选节点列表;所述第四确定子模块,用于按照顺序将所述更新的候选节点列表中排在首位的存储节点,确定为所述第一存储节点,直至完成所述当前复制组的存储节点分配。

在一些实施例中,所述分配模块502还包括:第三更新子模块和第五确定子模块,其中,所述第三更新子模块,用于基于所述多个复制组的数量确定所述当前复制组不为所述多个复制组中最后一个复制组的情况下,将所述第一存储节点移至所述候选节点列表的末位,得到更新的候选节点列表;所述第五确定子模块,用于按照顺序将所述更新的候选节点列表中排在首位的存储节点,确定为所述第一存储节点,直至完成所述多个复制组中最后一个复制组的存储节点分配。

在一些实施例中,所述装置还包括第二确定模块,用于根据所述每个复制组所需存储节点的数量确定所述第二阈值。

以上装置实施例的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果。对于本申请装置实施例中未披露的技术细节,请参照本申请方法实施例的描述而理解。

需要说明的是,本申请实施例中,如果以软件功能模块的形式实现上述的复制组的生成方法,并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得电子设备(可以是手机、平板电脑、笔记本电脑、台式计算机等)执行本申请各个实施例所述方法的全部或部分。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ReadOnly Memory,ROM)、磁碟或者光盘等各种可以存储程序代码的介质。这样,本申请实施例不限制于任何特定的硬件和软件结合。

对应地,本申请实施例提供一种电子设备,图6为本申请实施例提供的电子设备的一种硬件实体示意图,如图6所示,该设备600的硬件实体包括:包括存储器601和处理器602,所述存储器601存储有可在处理器602上运行的计算机程序,所述处理器602执行所述程序时实现上述实施例中提供的复制组的生成方法中的步骤。

存储器601配置为存储由处理器602可执行的指令和应用,还可以缓存待处理器602以及电子设备600中各模块待处理或已经处理的数据(例如,图像数据、音频数据、语音通信数据和视频通信数据),可以通过闪存(FLASH)或随机访问存储器(Random AccessMemory,RAM)实现。

对应地,本申请实施例提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述实施例中提供的复制组的生成方法中的步骤。

这里需要指出的是:以上存储介质和设备实施例的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果。对于本申请存储介质和设备实施例中未披露的技术细节,请参照本申请方法实施例的描述而理解。

应理解,说明书通篇中提到的“一个实施例”或“一实施例”意味着与实施例有关的特定特征、结构或特性包括在本申请的至少一个实施例中。因此,在整个说明书各处出现的“在一个实施例中”或“在一实施例中”未必一定指相同的实施例。此外,这些特定的特征、结构或特性可以任意适合的方式结合在一个或多个实施例中。应理解,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。

需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。

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

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

另外,在本申请各实施例中的各功能单元可以全部集成在一个处理单元中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。

本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、只读存储器(Read Only Memory,ROM)、磁碟或者光盘等各种可以存储程序代码的介质。

或者,本申请上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得电子设备(可以是手机、平板电脑、笔记本电脑、台式计算机等)执行本申请各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储设备、ROM、磁碟或者光盘等各种可以存储程序代码的介质。

本申请所提供的几个方法实施例中所揭露的方法,在不冲突的情况下可以任意组合,得到新的方法实施例。

本申请所提供的几个产品实施例中所揭露的特征,在不冲突的情况下可以任意组合,得到新的产品实施例。

本申请所提供的几个方法或设备实施例中所揭露的特征,在不冲突的情况下可以任意组合,得到新的方法实施例或设备实施例。

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

相关技术
  • 样本存储路径生成方法、装置、计算机设备及存储介质
  • 一种浴室加热装置和用于控制浴室加热装置的方法、设备、电子设备及计算机可读存储介质
  • 动态表情生成方法、装置、计算机可读存储介质和计算机设备
  • 图像生成方法和装置、计算机设备和计算机存储介质
  • 一种文件复制方法、装置、设备及存储介质
  • 医学知识组的生成方法、装置、计算机设备和存储介质
  • 车道组编号生成方法、装置、计算机设备和存储介质
技术分类

06120115761621