首页> 中国专利> 选举控制方法及装置、选举方法及装置

选举控制方法及装置、选举方法及装置

摘要

本申请涉及数据通信技术领域,尤其涉及一种选举控制方法及装置、选举方法及装置,该方法应用于集群服务系统中部署有第一监控进程monitor的节点,该方法包括:监测第一monitor的运行状态和运行环境;当监测到所述运行状态和运行环境中存在异常情况后,对第一monitor与其它monitor、及第一monitor与集群外客户端之间的交互报文进行拦截,以阻止第一monitor参与leader选举及向集群外客户端提供服务。这样,当monitor的运行状态和运行环境出现异常时,就不会不断地重复进入选举状态,也不会在有问题的状态下为客户端提供服务,从而节省了系统资源,提高了服务质量。

著录项

  • 公开/公告号CN107995029A

    专利类型发明专利

  • 公开/公告日2018-05-04

    原文格式PDF

  • 申请/专利权人 紫光华山信息技术有限公司;

    申请/专利号CN201711211993.7

  • 发明设计人 潘鑫;金朴堃;

    申请日2017-11-28

  • 分类号H04L12/24(20060101);

  • 代理机构11371 北京超凡志成知识产权代理事务所(普通合伙);

  • 代理人王术兰

  • 地址 310000 浙江省杭州市滨江区长河路466号11楼

  • 入库时间 2023-06-19 05:12:00

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-12-13

    授权

    授权

  • 2019-04-16

    著录事项变更 IPC(主分类):H04L12/24 变更前: 变更后: 申请日:20171128

    著录事项变更

  • 2018-11-30

    实质审查的生效 IPC(主分类):H04L12/24 申请日:20171128

    实质审查的生效

  • 2018-05-04

    公开

    公开

说明书

技术领域

本申请涉及数据通信技术领域,尤其涉及一种选举控制方法及装置、选举方法及装置。

背景技术

Ceph是一种为优秀的性能、可靠性和可扩展性而设计的统一的、分布式文件系统。在Ceph中,由若干个监控进程(monitor)共同负责管理、维护和发布集群的状态信息;在若干个monitor中会选出一个领导者(leader),这些monitor中的其它普通参与选举成员(peon)在该leader的领导下,生成集群图(cluster map)的最新版本,然后将该最新版本发送至Ceph中的全体对象存储设备(Object-based Storage Device,OSD)以及客户端(Client)。OSD使用cluster map进行数据的维护,而Client使用cluster map进行数据的寻址。

在进行leader选举时,先由有选举资格的monitor共同形成一个委员会(quorum),然后委员会的成员在内部选出leader。每个monitor在初始化的时候都会被赋予一个排位(rank)值,当选举leader时,rank值最小的monitor胜出当选leader。每个monitor在启动并完成初始化后会向其它monitor发送探测报文,若根据回应报文中的quorum信息,确定已形成有quorum,则作为quorum的一员发起选举。这里,形成quorum的条件是可参与选举的monitor数量超过全部monitor数量的一半。

在leader选举期间,Ceph是无法对外提供服务的,直到选举出leader,并在leader的带领下形成cluster map的master版本。在选举过程中,若存在monitor节点重启、网络中存在震荡、延时等不稳定因素,会造成monitor反复退出和加入quorum,反复发起选举。如此,整个monitor集群会一直处于选举状态,浪费资源,并且无法对外提供服务。

发明内容

本申请实施例提供一种选举控制方法及装置、选举方法及装置,用以解决集群服务系统中出现异常情况时存在的反复选举的问题。

第一方面,提供一种选举控制方法,该方法应用于集群服务系统中部署有第一监控进程monitor的节点,包括:

监测所述第一monitor的运行状态和运行环境;

当监测到所述运行状态和运行环境中存在异常情况后,对所述第一monitor与其它monitor、及所述第一monitor与集群外客户端之间的交互报文进行拦截,以阻止所述第一monitor参与领导者leader选举及向集群外客户端提供服务。

第二方面,还提供一种选举控制方法,该方法应用于集群服务系统中部署有第一监控进程monitor的节点,包括:

监测第二monitor在第二设定时长内发起选举请求的次数;

当所述第二monitor在第二设定时长内发起选举请求的次数超过设定阈值后,对所述第一monitor与第二monitor之间的交互报文进行拦截,并向其它节点发送异常情况报告,以阻止所述第二monitor参与leader选举;

其中,所述其它节点为部署除所述第一monitor和第二monitor外的其它monitor的节点,所述异常情况报告用于指示所述第二monitor的运行状态和运行环境中存在异常情况。

第三方面,提供一种选举方法,该方法应用于集群服务系统中部署有第一监控进程monitor的节点,包括:

在所述第一monitor启动并完成初始化后,向其它monitor发起探测报文;

根据接收到的回应报文中的委员会quorum信息,确定是否已存在领导者leader;

若确定存在leader,则不发起选举请求;

若确定不存在leader,则在满足选举条件时发起选举请求。

第四方面,提供一种选举控制装置,该装置包括处理器、存储器和总线,所述处理器和存储器之间通过总线连接;所述存储器中存储有执行指令,所述处理器运行所述执行指令,以实现上述第一方面或第二方面所述的方法。

第五方面,提供一种选举装置,该装置包括处理器、存储器和总线,所述处理器和存储器之间通过总线连接;所述存储器中存储有执行指令,所述处理器运行所述执行指令,以实现上述第三方面所述的方法。

本申请实施例上述第一方面和第四方面提供的方案中,通过监测集群服务系统中部署的monitor的运行状态和运行环境来检测异常情况,当存在异常情况时,通过对该monitor与其它monitor、及该monitor与集群外客户端之间的交互报文进行拦截,来阻止第一monitor参与leader选举及向集群外客户端提供服务。这样,当monitor的运行状态和运行环境出现异常时,就不会不断地重复进入选举状态,也不会在有问题的状态下为客户端提供服务,从而节省了系统资源,提高了服务质量。

另外,本申请实施例上述第二方面和第四方面还提供了各个monitor之间相互监督的机制,第一monitor通过监测第二monitor重复发起选举请求的次数来检测第二monitor的运行状态及运行环境是否有异常情况,若第二monitor在一定时间长度内发起选举请求的次数超过设定阈值,则认为第二monitor的运行状态及运行环境中存在异常情况,此时通过对第一monitor与第二monitor之间的交互报文进行拦截,并向其它节点发送异常情况报告,来阻止第二monitor参与leader选举。如此,进一步降低了异常情况下发起选举的次数。

本申请实施例上述第三方面及第五方面还提供了一种简化选举的机制,当monitor在探测阶段确定集群中存在leader时,便不再发起选举请求,由于只要集群中存在维持正常工作的leader,就可以满足集群服务需求,此时不再发起新的选举,一方面节省了系统资源,另一方面也保证了集群服务的可持续性。

附图说明

为了更加清楚地说明本申请实施例或者现有技术中的技术方案,下面将对本申请实施例或者现有技术描述中所需要的附图做简单的介绍。显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。

图1为本申请实施例涉及的集群服务系统示意图;

图2为本申请实施例提供的选举控制方法流程图;

图3为本申请实施例进行异常处理的原理示意图;

图4为本申请另一实施例提供的选举控制方法流程图;

图5为本申请另外一种实施例提供的选举方法流程图;

图6为本申请又一实施例提供的选举方法流程图;

图7为本申请实施例提供的选举控制装置700结构示意图;

图8为本申请另一实施例提供的选举控制装置800结构示意图;

图9为本申请实施例提供的实施上述简化选举机制的选举装置900结构示意图。

具体实施方式

如图1所示,为本申请实施例涉及的集群服务系统示意图,该集群服务系统是指为集群外客户端提供数据访问服务的、由多个部署有monitor的节点(以下简称监控节点,也即每个监控节点中分别部署有一个监控进程—monitor)和提供数据存储服务的OSD组成的服务集群,比如可以是分布式文件系统Ceph。多个monitor会选举出一个leader,该leader领导剩余monitor(称为peon),生成cluster map的最新版本。OSD使用cluster map进行数据的维护,而Client使用cluster map进行数据的寻址。这里,cluster map中包括用于指示OSD中各个数据文件的存储位置的信息。

在实施本申请方案之前,一旦发生监控节点重启、网络反复中断等不稳定因素,都会造成monitor反复发起选举,一方面浪费了资源,另一方面,由于只有选举出leader,才能进一步进行cluster map版本的更新,因此在选举期间无法进行cluster map版本的更新,如此就会影响集群正常对外提供服务。基于此,本申请一种实施例中提出了一种基于异常检测机制来解决反复选举的问题,详见下述实施例。

如图2所示,为本申请实施例提供的选举控制方法流程图,应用于集群服务系统中部署有第一monitor的节点(以下简称第一监控节点),包括以下步骤:

S201:监测第一monitor的运行状态和运行环境。

这里,第一monitor的运行状态和运行环境包括第一monitor本身的工作状态,以及第一监控节点的网络状态、资源使用情况及启动状态等。比如,监测第一monitor是否反复进入bootstrap(也即反复重启,返回初始探测阶段),监测第一monitor对应的网卡是否发生重启、该网卡是否发生单通、第一监控节点的资源使用情况、第一监控节点是否发生重启等。

S202:当监测到所述运行状态和运行环境中存在异常情况后,对所述第一monitor与其它monitor、及所述第一monitor与集群外客户端之间的交互报文进行拦截,以阻止所述第一monitor参与leader选举及向集群外客户端提供服务。

这里,监测到第一monitor的运行状态和运行环境中存在异常情况,可以是指出现以下情况中的一种或多种:

(1)第一monitor在预设时长T1内进入bootstrap的次数超过设定阈值L1;

(2)第一monitor所使用的网卡在预设时长T2内发生重启的次数超过设定阈值L2;

(3)第一monitor所使用的网卡发生单通;这里,单通是指只能接收数据或者只能发送数据;

(4)第一监控节点资源(比如CPU资源、内存资源等)占用率高于一定阈值;

(5)第一监控节点在预设时长T3内发生重启的次数超过设定阈值L3;

这里的T1、T2、T3可以相同,也可以不同,L1、L2、L3可以相同,也可以不同。

为便于后续描述,这里引入两个功能模块,异常监测模块和异常处理模块,异常监测模块负责监测并记录上述异常情况,比如监测并记录异常发生时间、异常来源等,并将记录的异常结果上报给异常处理模块;异常处理模块负责针对异常情况对选举过程进行干预。

下面以工作在Linux系统环境下的集群服务系统Ceph为例,对上述几种异常情况进行举例说明。

针对上述第(1)种异常情况,异常监测模块可以通过磁盘查看命令:df–h来获取系统记录的第一monitor进入bootstrap的时间,若在预设时长T1内进入bootstrap的次数超过设定阈值L1,比如5分钟内进入bootstrap超过3次,则认为存在异常情况,并将异常结果上报给异常处理模块。

针对上述第(2)种异常情况,在Linux系统中,网卡启动/关闭(up/down)的信息可以在系统日志(syslog)或内核日志(kernel.log)中查询到。异常监测模块可以周期性读取这些日志,并分析是否存在异常情况。比如,每隔2分钟从日志的末尾处向前(也即按照时间由新到旧的顺序)搜索第一monitor对应网卡的启动日志,如果得到的网卡启动时间与当前系统时间之间的差值小于5分钟(也即T2),则将累计的up次数加1,也即,搜索最近5分钟内网卡up次数,如果累计up次数超过3次(也即L2)则记录异常结果,并将异常结果上报给异常处理模块。比如记录的异常结果中包括:0-表示发生异常,异常发生时间:当前系统时间,异常信息:网卡反复up/down,异常来源:第一monitor对应的IP地址)。

针对上述第(3)种异常情况,在Linux系统中,可以通过报文统计命令:ifconfigem1查看报文收发统计信息,具体地,可以每隔一段时间(比如每隔两分钟)统计一次接收报文和发送报文的个数,并将当前统计的接收报文个数(可以指从第一monitor启动时间到当前系统时间之间的时间段内接收报文的个数)与上一次统计的接收报文个数(可以指从第一monitor启动时间到上一次统计时间之间的时间段内接收报文的个数)进行比较,如果两者的个数差小于一定阈值,则认为网卡入方向不通,相应地,将当前统计的发送报文个数(可以指从第一monitor启动时间到当前系统时间之间的时间段内发送报文的个数)与上一次统计的发送报文个数(可以指从第一monitor启动时间到上一次统计时间之间的时间段内发送报文的个数)进行比较,如果两者的个数差小于一定阈值,则认为网卡出方向不通。记录的异常结果中可以包括:0-表示发生异常,异常发生时间:当前系统时间,异常信息:网卡出方向或入方向不通,异常来源:第一monitor对应的IP地址。

针对上述第(4)种异常情况,实时监测第一监控节点的资源使用情况,比如CPU资源占用情况、内存资源占用情况等,一旦资源占用率高于一定阈值(比如98%),说明第一monitor无法正常运行,此时及时上报异常结果:0-表示发生异常,异常发生时间:当前系统时间,异常信息:设备资源占用率过高,异常来源:第一monitor对应的IP地址。

上述第(5)种异常情况与第(1)种和第(2)种类似,详见上述针对第(1)种和第(2)种异常情况的说明,这里不再赘述。

在具体实施中,如图3所示,异常处理模块在接收到异常监测模块发送的异常结果后,启动第一隔离机制,也即对第一monitor与其它monitor、及第一monitor与集群外客户端之间的交互报文进行拦截,以阻止第一monitor参与leader选举及向集群外客户端提供服务。

这里,对第一monitor与其它monitor、及第一monitor与集群外客户端之间的交互报文进行拦截可以包括以下几种情况:

(1)对第一monitor发起的探测报文进行拦截,以便其它monitor接收不到该探测报文。

在具体实施中,对第一monitor启动第一隔离机制后,当第一monitor发起探测报文时,异常处理模块对该探测报文进行拦截,以阻止其发送出去,比如可以丢弃该探测报文,或者只是将其暂时存储起来而不发送。

(2)对集群服务系统中其它monitor针对所述第一monitor的探测报文反馈的回应报文进行拦截,以便第一monitor接收不到该回应报文。

在实际实施中,有可能在异常处理模块接收到异常结果时,第一monitor已经发送了探测报文,此时,若其它monitor反馈了回应报文,异常处理模块对其它monitor反馈的回应报文进行拦截,以阻止其传输至第一monitor,比如可以丢弃该回应报文,或者只是将其暂时存储起来而不传输至第一monitor。

(3)对第一monitor发起的选举请求(即请求选举自己为leader)进行拦截,以便其它monitor接收不到该第一monitor的选举请求。

在具体实施中,对第一monitor启动第一隔离机制后,当第一monitor发起选举请求时,异常处理模块对该选举请求进行拦截,以阻止其发送出去,比如可以丢弃该选举请求对应的报文,或者只是将其暂时存储起来而不发送。

(4)对所述集群服务系统中其它monitor针对所述第一monitor的选举请求反馈的响应报文进行拦截,以便所述第一monitor接收不到该响应报文。

在实际实施中,有可能在异常处理模块接收到异常结果时,其它monitor已经接收到了第一monitor发送的选举请求,此时,若其它monitor反馈了响应报文,异常处理模块对其它monitor反馈的响应报文进行拦截,以阻止其传输至第一monitor,比如可以丢弃该响应报文,或者只是将其暂时存储起来而不传输至第一monitor。

(5)对其它monitor发送至第一monitor的探测报文进行拦截,以便第一monitor接收不到该探测报文。

在具体实施中,对第一monitor启动第一隔离机制后,异常处理模块对其它monitor发送给第一monitor的探测报文进行拦截,以阻止其传输至第一monitor,比如可以丢弃该探测报文,或者只是将其暂时存储起来而不传输至第一monitor。

(6)对第一monitor针对集群服务系统中其它monitor发起的探测报文反馈的回应报文进行拦截,以便其它monitor接收不到该回应报文。

在实际实施中,有可能在异常处理模块接收到异常结果时,第一monitor已经接收到了其它monitor发送的探测报文,此时,若第一monitor反馈了回应报文,异常处理模块对第一monitor反馈的回应报文进行拦截,以阻止其传输至其它monitor,比如可以丢弃该回应报文,或者只是将其暂时存储起来而不发送出去。

(7)对所述集群服务系统中其它monitor发起的选举请求进行拦截,以便所述第一monitor接收不到其它monitor的选举请求。

在具体实施中,对第一monitor启动第一隔离机制后,异常处理模块对其它monitor发送给第一monitor的选举请求进行拦截,以阻止其传输至第一monitor,比如可以丢弃该选举请求对应的报文,或者只是将其暂时存储起来而不传输至第一monitor。

(8)对第一monitor针对其它monitor发起的选举请求反馈的响应报文进行拦截,以便其它monitor接收不到该响应报文。

在实际实施中,有可能在异常处理模块接收到异常结果时,第一monitor已经接收到了其它monitor发送的选举请求,此时,若第一monitor反馈了响应报文,异常处理模块将其拦截,以阻止其发送出去,比如可以丢弃该响应报文,或者只是将其暂时存储起来而不发送出去。

(9)对集群外客户端发起的访问请求进行拦截,以便第一monitor接收不到该访问请求。

这里,集群内的monitor向集群外客户端提供访问服务是基于cluster map的。第一monitor异常后,可能无法获取cluster map的最新master版本,如果第一monitor基于旧的master版本响应客户端,则有可能造成返回结果错误。基于,异常处理模块对集群外客户端发起的访问请求进行拦截,比如可以丢弃该访问请求对应的报文,或者只是将其暂时存储起来而不传输至第一monitor,以避免第一monitor接收到该报文。

(10)对所述第一monitor为集群外客户端提供的响应报文进行拦截,以便所述集群外客户端接收不到该响应报文。

在实际实施中,有可能在异常处理模块接收到异常结果时,第一monitor已经接收到了访问请求,此时,为了避免第一monitor将错误的响应结果反馈给客户端,异常处理模块对第一monitor发送的响应报文进行拦截,以避免集群外客户端接收到该响应报文。

总之,上述几种情况,都是要切断第一monitor与集群内其它monitor及集群外客户端之间的交互,切断的方式就是拦截发送给第一monitor的报文、及第一monitor发送出去的报文,使得第一monitor对外隔离。

在对第一monitor采取第一隔离机制后,第一monitor的运行状态和运行环境有可能会恢复正常,基于此,在本申请几种实施方式下,给出了当监测到异常情况结束后的处理机制。具体地,当监测到异常情况结束后,可以直接取消上述第一隔离机制(实施方式一);另外,由于leader异常相比普通monitor成员(peon)异常对集群的影响更大,因此也可以逐步取消上述第一隔离机制,先取消集群外客户端的访问限制和作为普通选举成员peon的限制,在一段观察期内,若第一monitor没有再发生异常,则再取消对第一monitor当选为leader的限制(实施方式二)。

下面分别对上述两种实施方式进行说明,见步骤S203和S204。

S203(实施方式一):当监测到第一monitor的运行状态和运行环境中的异常情况结束后,取消对第一monitor与其它monitor、及第一monitor与集群外客户端之间的交互报文进行拦截的操作,以恢复第一monitor参与leader选举及向集群外客户端提供服务的功能。

这里,当监测到第一monitor的运行状态和运行环境中的异常情况结束后,取消上述第一隔离机制,恢复第一monitor的正常工作状态。

对应上述内容中介绍的五种异常情况,异常情况结束可以指:第一monitor在预设时长T4内未返回bootstrap阶段;第一monitor所使用的网卡在预设时长T5内稳定在up状态;第一monitor所使用的网卡在预设时长T6内未发生单通;第一监控节点资源占用率低于一定阈值(比如CPU占用率、内存占用率均低于80%);第一监控节点在预设时长T7内稳定在up状态;上述T4、T5、T6、T7可以相同,也可以不同。

比如,如果之前异常情况是网卡反复up/down,则当监测到该网卡up状态持续稳定10分钟后,认为网卡异常结束。再比如,如果之前异常情况是节点资源占用率过高,则当监测到节点资源占用率降低到80%以下时,认为异常结束。当异常监测模块监测到异常情况结束后,将异常结束信息上报给异常处理模块。比如,异常结束信息包括:1-表示异常结束,结束时间:当前系统时间,之前异常信息:网卡反复up/down,当前状态:网卡稳定在up状态,之前异常来源:第一monitor对应的IP地址)。

在具体实施中,异常监测模块可以在将监测到的异常结果上报给异常处理模块后,直接进入监测异常情况是否结束的阶段。异常监测模块也可以在将监测到的异常结果上报给异常处理模块后,经过一定的时间长度(在这段时间内默认为一直异常)后,再进入监测异常是否结束的阶段。

S204(实施方式二):当监测到第一monitor的运行状态和运行环境中的异常情况结束后,取消对集群服务系统中其它monitor发起的探测报文、其它monitor发起的选举请求、第一monitor针对其它monitor发起的探测报文反馈的回应报文、第一monitor针对其它monitor发起的选举请求反馈的响应报文、及第一monitor与集群外客户端之间的交互报文进行拦截的操作,以恢复第一monitor除当选为leader外的其它参与选举的机会,及为集群外客户端提供服务的机会;若在监测到所述异常情况结束后的第一设定时长内,未监测到新的异常情况,则取消对所述第一monitor发起的探测报文、第一monitor发起的选举请求、其它monitor针对第一monitor发起的探测报文反馈的回应报文、其它monitor针对第一monitor发起的选举请求反馈的响应报文进行拦截的操作,以恢复第一monitor当选为leader的机会。

这里,当监测到第一monitor的运行状态和运行环境中的异常情况结束后,先取消上述10种拦截情况中的(5)~(10),而保留(1)~(4),也即,当监测到第一monitor的运行状态和运行环境中的异常情况结束后的第一设定时长内,不再对集群服务系统中其它monitor发起的探测报文、其它monitor发起的选举请求、第一monitor针对其它monitor发起的探测报文反馈的回应报文、第一monitor针对其它monitor发起的选举请求反馈的响应报文、及第一monitor与集群外客户端之间的交互报文进行拦截,但是,继续对第一monitor发起的探测报文、第一monitor发起的选举请求、其它monitor针对第一monitor发起的探测报文反馈的回应报文、其它monitor针对第一monitor发起的选举请求反馈的响应报文进行拦截。如果在第一设定时长内,第一monitor的运行状态和运行环境一直没有出现新的异常情况,则再取消上述拦截(1)~(4)。

在具体实施中,考虑到发生过异常情况的monitor再次发生异常的概率会比较高,实施方式二提出一种降级处理的方式。也即,在异常情况结束时,第一monitor先进入试用期(S204中的第一设定时长),在试用期内,只能先作为普通选举成员peon加入集群,也即该第一monitor没有资格被选举为leader,但可以参与其它monitor发起的选举,也可以基于最新的cluster map版本向集群外客户端提供服务。在试用期内,如果一直未发生新的异常情况,则在试用期结束后可以正常参与到集群的选举中,也即恢复当选为leader的机会;如果在试用期内发生了新的异常情况,则会重新启用上述第一隔离机制。

本申请实施例还提出了一种监控节点之间的监督机制。每个监控节点还可以监测集群内其它monitor是否发生异常,如果发生异常,则对异常的monitor进行隔离。这种监督机制可以作为上述第一隔离机制的有效补充,也可以单独实施。对于某些因自身异常而无法识别到自身的异常情况的节点,可以起到有效的监督作用。详见S205和S206的描述。

S205:当在第二设定时长内接收到第二monitor发起的选举请求的次数超过设定阈值后,对第一monitor与第二monitor之间的交互报文进行拦截,并向其它节点发送异常情况报告,以阻止第二monitor参与leader选举;所述其它节点为部署除所述第一monitor和第二monitor外的其它monitor的节点,所述异常情况报告用于指示所述第二monitor的运行状态和运行环境中存在异常情况。

在具体实施中,第一监控节点的异常监测模块统计在第二设定时长内接收到的第二monitor发起的选举请求的次数,若该次数超过设定阈值,则认为第二monitor的运行状态和运行环境中存在异常情况,此时对第二monitor采用第二隔离机制,也即对第一monitor与第二monitor之间的交互报文进行拦截,并向其它节点发送异常情况报告,以阻止第二monitor参与leader选举。

比如,第一监控节点的异常监测模块统计到在5分钟内接收到第二monitor发起的选举请求的次数为4次,超过设定阈值3,则认为该第二monitor的运行状态和运行环境中存在异常情况,此时将异常结果上报给异常处理模块,异常结果记录为:0-表示发生异常,发生时间:当前系统时间,异常信息:第二monitor反复发起选举请求,异常来源:第二monitor对应的IP地址)。异常处理模块将该异常结果对第一monitor与第二monitor之间的交互报文进行拦截,并向其它节点发送异常情况报告。

S206:当接收到针对第二monitor的异常情况报告后,对所述第一monitor与第二monitor之间的交互报文进行拦截。

在具体实施中,监控节点之间的监督是相互的,第一监控节点可能会自己监测到第二monitor的异常情况,也可能会接收到其它监控节点针对该第二monitor的异常情况报告,如果接收到其它监控节点针对第二monitor的异常情况报告,也会对该第二monitor进行隔离,也即不向该第二monitor发送选举请求,也不响应该第二monitor发起的选举请求,具体采用的手段就是对第一monitor与第二monitor之间的交互报文进行拦截。

在上面内容中已说明,监控节点之间的监督机制可以作为上述第一隔离机制的补充,也可以单独实施。下面为上述监督机制单独实施时的实施例。

如图4所示,为本申请另一实施例提供的选举控制方法流程图,应用于集群服务系统中部署有第一monitor的节点(也即上述第一监控节点),包括以下步骤:

S401:监测第二monitor在第二设定时长内发起选举请求的次数。

S402:判断第二monitor在第二设定时长内发起选举请求的次数是否超过设定阈值,若超过,则进入S403a和S403b,否则返回S401。

S403a:对第一monitor与第二monitor之间的交互报文进行拦截。

S403b:向其它节点发送异常情况报告;其中,所述其它节点为部署除所述第一monitor和第二monitor外的其它monitor的节点,所述异常情况报告用于指示所述第二monitor的运行状态和运行环境中存在异常情况。

S404:若接收到针对第二monitor的异常情况报告,则进入上述S403a。

在S403a和S403b中,当第一监控节点(具体可以由上述异常监测模块执行)监测到第二monitor在第二设定时长内发起选举请求的次数超过设定阈值后,认为第二monitor的运行状态和运行环境中存在异常情况。此时,一方面,第一监控节点(具体可以由上述异常处理模块执行)对第二monitor进行隔离,也即对第一monitor与第二monitor之间的交互报文进行拦截。另一方面,第一监控节点(具体可以由上述异常处理模块执行)向其它节点发送异常情况报告,以便其它节点也对第二monitor进行隔离,以阻止第二monitor参与leader选举。

相应地,如果第一监控节点接收到其它节点针对第二monitor的异常情况报告,也会对第一monitor与第二monitor之间的交互报文进行拦截,也即S404→S403a。

上面的实施例是通过监测monitor运行中的异常情况来解决反复选举的问题。本申请实施例另外提供了一种通过简化选举机制来解决上述反复选举的问题。详见下述实施例的描述。

在进行leader选举时,是基于rank值来选举的,rank值是基于monitor对应的IP地址得到的,在选举时会选举出rank值最小的monitor为leader。如果monitor A在发起探测报文后,收到集群中超过半数的monitor的回应,则monitor A会发起选举请求,如果收到选举请求的monitor B对应的rank值小于monitor A对应的rank值,monitor B不认可monitorA作为leader,又会发起新的选举请求(即请求选举自己为leader)。如此反复,直到选举出集群中的monitor都认可的leader。可见,在现有的选举机制中,每一轮选举都需要经过反复多次触发选举的过程,而且,在每一轮选举过程中,如果存在monitor的增删,又会触发新一轮的选举,如此反复,各个monitor一直处于选举状态,不仅造成资源的浪费,而且monitor在选举过程中无法对外提供服务。

由于rank值只是基于IP地址得到的一个没有实质物理意义的参数,本申请下述实施例提出了一种简化的选举机制,也即monitor在探测阶段,如果发现已经存在quorum和leader,则不再进行rank值的比较,也即不再发起选举请求,而直接作为除leader外的普通选举成员peon加入集群。

如图5所示,为本申请另外一种实施例提供的选举方法,该方法应用于集群服务系统中部署有第一monitor的节点,包括以下步骤:

S501:在第一monitor启动并完成初始化后,向其它monitor发起探测报文。

这里,第一monitor开始创建并启用后,或者,因所在监控节点或自身原因发生重启后,会向集群内的其它monitor发送探测报文,以接收其它monitor反馈的回应报文,回应报文中会携带quorum信息。

S502:根据接收到的回应报文中的quorum信息,确定是否已存在leader。

这里,其它monitor反馈的quorum信息用于指示集群中是否已经存在quorum和leader。这里,quorum是在具备选举条件(某一monitor发起探测报文后,收到回应的数量超过集群中monitor数量的一半)时形成的,在形成quorum后,就会选举出leader。下面具体说明下quorum的初始形成及leader的选举条件,以便于后续方案的理解。

任一monitor在初始化后会向其它monitor发送探测报文,收到探测报文的monitor在确定所述任一monitor的rank值比自己的rank值小、也比本轮选举中之前其它发起探测报文的monitor的rank值小、且集群当前没有进入正式选举过程(没有收到选举请求)时,向所述任一monitor反馈回应报文。若该任一monitor根据回应报文中的quorum信息,确定集群中还没有quorum和leader,则先建立临时quorum集合(outside_quorum),所述任一monitor每收到一个回应报文,将outside_quorum中的monitor成员数量加1,直到outside_quorum中的monitor成员数量达到集群中monitor总数的一半,则认为满足选举条件,此时形成正式的quorum,发起选举请求。其它monitor在收到选举请求后,将所述任一monitor的rank值与自己的rank值进行比较,如果所述任一monitor的rank值小,则响应所述任一monitor,也即认可所述任一monitor作为leader,否则,不响应所述任一monitorr,并且发起自己的选举请求。如此重复,直到选举出一个集群中的每一个monitor都认可的leader。

上面内容描述的是在集群中还没有quorum和leader,也即集群首次进行leader选举的过程。本申请实施例主要对集群中已经存在quorum和leader之后的选举机制进行了简化处理。

S503:若确定存在leader,则不发起选举请求。

这里,由于leader是在quorum成立后选举出的,集群中已存在leader,也会存在quorum。在本申请实施例中,如果第一monitor探测到集群中已存在quorum和leader,则不会再发起选举请求,而是直接作为peon加入集群,如此便极大地简化了选举过程,节省了资源,并且保证了集群对外服务的可持续性。

S504:若确定不存在leader,则在满足选举条件时发起选举请求。

这里,如果集群中不存在leader,此时集群中一般不存在quorum,但也不排除集群中存在quorum,且此时正在进行leader选举的可能。如果集群中存在quorum,且正在进行leader选举,第一monitor在发起探测报文后,将无法收到回应报文,也就不会满足选举条件,因此这种情况下就不会发起选举请求。

当集群中不存在quorum和leader时,参考上面S502之后的描述内容,第一monitor在累计收到的回应报文的数量达到集群中monitor数量的一半时,发起选举请求。第一monitor开始发起选举请求时是请求选举自己为leader,如果存在其它monitor的rank值比第一monitor的rank值小,其它monitor会重新发起选举请求,最后选举出的leader为rank值最小的monitor。

为了进一步增加集群服务的可靠性,本申请又一实施例提供一种针对leader的主备切换策略。详见下述实施例的描述。

如图6所示,为本申请又一实施例提供的选举方法,该方法应用于集群服务系统中部署有第一monitor的节点,该方法包括:

S601:在第一monitor启动并完成初始化后,向其它monitor发起探测报文。

S602:根据接收到的回应报文中的quorum信息,确定是否已存在主leader和副leader;所述副leader用于在主leader异常时,切换为主leader。

这里,quorum信息中指示了集群中是否存在quorum、主leader和副leader。

S603:若确定存在主leader和副leader,则不发起选举请求。

这里,如果集群中已经存在quorum、主leader和副leader,则第一monitor不会再发起选举请求,而是直接作为peon加入集群,如此便极大地简化了选举过程,节省了资源,并且保证了集群对外服务的可持续性。

S604:若确定存在主leader,但不存在副leader,则参与副leader的选举。

这里,如果集群中已经存在quorum和主leader,但不存在副leader,一般地,此时集群中正在进行副leader的选举,若第一monitor接收到了其它monitor发起的选举副leader的请求,可以将自己的rank值与其它monitor的rank值进行比较,若自己的rank值大,则响应其它monitor发起的选举副leader的请求,若自己的rank值小,则不响应,并再次发起选举副leader的请求。

S605:若确定不存在主leader和副leader,则在满足选举条件时发起选举主leader的请求,并在选举出主leader之后,在所述quorum中选举副leader。

这里,如果集群中不存在主leader和副leader,此时集群中一般不存在quorum,但也不排除集群中存在quorum,且此时正在进行主leader选举的可能。如果集群中存在quorum,且正在进行主leader选举,第一monitor在发起探测报文后,将无法收到回应报文,也就不会满足选举条件,因此这种情况下就不会发起选举请求。

当集群中不存在quorum、主leader和副leader时,第一monitor在累计收到的回应报文的数量达到集群中monitor数量的一半时,发起选举主leader的请求。第一monitor开始发起请求时是请求选举自己为主leader,如果存在其它monitor的rank值比第一monitor的rank值小,其它monitor会重新发起选举主leader的请求,最后选举出的主leader为rank值最小的monitor。在选举出主leader之后,集群中的其它monitor采用同样的方式选举副leader,主leader此时只需响应其它monitor发起的请求。

另外,由于本申请实施例采用了主备快速切换的机制,主leader出现异常情况后,副leader会迅速切换为主leader,因此在上述步骤中不考虑集群中存在副leader、不存在主leader的情况,详见下述内容的描述。特殊地,如果某一monitor在需要针对第一monitor的探测报文反馈回应报文时,正好遇到主leader异常的情况,可以在副leader切换为主leader之后,再反馈回应报文。

上述实施例除了简化选举机制外,还增加了主备切换的方案,副leader在主leader发生异常情况后,迅速切换到主leader。在具体实施中,主leader和副leader都会发送自己的租约(lease)报文,除主leader外的其它monitor如果在规定的时间内没有接收到主leader的lease报文,则会判定主leader异常,此时会通知副leader切换为主leader,副leader在收到超过一半数量的monitor(可以包括副leader自己)指示进行角色切换后,会切换为主leader。在副leader切换为主leader之后,集群中没有了副leader,其它monitor因收不到副leader的lease报文,在满足选举条件时发起选举副leader的请求。也即,其它任一monitor确认在一定时间长度内没有收到副leader的lease报文后,发起探测报文,在收到集群中超过一半的monitor的回应报文后,发起选举副leader的请求,也即请求选举自己为副leader。

上述过程中,副leader切换为主leader的时间可以忽略不计,主leader出现异常情况后,副leader会迅速切换为主leader,此时集群中就有了主leader,而没有副leader,因此,集群中如果存在副leader,也会存在主leader,但如果存在主leader,不一定存在副leader。

在上述S604中,如果集群中存在主leader,不存在副leader,此时一般正在进行副leader的选举,此时第一monitor可以响应其它monitor发起的选举副leader的请求(在比较rank值之后确认该monitor可以为副leader),也可以在发起选举请求的其它monitor的rank值比自己的rank值大的情况下,不进行响应,而是自己重新发起选举副leader的请求(请求选举自己为副leader)。

在上述S605中,若确定不存在主leader和副leader,则在第一monitor收到集群中超过半数的monitor的回应报文时,发起选举主leader的请求,若得到集群内全部monitor的响应,则第一monitor被选举为主leader,或者,其它monitor不响应,并再次发起选举主leader的请求,选举结果为其它monitor被选举为主leader。因此,S605中,在满足选举条件时发起选举主leader的请求,这里的选举条件就是指第一monitor收到集群中超过半数的monitor的回应报文;另外,S605中,在选举出主leader之后,在所述quorum中选举副leader,这里,第一monitor发起选举主leader的请求,但最后被选举为主leader的可能是第一monitor,也可能是其它monitor。不管第一monitor是否被选举为主leader,第一monitor都可以参与后续副leader的选举,只是如果第一monitor已经是主leader,只需响应其它monitor发起的选举副leader的请求(回复确认ACK报文)。

这里,副leader的选举需要等到主leader选举完成之后进行,一方面,主leader的地位和作用更加重要,只有主leader维持正常,才能确保集群服务的稳定性,另一方面,本申请实施例采用了主备切换的机制,如果只有副leader,没有主leader,副leader还需要切换到主leader。

在选举出主leader之后,除主leader外的其它monitor确认集群中没有副leader,发起探测报文,在收到集群中过半数的monitor的回应(主leader直接回应)后,发起选举副leader的请求,最后,如果集群中的所有monitor都同意发起选举请求的monitor为副leader,该monitor当选副leader成功。

作为上述步骤S601~S605的补充,若第一monitor启动时,集群中已有主leader和副leader,或者第一monitor在参与选举过程中没有被选举为主leader和副leader,则第一monitor作为普通选举成员peon,在确定主leader异常后,指示副leader切换为主leader;若在选举过程中第一monitor被选举为副leader,则当第一monitor收到超过一半数量的monitor(包括自己)指示进行角色切换后,切换为主leader。

另外,本申请实施例中,为了进一步提升主备切换效率,若第一monitor为副leader,则副leader在切换为主leader之前,从其它monitor处收集集群的数据存储信息;在切换为主leader之后,基于收集的数据存储信息,维护cluster map的版本更新。

这里,副leader在主leader没有发生异常时,与主leader一起,也进行集群的数据存储信息的收集,只是不会主动进行cluster map版本的更新,这里的数据存储信息包括数据在OSD中的存储位置等。在主leader异常时,副leader的master map版本相比主leader的master map版本是相同的或落后的。副leader可以查看最新收集的数据存储信息的更新时间,是否晚于本地存储的master map版本的更新时间,若晚于,说明master map版本需要更新,此时副leader可以基于收集的数据存储信息进行map版本的更新。

本申请实施例中,只让主leader扩散更新的master map版本,是为了保证集群中的唯一权威性。另外,由于只有完成最新master map版本的更新,副leader才能算是切换到了主leader,因此主leader和副leader都进行数据存储信息的收集,可以提高主副切换的速度,进一步提高集群服务的高可靠性。

本申请实施例通过主备切换的方式,在主leader出现异常时,可以由副leader切换到主leader,提高了集群的高可靠性,进一步地,通过副leader与主leader一起收集集群服务系统中的数据存储信息,使得副leader切换到主leader后,能够迅速恢复主leader的正常工作,进一步提高了集群服务的质量和效率。

基于同一发明构思,本申请实施例中还提供了与上述选举控制方法、选举方法分别对应的装置,由于本申请实施例中的装置解决问题的原理与上述方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。

如图7所示,为本申请实施例提供的选举控制装置700结构示意图,该选举控制装置700对应上述第一监控节点,比如可以是第一监控节点,也可以是第一监控节点控制下的设备。该选举控制装置700包括处理器71、存储器72和总线73,处理器71和存储器72之间通过总线73连接;存储器72中存储有执行指令,处理器71运行所述执行指令,以实现下述方法:

监测所述第一monitor的运行状态和运行环境;

当监测到所述运行状态和运行环境中存在异常情况后,对所述第一monitor与其它monitor、及所述第一monitor与集群外客户端之间的交互报文进行拦截,以阻止所述第一monitor参与领导者leader选举及向集群外客户端提供服务。

在一种实施方式中,处理器71运行的执行指令还用于:

当监测到所述运行状态和运行环境中的异常情况结束后,取消对所述第一monitor与其它monitor、及所述第一monitor与集群外客户端之间的交互报文进行拦截的操作,以恢复所述第一monitor参与leader选举及向集群外客户端提供服务的功能。

在另一种实施方式中,处理器71运行的执行指令还用于:

当监测到所述运行状态和运行环境中的异常情况结束后,取消对所述集群服务系统中其它monitor发起的探测报文、其它monitor发起的选举请求、第一monitor针对其它monitor发起的探测报文反馈的回应报文、第一monitor针对其它monitor发起的选举请求反馈的响应报文、及所述第一monitor与集群外客户端之间的交互报文进行拦截的操作,以恢复第一monitor除当选为leader外的其它参与选举的机会,及为集群外客户端提供服务的机会;

若在监测到所述异常情况结束后的第一设定时长内,未监测到新的异常情况,则取消对所述第一monitor发起的探测报文、第一monitor发起的选举请求、其它monitor针对第一monitor发起的探测报文反馈的回应报文、其它monitor针对第一monitor发起的选举请求反馈的响应报文进行拦截的操作,以恢复第一monitor当选为leader的机会。

本申请实施例的选举控制装置700还可以实施上述监控节点之间的监督机制,此时,处理器71运行的执行指令还用于:

当在第二设定时长内接收到第二monitor发起的选举请求的次数超过设定阈值后,对所述第一monitor与第二monitor之间的交互报文进行拦截,并向其它节点发送异常情况报告,以阻止所述第二monitor参与leader选举;所述其它节点为部署除所述第一monitor和第二monitor外的其它monitor的节点,所述异常情况报告用于指示所述第二monitor的运行状态和运行环境中存在异常情况;或者,

当接收到针对第二monitor的异常情况报告后,对所述第一monitor与第二monitor之间的交互报文进行拦截。

上述监控节点之间的监督机制也可以独立实施。基于此,如图8所示,为本申请另一实施例提供的选举控制装置800结构示意图,该选举控制装置800对应上述第一监控节点,可以是第一监控节点,也可以是第一监控节点控制下的设备。该选举控制装置800包括处理器81、存储器82和总线83,处理器81和存储器82之间通过总线83连接;存储器82中存储有执行指令,处理器81运行所述执行指令,以实现下述方法:

监测第二monitor在第二设定时长内发起选举请求的次数;

当所述第二monitor在第二设定时长内发起选举请求的次数超过设定阈值后,对所述第一monitor与第二monitor之间的交互报文进行拦截,并向其它节点发送异常情况报告,以阻止所述第二monitor参与leader选举;

其中,所述其它节点为部署除所述第一monitor和第二monitor外的其它monitor的节点,所述异常情况报告用于指示所述第二monitor的运行状态和运行环境中存在异常情况。

另外,处理器81运行的执行指令还用于:

在接收到针对第二monitor的异常情况报告后,对所述第一monitor与第二monitor之间的交互报文进行拦截。

如图9所示,为本申请实施例提供的实施上述简化选举机制的选举装置900结构示意图,该选举装置900对应上述第一监控节点,可以是第一监控节点,也可以是第一监控节点控制下的设备。该选举装置900包括处理器91、存储器92和总线93,处理器91和存储器92之间通过总线93连接;存储器92中存储有执行指令,处理器91运行所述执行指令,以实现下述方法:

在所述第一monitor启动并完成初始化后,向其它monitor发起探测报文;

根据接收到的回应报文中的委员会quorum信息,确定是否已存在领导者leader;

若确定存在leader,则不发起选举请求;

若确定不存在leader,则在满足选举条件时发起选举请求。

在一种实施方式中,上述leader包括主leader和副leader;处理器91运行的执行指令中,若确定不存在leader,则在满足选举条件时发起选举请求,包括:

若确定不存在主leader和副leader,则在满足选举条件时发起选举主leader的请求;

在选举出主leader之后,在所述quorum中选举副leader;所述副leader用于在主leader异常时,切换为主leader。

在一种实施方式中,处理器91运行的执行指令中,在所述quorum中选举出副leader之后,还包括:

若所述第一monitor为除主leader和副leader之外的成员,则在确定主leader异常后,指示所述副leader切换为主leader;

若所述第一monitor为副leader,则在所述quorum内超过一半数量的monitor指示进行角色切换后,切换为主leader。

这里,处理器91运行的执行指令中,若所述第一monitor为副leader,则在切换为主leader之前,还包括:从其它monitor处收集集群的数据存储信息;在切换为主leader之后,还包括:基于收集的数据存储信息,维护集群图cluster map的版本更新。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

对应于上述选举控制方法及装置、选举方法及装置,本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述选举控制方法和/或选举方法的步骤。

本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。

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

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号