etcd中raft协议的消息(四) —— 心跳相关的消息(MsgBeat、MsgHeartbeat、MsgHeartbeatResp和MsgCheckQuorum)

MsgBeat和MsgHeartbeat消息

      Leader推动心跳计时器(heartbeatElapsed),而Follower推动选举计时器(electionElapsed),选举计时器的流程前面已经提到,这里主要介绍心跳计时器。当上层模块调用Tick()时,Leader会推动心跳计时器,在tickHeartbeat函数中有详细介绍。有两种情况会是Leader向集群中其他的节点发送心跳消息分别是心跳计时器超时和在ReadOnly模式下Leader接收到客户端请求的只读消息,这里我们主要介绍心跳计时器超时的情况。

 MsgBeat和MsgHeartbeat消息的主要区别是MsgBeat是本地消息,而发给集群中其他节点的心跳消息是使用MsgHeartbeat消息

Leader调用tickHeartbeat推动心跳计时器

    当心跳计时器超时时会向其他节点发送心跳,如果raft的配置checkQuorum为true,则也会发送MsgCheckQuorum消息。tickHeartbeat的主要流程:

1.递增心跳计时器和选举计时器

2.如果选举计时器大于等于选举超时时间

                重置选举计时器,Leader节点不会主动发起选举

                 检测当前节点是否与集群中的大多数节点连通,如果超过半数以上的节点连通则发送MsgCheckQuorum确认

                 如果有节点正在转移,则禁止节点转移

3.如果选举计时器没有超时

              如果当前节点不是Leader,则直接返回

              心跳计时器超时,则发送MsgBeat消息,继续维持向其余节点发送心跳消息,并重置心跳计时器

func (r *raft) tickHeartbeat() {
	r.heartbeatElapsed++	//递增心跳计时器
	r.electionElapsed++	//递增选举计时器

	if r.electionElapsed >= r.electionTimeout {  //当选举计时器大于等于选举超时时间
		r.electionElapsed = 0	//重置选举计时器,Leader节点不会主动发起选举
		if r.c
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值