logo好方法网

一种raft在出现点对点故障时的优化处理方法


技术摘要:
本发明提供了一种raft在出现点对点故障时的优化处理方法,涉及分布式系统领域,该方法包括如下步骤:S1:领导节点向所有追随节点发送心跳包;S2:超时收不到领导节点心跳包的追随节点确定为故障涉及的追随节点;S3:S2中确定的故障涉及的追随节点向其他追随节点发送消  全部
背景技术:
随着大数据的发展,各大网站的负载也越来越高,在这种情况下,就要提高服务器 的承受能力。一般有两种方法可以解决承载能力的提升问题:一种是升级服务器;另一种是 增加服务器。而增加服务器所说的就是服务器集群,这样新的服务器可以动态地加入到集 群,更方便管理;同时服务器之间可以互相通信,它有一个监听的机制,如果一台服务器发 生故障,由另一台服务器自动接管,容错能力高。而分布式系统,可以用最有效的方式将工 作任务分配到可以使用的多个服务器上进行,提高了计算速度和效率。结合分布式和集群 的优点,就可以实现,按照一定的算法来分配任务,如果有一台服务器出问题了,我们还可 以根据一定的算法转移到另一台服务器上。这就是所谓的分布式集群。 分布式集群中,目前广泛采用的一致性算法是raft算法,例如常见的:etcd及使用 etcd的Kubernetes,都是使用raft算法来解决分布式的一致性问题的。同样作为一致性算 法,raft与paxos相比,更容易让人理解,因此现在被广泛运用在分布式系统中。 在一个raft集群中通常有5个节点,可以容许两个节点失效。任一时刻某个节点只 能有leader、follower和candidate三种状态(或者说角色)中的一种。正常情况下只有一个 leader,其他的都是follower。candidate是用来发起选举的。leader周期性地发送心跳给 所有followers,如果一个follower超过一个选举时长(election  timeout)没有收到任何 通信,它就假定没有生存着的leader了,它将当前的term加1并且变为candidate状态,开始 发起选举来竞选新的leader。leader被选出来后,处理所有的client请求,followers不能 主动发出请求,但是可以响应leader和candidates的请求。 分布式集群中出现点对点通信故障是不可避免的,如果当前集群中,leader与一 个follower的通信发生故障,而其他follower节点间,以及leader与其他follower节点间 通信都是正常的,那么,参照图1,以含5个节点的集群为例,通常,此时的处理方法如下: 1.领导节点为leader  a,追随节点分别为follower  b、follower  c、follower  d和 follower  e,此时各个节点的term假设都为3;此时,领导节点leader  a向follower  b、 follower  c、follower  d和follower  e发送心跳包; a.Follower  b因为与leader  a之间的通信发生故障,而长时间未收到leader  a的 心跳包。当等待时间超过选举超时election  timeout,如150ms时,follower  b将自己的 term加1变为4,同时将自身状态变为candidate,自荐为候选节点candidate  b。 2.候选节点candidate  b向各follower节点发送投票请求,发起选举; 3.Follower  c、follower  d和follower  e收到candidate  b的投票请求,以选举成 功为例,则follower  c、follower  d和follower  e会将各自的term加1,然后为候选节点 candidate  b投票,candidate  b成功当选为新领导节点,成为领导节点leader  b; 4 CN 111586110 A 说 明 书 2/5 页 b.此时,原领导节点a发送心跳包,会发现follower  c、follower  d和follower  e 的term均大于自己的term,则原领导节点a修改自己为follower状态,成为追随节点 follower  a,同时将自己的term加1,变为4; 4.新当选的领导节点leader  b向各追随节点发送心跳包。 5.追随节点follower  a因为与领导节点leader  b之间的通信发生故障,超过一个 election  timeout时间,如120ms,未收到来自领导节点leader  b的消息,会如前面步骤a中 所述,变为候选节点candidate  a,term加1,变为5,然后向各追随节点发送投票请求。 6.候选节点candidate  a再次当选为领导节点,成为leader  a。 此后会重复出现步骤1-步骤6的操作,导致节点a和节点b出现循环选举,产生不必 要的系统开销。 现有技术至少存在以下不足: 1 .如果当前集群中,leader节点与一个follower节点的通信发生故障,而其他 follower节点间,以及leader节点与其他follower节点间通信都是正常的,那么会发生通 信故障涉及的两个节点间的循环选举,产生不必要的系统开销。
技术实现要素:
为解决现有技术中存在的技术问题,本发明提供了一种raft在出现点对点故障时 的优化处理方法,该方法中,如果当前集群中,leader节点与一个follower节点的通信发生 故障,而其他follower节点间,以及leader节点与其他follower节点间通信都是正常的,当 follower节点因为通信故障长时间收不到leader节点的心跳包时,当等待时间超过等待超 时时间时,该follower节点不变成candidate节点,也不立即发起选举,而是先向所有 follower节点发送消息,询问leader节点的状态,如果收到的应答消息表明leader节点是 正常的,那么该通信故障涉及的追随节点将自身状态设置为不可用状态,如果收到的应答 消息表明leader节点是异常的,那么该通信故障涉及的追随节点将自身状态设置为 candidate状态,发起选举。该方法成功避免了现有技术中通信故障涉及的两个节点间循环 选举的现象,节省了不必要的系统开销。 本发明提供了一种raft在出现点对点故障时的优化处理方法,这里所说的点对点 故障为在该集群中一个追随节点与领导节点之间发生通信故障,而该领导节点与其他追随 节点之间以及所有追随节点之间通信正常,该方法包括如下步骤: S1:领导节点向所有追随节点发送心跳包; S2:若追随节点过了等待超时时间,还没有收到领导节点发送的心跳包,则确定该 追随节点为通信故障涉及的追随节点; S3:步骤S2中确定的通信故障涉及的追随节点向其他追随节点发送询问消息,用 于获得当前领导节点的状态; S4:收到询问消息的追随节点检测当前领导节点的状态; S5:收到询问消息的追随节点向所述通信故障涉及的追随节点发送应答消息,告 知当前领导节点状态; S6:所述通信故障涉及的追随节点接收应答消息,所述通信故障涉及的追随节点 根据所述应答消息中当前领导节点的状态发起选举或者不发起选举。 5 CN 111586110 A 说 明 书 3/5 页 优选地,步骤S6中,如果当前领导节点的状态显示当前领导节点正常,则所述通信 故障涉及的追随节点不发起选举,而进行自身状态设置;如果当前领导节点的状态显示当 前领导节点异常,则所述通信故障涉及的追随节点发起选举。 优选地,步骤S6中进行所述自身状态设置为所述通信故障涉及的追随节点将自身 状态设置为不可用状态。 优选地,所述设置为不可用状态的通信故障涉及的追随节点,待通信故障解除后, 恢复成追随节点。 优选地,步骤S3中所述询问消息包括以下信息:消息的序列号、当前领导节点的身 份标识和通信故障涉及的追随节点身份标识。 优选地,步骤S5中所述应答消息包括以下信息:消息的序列号、当前领导节点的身 份标识、通信故障涉及的追随节点身份标识和当前领导节点的状态。 优选地,所述询问消息及所述应答消息中的消息可以定义为包含如下信息的新消 息:消息的序列号、当前领导节点的身份标识、通信故障涉及的追随节点身份标识、当前领 导节点的状态和消息类型。 优选地,所述新消息中包含的消息类型信息表示该消息为请求消息或应答消息。 优选地,步骤S6中所述发起选举包括如下步骤: S61:通信故障涉及的追随节点将自己的任期增加1; S62:通信故障涉及的追随节点成为候选节点; S63:该候选节点发起选举。 优选地,当前领导节点的状态表示当前领导节点正常或当前领导节点异常。 与现有技术相对比,本发明的有益效果如下: (1)本发明在领导节点与一个追随节点的通信发生故障,而其他追随节点间,以及 领导节点与其他追随节点间通信都是正常的情况下,通信故障涉及的两个节点因通信故障 出现长时间收不到当前领导节点心跳包时,不立即发起选举,而是询问领导节点状态,如果 收到应答消息显示当前领导节点正常,则该追随节点将自身状态设置为不可用状态,从而 避免了现有技术中通信故障涉及的领导节点与追随节点出现循环选举的现象,从而减小了 系统开销。 附图说明 图1是现有技术中raft在出现点对点故障时处理方法流程图; 图2是本发明中raft在出现点对点故障时处理方法流程图;
下载此资料需消耗2积分,
分享到:
收藏