一种心跳连接的建立方法及装置与流程

文档序号:21777655发布日期:2020-08-07 19:45阅读:180来源:国知局
一种心跳连接的建立方法及装置与流程

本申请涉及存储领域,特别涉及一种心跳连接的建立方法及装置。



背景技术:

为了维护分布式存储系统(ceph)集群的稳定、可靠的运行,在ceph集群中,针对每个存储节点中的每个对象存储设备(objectstoragedevice,osd),会根据自身配置的心跳连接的条数,例如,配置10条心跳连接,随机与配置的条数个其他osd建立心跳连接,这里的其他osd可能是该osd所属存储节点中的其他osd,也可能是其他存储节点中的osd。

在ceph集群运行过程中,该osd会发心跳报文给其他osd,也会监听其他osd发过来的心跳报文,一旦在一定时间段内没有收到和自己建立心跳连接的osd的心跳报文,该osd会上报给ceph集群中的监视器(monitor),由monitor根据收到的该osd的异常报告信息综合判定该osd是否异常,并进行后续处理。

然而,在实际应用中,在ceph集群规模较大的情况下,上述这种心跳连接的建立方式,需要建立非常多的心跳连接,导致osd的通信负载较重。



技术实现要素:

本申请提供一种心跳连接的建立方法及装置,可大大减轻ceph集群中osd的通信负载。

本申请提供的技术方案如下:

本申请提供一种心跳连接的建立方法,所述方法应用于ceph集群中的监视器,所述方法包括:

根据ceph集群的osd拓扑信息,构建多个由osd组成的心跳连接环,每个心跳连接环上的每个osd均从所述ceph集群中不同的存储节点中的osd中选择;

将每个心跳连接环上的每个osd的邻居osd分别发送给每个osd,以使每个osd分别与其邻居osd建立心跳连接。

本申请还提供一种心跳连接的建立装置,所述装置应用于ceph集群中的监视器,所述装置包括:

构建模块,用于根据ceph集群的osd拓扑信息,构建多个由osd组成的心跳连接环,每个心跳连接环上的每个osd均从所述ceph集群中不同的存储节点中的osd中选择;

发送模块,用于将每个心跳连接环上的每个osd的邻居osd分别发送给每个osd,以使每个osd分别与其邻居osd建立心跳连接。

由以上技术方案可以看出,在ceph集群中,提供了一种新的建立osd之间的心跳连接的机制,在此机制中,每个心跳连接环上的osd均来自不同的存储节点,避免了同一存储节点中的osd之间建立心跳连接,可大大减少心跳连接的建立条数,进而减轻了osd的通信负载。

附图说明

图1为本申请实施例提供的一种心跳连接的建立方法的流程示意图;

图2为本申请实施例提供的基于ceph集群建立的心跳连接环的示意图之一;

图3为本申请实施例提供的基于ceph集群建立的心跳连接环的示意图之二;

图4为本申请实施例提供的基于ceph集群建立的心跳连接环的示意图之三;

图5为本申请实施例提供的基于ceph集群建立的心跳连接环的示意图之三中osd1异常时的示意图;

图6为本申请实施例提供的基于ceph集群建立的心跳连接环的示意图之三中osd11异常时的示意图;

图7为本申请实施例提供的新增osd时的处理流程示意图;

图8为本申请实施例提供的基于ceph集群建立的心跳连接环的示意图之二中新增osd时的示意图;

图9为本申请实施例提供的基于ceph集群建立的心跳连接环的示意图之二中删除osd时的示意图;

图10为本申请实施例提供的一种心跳连接的建立装置的结构示意图。

具体实施方式

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

本申请实施例提供了一种心跳连接的建立方法,如图1所示,该方法应用于ceph集群中的monitor,该方法可以包括如下步骤:

s11:根据ceph集群的osd拓扑信息,构建多个由osd组成的心跳连接环,每个心跳连接环上的每个osd均从ceph集群中不同的存储节点中的osd中选择。

优选地,在本申请实施例中,monitor可以通过以下方式构建心跳连接环:

根据ceph集群的osd拓扑信息,判断所有存储节点中的osd的总数量是否均相同;

若是,将每个存储节点中的每个osd分别与其他存储节点中的一个未被构建过心跳连接环的osd构建一个第一心跳连接环,其中,不同的第一心跳连接环上的osd均不相同;

否则,根据每个存储节点中的osd,构建m个第一心跳连接环和n个第二心跳连接环;

其中,n个心跳连接环上的osd中部分osd为复用的各自所属存储节点中已构建过心跳连接环的osd;

m的取值为osd的数量最少的存储节点中所有osd的总数量;

n的取值为osd的数量最多的存储节点中所有osd的总数量与osd的数量最少的存储节点中所有osd的总数量的差值。

需要说明的是,本申请实施例中,在构建第一心跳连接环时,可以优选处于同一归置组(placementgroup,pg)中的osd。例如,如图2所示,假设ceph集群中有3个存储节点,分别为存储节点a、存储节点b和存储节点c,每个存储节点包括的osd如图2所示。在这种架构下,所有存储节点中osd的总数量相同,构建的第一心跳连接环可以是如图2所示的心跳连接环。当然,图2仅为一种不同存储节点中不同osd组合构建心跳连接环的示例,其他示例不再一一列举。

又例如,如图3所示,假设ceph集群中有3个存储节点,分别为存储节点d、存储节点e和存储节点f,每个存储节点包括的osd如图3所示。在这种架构下,所有存储节点中osd的总数量不全部相同,构建的第一心跳连接环和第二心跳连接环可以是如图3所示的心跳连接环。其中,共构建了4个第一心跳连接环和1个第二心跳连接环,第一心跳连接环的数量为osd数量最少的存储节点c中所有osd的总数量;第二心跳连接环上的osd3为复用的osd,且第二心跳连接环的数量为osd的数量最多的存储节点(存储节点a和存储节点b)中所有osd的总数量(5个)与osd的数量最少的存储节点(存储节点c)中所有osd的总数量(4个)的差值。当然,图3仅为一种不同存储节点中不同osd组合构建心跳连接环的示例,其他示例不再一一列举。

s12:将每个心跳连接环上的每个osd的邻居osd分别发送给每个osd,以使每个osd分别与其邻居osd建立心跳连接。

可见,在本申请实施例中,在ceph集群中,提供了一种新的建立osd之间的心跳连接的机制,在此机制中,每个心跳连接环上的osd均来自不同的存储节点,避免了同一存储节点中的osd之间建立心跳连接,可大大减少心跳连接的建立条数,进而减轻了osd的通信负载。

进一步地,在本申请实施例中,本申请还提供了在新的心跳连接建立机制下ceph集群中osd异常、新增osd、新增存储节点、osd被删除以及存储节点被删除时的处理流程,以确保ceph集群业务正常运行。

下面针对每种情形下的处理流程进行详细说明。

第一种情形、ceph集群中osd异常

在这种情形下,monitor可以执行以下操作:

针对ceph集群中的每个心跳连接环,如果确定出该心跳连接环未被标记为用于表征心跳连接环上osd数量减少的降级状态且发生异常的osd的数量不小于该心跳连接环上所有osd的总数量的一半,或者确定出该心跳连接环被标记为降级状态且发生异常的osd的累计数量不小于该心跳连接环上所有osd的总数量的一半,则通知该心跳连接环上未发生异常的osd断开与其邻居osd之间的连接,并删除该心跳连接环;

如果确定出该心跳连接环未被标记为降级状态且发生异常的osd的数量小于该心跳连接环上所有osd的总数量的一半,或者确定出该心跳连接环被标记为降级状态且发生异常的osd的累计数量小于该心跳连接环上所有osd的总数量的一半,则判断该心跳连接环上其他未发生异常的osd是否均为复用的osd;

若是,则删除该心跳连接环;

否则,进一步判断该心跳连接环上当前发生异常的osd所属的存储节点中是否存在复用次数不大于设定阈值的osd;

在判断结果为是时,从复用次数不大于设定阈值的osd中选择一个osd替换当前发生异常的osd,并分别通知该心跳连接环上当前发生异常的osd的邻居osd重新与替换后的osd建立心跳连接;

在判断结果为否时,如果该心跳连接环上未发生异常前所有osd的总数量为3个,通知该心跳连接环上当前发生异常的osd的邻居osd彼此建立心跳连接,并将该心跳连接环标记为降级状态;

如果该心跳连接环上未发生异常前所有osd的总数量大于3个且该心跳连接环未被标记为降级状态,在当前发生异常的osd的邻居osd均正常时,通知当前发生异常的osd的邻居osd彼此建立心跳连接,在当前发生异常的osd为至少两个相邻的osd时,通知该心跳连接环上至少两个相邻发生异常的osd中邻居osd为正常的osd彼此建立心跳连接,并将该心跳连接环标记为降级状态;

如果该心跳连接环上未发生异常前所有osd的总数量大于3个且该心跳连接环被标记为降级状态,在当前发生异常的osd的邻居osd均正常时,通知当前发生异常的osd的邻居osd彼此建立心跳连接,在当前发生异常的osd为至少两个相邻的osd时,通知该心跳连接环上至少两个相邻发生异常的osd中邻居osd为正常的osd彼此建立心跳连接。

在此操作流程中,在本申请实施例中,对于任意一个心跳连接环上单个osd发生异常的情况,monitor可根据该心跳连接环上该osd的两个邻居osd上报的异常报告信息来判定;对于任意一个心跳连接环上多个相邻osd发生异常的情况,monitor可根据周期性查询心跳连接环上的osd来发现。一旦发现异常,monitor会更新osd拓扑信息,并将异常信息扩散到整个ceph集群。

并且,为了避免ceph集群存储不可访问,对初始构建的心跳连接环上累计发生异常的osd的数量进行了限制,即,必须小于该心跳连接环上所有osd的总数量的一半,如果不满足这个条件,按照以上相关操作撤销该心跳连接环;如果满足这个条件,再进一步判定能否替换该心跳连接环上当前发生异常的osd,以继续进行心跳监测。

在具体判定时,如果该心跳连接环上除当前发生异常的osd之外的osd均为复用的osd,一旦当前发生异常的osd被替换成复用的osd,该心跳连接环上所有的osd全部是复用的osd了,由于这些osd在其他心跳连接环上监测着心跳,所以,为了减轻osd的通信负载,没必要再维护,在这种情况下,删除该心跳连接环即可。

另外,为了避免多次复用任一osd,增加该osd的通信负载,本申请对复用osd的复用次数进行了限制,即,必须不大于设定阈值,此设定阈值可根据ceph集群的实际情况设定。

例如,如图4所示,假设ceph集群中有5个存储节点,分别为存储节点h、存储节点i、存储节点j、存储节点k和存储节点l,每个存储节点包括的osd如图4所示,假设这些osd的复用次数每个存储构建的心跳连接环如图4所示。

在这种架构下,初始时,所有心跳连接环均未被标记为降级状态,假设osd1所在的心跳连接环上的osd1发生异常,该心跳连接环上的其他osd未发生异常,那么,对于该心跳连接环,发生异常的osd的数量(即,1个)小于该心跳连接环上所有osd的总数量的一半(2.5个),此时,进一步判断该心跳连接环上其他未发生异常的osd是否均为复用的osd,由于该心跳连接环上其他未发生异常的osd均不是复用的osd,再进一步判断存储节点h中是否存在复用次数不大于设定阈值的osd。

假设存储节点h中除osd1之外的osd的复用次数均小于设定阈值,此时的判断结果为是,monitor从osd6和osd11中选择一个osd替换osd1,假设选择了osd6,通知osd1的邻居osd(即,osd2和osd5)重新与osd6建立心跳连接,建立好的心跳连接环如图5所示。

之后,假设osd11所在的心跳连接环上的osd11发生异常,该心跳连接环上的其他osd未发生异常,那么,对于该心跳连接环,发生异常的osd的数量(即,1个)小于该心跳连接环上所有osd的总数量的一半(2.5个),此时,进一步判断该心跳连接环上其他未发生异常的osd是否均为复用的osd,由于该心跳连接环上其他未发生异常的osd均是复用的osd,所以删除该心跳连接环,如图6所示。

需要说明的是,对于此操作流程中其他情形下对心跳连接关系的调整不再一一举例。需要注意的是,对于被标记为降级状态的心跳连接环,其上发生异常的osd的累计数量是从该心跳连接环被初始构建时开始累计。

第二种情形、ceph集群中存储节点中新增至少一个osd

在这种情形下,如图7所示,monitor可以执行以下步骤:

s71:判断新增的osd中是否存在与被标记为降级状态的心跳连接环上减少的osd处于同一存储节点的第一osd,在判断结果为否时,执行步骤s72;在判断结果为是时,执行步骤s81。

s72:判断新增的osd中是否存在与复用的osd处于同一存储节点的第二osd,在判断结果为否时,执行步骤73;在判断结果为是时,执行步骤s80。

s73:判断新增的osd中是否存在能够构建新的第一心跳连接环的第三osd,在判断结果为是时,执行步骤s74;在判断结果为否时,将新增的osd作为第四osd,执行步骤s75;

s74:根据第三osd构建新的第一心跳连接环,并将新的第一心跳连接环上的每个第三osd的邻居osd分别发送给每个第三osd,以使每个第三osd分别与其邻居osd建立心跳连接。

s75:若新增的osd中还有剩余的第四osd,判断当前的所有心跳连接环中是否存在第二心跳连接环,在在判断结果为否时,执行步骤s76;在判断结果为是时,执行步骤s77。

s76:根据第四osd构建新的第二心跳连接环,并将新的第二心跳连接环上的每个第四osd的邻居osd分别发送给每个第四osd,以使每个第四osd分别与其邻居osd建立心跳连接;

s77:判断同一存储节点中复用的osd的数量是否不小于该存储节点中第四osd的第二数量,在判断结果为是时,执行步骤s78;在判断结果为否时,执行步骤s79。

s78:从该存储节点中选择q个不同的第四osd替换不同的复用的osd,分别通知q个复用的osd的邻居osd重新与替换后的第四osd建立心跳连接,并在新增的osd中仍有剩余的第四osd时,根据当前剩余的第四osd构建新的第二心跳连接环,并将新的第二心跳连接环上的每个第四osd的邻居osd分别发送给每个第四osd,以使每个第四osd分别与其邻居osd建立心跳连接,其中,q的取值为该存储节点中所有第四osd的总数量;

s79:从该存储节点中选择不同的第四osd替换所有不同的复用的osd,分别通知所有的复用的osd的邻居osd重新与替换后的第四osd建立心跳连接,并在新增的osd中仍有剩余的第四osd时,根据当前剩余的第四osd构建新的第二心跳连接环,将新的第二心跳连接环上的每个第四osd的邻居osd分别发送给每个第四osd,以使每个第四osd分别与其邻居osd建立心跳连接。

s80:若同一存储节点中复用的osd的数量不大于第二osd的数量,从该存储节点中选择不同的第二osd替换所有不同的复用的osd,分别通知所有的复用的osd的邻居osd重新与替换后的第二osd建立心跳连接,并在新增的osd中还有剩余的osd时,根据剩余的osd构建新的心跳连接环,将新的心跳连接环上的每个osd的邻居osd分别发送给每个osd,以使每个osd分别与其邻居osd建立心跳连接;

若同一存储节点中复用的osd的数量大于第二osd的数量,从该存储节点中选择s个不同的第二osd替换不同的复用的osd,分别通知s个复用的osd的邻居osd重新与替换后的第二osd建立心跳连接,并在新增的osd中还有剩余的osd时,根据剩余的osd构建新的心跳连接环,将新的心跳连接环上的每个osd的邻居osd分别发送给每个osd,以使每个osd分别与其邻居osd建立心跳连接,其中,s的取值为该存储节点中所有第二osd的总数量。

s81:将第一osd恢复到该心跳连接环上,并在新增的osd还有剩余的osd时,执行步骤s72。

例如,仍以图3所示的ceph集群架构为例,假设新增了部分osd,如图8所示,假设没有降级状态的心跳连接环,那么,执行上述步骤s72,由于新增的osd15和osd18均与复用的osd3处于存储节点f中,再执行上述步骤s81,由于复用的osd的数量(即,1个)小于存储节点f中新增的osd的数量(即,2个),从osd15和osd18中选择一个替换osd3,假设选择了osd15,分别通知osd3的邻居osd(即,osd13和osd14)重新与osd15建立心跳连接,如图8所示。

由于新增的osd还有剩余,继续按照以上流程构建新的心跳连接环,新的心跳连接环可以如图8所示,具体构建时,可以将剩余的osd作为全新ceph集群中的osd,构建心跳连接环。

需要说明的是,在这种情形下,如果发生异常的osd恢复正常,可以将该osd认为是新增的osd。

在上述步骤s81中,将第一osd恢复到该心跳连接环上,具体恢复过程可以为:若第一osd中存在未发生异常前的邻居osd均正常的第一osd,针对这种情况下的任意一个第一osd,通知一对重新建立心跳连接的osd重新与该第一osd建立心跳连接;若第一osd中存在至少两个未发生异常前相邻的第一osd,重新确定至少两个未发生异常前相邻的第一osd和一对重新建立心跳连接的osd的邻居关系,分别通知互为邻居的osd之间重新建立心跳连接。

第三种情形、ceph集群中至少一个osd被删除

在这种情形下,monitor可以执行以下操作:

针对每个被删除的osd,判断该被删除的osd所在的心跳连接环上的其他osd是否均为复用的osd;

若是,删除该被删除的osd所在的心跳连接环;

否则,从该被删除的osd所属存储节点中的其他osd中选择一个osd替换被删除的osd,并通知被删除的osd的邻居osd重新与替换后的osd建立心跳连接。

例如,仍以图3所示的ceph集群架构为例,假设osd9和osd14被删除,那么,针对每个被删除的osd,以osd9为例,判断osd9所在的心跳连接环上的其他osd是否均为复用的osd,由于osd9所在的心跳连接环上的其他osd均不是复用的osd,所以,从osd9所属存储节点(即,存储节点f)中的其他osd中选择一个osd替换osd9,假设选择了osd6,通知osd9的邻居osd(即,osd7和osd8)重新与osd6建立心跳连接,如图9所示。

类似地,针对osd14,假设选择了osd8替换osd14,那么,通知osd14的邻居osd(即,osd3和osd13)重新与osd8建立心跳连接,仍如图9所示。

第四种情形、ceph集群中新增存储节点或者至少一个存储节点被删除

在这种情形下,通常适用于存储节点个数为4个以上的ceph集群上,monitor可以执行以下操作:

根据ceph集群的最新osd拓扑信息,重新构建心跳连接环;

将重新构建的每个心跳连接环上的每个osd的邻居osd分别发送给每个osd,以使每个osd重新与其邻居osd建立心跳连接。

基于同一发明构思,本申请还提供了一种心跳连接的建立装置,如图10所示,该装置应用于ceph集群中的监视器,具体包括:

构建模块1011,用于根据ceph集群的osd拓扑信息,构建多个由osd组成的心跳连接环,每个心跳连接环上的每个osd均从所述ceph集群中不同的存储节点中的osd中选择;

发送模块1012,用于将每个心跳连接环上的每个osd的邻居osd分别发送给每个osd,以使每个osd分别与其邻居osd建立心跳连接。

优选地,上述构建模块1011,具体用于:

根据ceph集群的osd拓扑信息,判断所有存储节点中的osd的总数量是否均相同;

若是,将每个存储节点中的每个osd分别与其他存储节点中的一个未被构建过心跳连接环的osd构建一个第一心跳连接环,其中,不同的第一心跳连接环上的osd均不相同;

否则,根据每个存储节点中的osd,构建m个第一心跳连接环和n个第二心跳连接环;

其中,n个第二心跳连接环上的osd中部分osd为复用的osd,每个复用的osd为复用各自所属存储节点中已构建过心跳连接环的osd;

m的取值为osd的数量最少的存储节点中所有osd的总数量;

n的取值为osd的数量最多的存储节点中所有osd的总数量与osd的数量最少的存储节点中所有osd的总数量的差值。

优选地,该装置还包括:

第一处理模块(图10中未示出),用于针对所述ceph集群中的每个心跳连接环,如果确定出该心跳连接环未被标记为用于表征心跳连接环上osd数量减少的降级状态且发生异常的osd的数量不小于该心跳连接环上所有osd的总数量的一半,或者确定出该心跳连接环被标记为降级状态且发生异常的osd的累计数量不小于该心跳连接环上所有osd的总数量的一半,则通知该心跳连接环上未发生异常的osd断开与其邻居osd之间的连接,并删除该心跳连接环;

如果确定出该心跳连接环未被标记为降级状态且发生异常的osd的数量小于该心跳连接环上所有osd的总数量的一半,或者确定出该心跳连接环被标记为降级状态且发生异常的osd的累计数量小于该心跳连接环上所有osd的总数量的一半,则判断该心跳连接环上其他未发生异常的osd是否均为复用的osd;

若是,则删除该心跳连接环;

否则,进一步判断该心跳连接环上当前发生异常的osd所属的存储节点中是否存在复用次数不大于设定阈值的osd;

在判断结果为是时,从复用次数不大于设定阈值的osd中选择一个osd替换当前发生异常的osd,并分别通知该心跳连接环上当前发生异常的osd的邻居osd重新与替换后的osd建立心跳连接;

在判断结果为否时,如果该心跳连接环上未发生异常前所有osd的总数量为3个,通知该心跳连接环上当前发生异常的osd的邻居osd彼此建立心跳连接,并将该心跳连接环标记为降级状态;

如果该心跳连接环上未发生异常前所有osd的总数量大于3个且该心跳连接环未被标记为降级状态,在当前发生异常的osd的邻居osd均正常时,通知当前发生异常的osd的邻居osd彼此建立心跳连接,在当前发生异常的osd为至少两个相邻的osd时,通知该心跳连接环上至少两个相邻的osd中邻居osd为正常的osd彼此建立心跳连接,并将该心跳连接环标记为降级状态;

如果该心跳连接环上未发生异常前所有osd的总数量大于3个且该心跳连接环被标记为降级状态,在当前发生异常的osd的邻居osd均正常时,通知当前发生异常的osd的邻居osd彼此建立心跳连接,在当前发生异常的osd为至少两个相邻的osd时,通知该心跳连接环上至少两个相邻发生异常的osd中邻居osd为正常的osd彼此建立心跳连接。

优选地,该装置还包括:

第二处理模块(图10中未示出),用于在所述ceph集群中的存储节点中新增至少一个osd后,判断新增的osd中是否存在与被标记为降级状态的心跳连接环上减少的osd处于同一存储节点的第一osd;

在判断出新增的osd中不存在与被标记为降级状态的心跳连接环上减少的osd处于同一存储节点的第一osd时,判断新增的osd中是否存在与复用的osd处于同一存储节点的第二osd;

在判断出新增的osd中不存在与复用的osd处于同一存储节点的第二osd时,执行以下操作:

判断新增的osd中是否存在能够构建新的第一心跳连接环的第三osd;

在判断出新增的osd中存在能够构建新的第一心跳连接环的第三osd时,根据所述第三osd构建新的第一心跳连接环,并将新的第一心跳连接环上的每个第三osd的邻居osd分别发送给每个第三osd,以使每个第三osd分别与其邻居osd建立心跳连接;

若新增的osd中还有剩余的第四osd,判断当前的所有心跳连接环中是否存在第二心跳连接环;

在判断出当前的所有心跳连接环中不存在第二心跳连接环时,根据所述第四osd构建新的第二心跳连接环,并将新的第二心跳连接环上的每个第四osd的邻居osd分别发送给每个第四osd,以使每个第四osd分别与其邻居osd建立心跳连接;

在判断出当前的所有心跳连接环中存在第二心跳连接环时,进一步判断同一存储节点中复用的osd的数量是否不小于该存储节点中第四osd的第二数量;

在判断结果为是时,从该存储节点中选择q个不同的第四osd替换不同的复用的osd,分别通知所述q个复用的osd的邻居osd重新与替换后的第四osd建立心跳连接,并在新增的osd中仍有剩余的第四osd时,根据当前剩余的第四osd构建新的第二心跳连接环,并将新的第二心跳连接环上的每个第四osd的邻居osd分别发送给每个第四osd,以使每个第四osd分别与其邻居osd建立心跳连接,其中,q的取值为该存储节点中所有第四osd的总数量;

在判断结果为否时,从该存储节点中选择不同的第四osd替换所有不同的复用的osd,分别通知所有的复用的osd的邻居osd重新与替换后的第四osd建立心跳连接,并在新增的osd中仍有剩余的第四osd时,根据当前剩余的第四osd构建新的第二心跳连接环,将新的第二心跳连接环上的每个第四osd的邻居osd分别发送给每个第四osd,以使每个第四osd分别与其邻居osd建立心跳连接;

在判断出新增的osd中不存在能够构建新的第一心跳连接环的第三osd时,将新增的osd作为第四osd,执行判断当前的所有心跳连接环中是否存在第二心跳连接环的步骤;

在判断出新增的osd中存在与复用的osd处于同一存储节点的第二osd时,执行以下操作:

若同一存储节点中复用的osd的数量不大于第二osd的数量,从该存储节点中选择不同的第二osd替换所有不同的复用的osd,分别通知所有的复用的osd的邻居osd重新与替换后的第二osd建立心跳连接,并在新增的osd中还有剩余的osd时,根据剩余的osd构建新的心跳连接环,将新的第二心跳连接环上的每个osd的邻居osd分别发送给每个osd,以使每个osd分别与其邻居osd建立心跳连接;

若同一存储节点中复用的osd的数量大于第二osd的数量,从该存储节点中选择s个不同的第二osd替换不同的复用的osd,分别通知所述s个复用的osd的邻居osd重新与替换后的第二osd建立心跳连接,并在新增的osd中还有剩余的osd时,根据剩余的osd构建新的心跳连接环,将新的心跳连接环上的每个osd的邻居osd分别发送给每个osd,以使每个osd分别与其邻居osd建立心跳连接,其中,s的取值为该存储节点中所有第二osd的总数量;

在判断出新增的osd中存在与被标记为降级状态的心跳连接环上减少的osd处于同一存储节点的第一osd时,将第一osd恢复到该心跳连接环上,并在新增的osd还有剩余的osd时,执行判断新增的osd中是否存在与复用的osd处于同一存储节点的第二osd的步骤。

优选地,该装置还包括:

第三处理模块(图10中未示出),用于在所述ceph集群中的存储节点中的至少一个osd被删除后,针对每个被删除的osd,判断该被删除的osd所在的心跳连接环上的其他osd是否均为复用的osd;

若是,删除该被删除的osd所在的心跳连接环;

否则,从该被删除的osd所属存储节点中的其他osd中选择一个osd替换被删除的osd,并通知被删除的osd的邻居osd重新与替换后的osd建立心跳连接。

优选地,该装置还包括:

第四处理模块(图10中未示出),用于在所述ceph集群中新增存储节点或者至少一个存储节点被删除后,根据所述ceph集群的最新osd拓扑信息,重新构建心跳连接环;

将重新构建的每个心跳连接环上的每个osd的邻居osd分别发送给每个osd,以使每个osd重新与其邻居osd建立心跳连接。

由以上技术方案可以看出,在ceph集群中,提供了一种新的建立osd之间的心跳连接的机制,在此机制中,每个心跳连接环上的osd均来自不同的存储节点,避免了同一存储节点中的osd之间建立心跳连接,可大大减少心跳连接的建立条数,进而减轻了osd的通信负载。

以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。

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