Lab 2 a Raft Leader Election and Heartbeat

Lab 2A - Raft_Leader_Election_And_Heartbeat #

Lab 2A 的实验内容是:

  1. 发起投票进行选举过程
  2. Leader 向所有其他节点发送心跳(AppendEntries)

以下内容记录了笔者在实验过程中遇到的一些问题,以及需要注意的细节

Data Structure #

在 Raft 结构体里,参照论文里的 Figure 2 添加对应的属性,还补充了两个重要的属性:当前节点的状态(leader、follower还是candidate),以及最后一次收到心跳的时间

新增 Entry 结构体,作为执行心跳(AppendEntries) 时传递的对象

Leader Election #

实现 Leader 选举的过程主要有以下内容:

  1. 如果当前节点不是Leader,并且最近没有收到心跳日志,则自身状态变成Candidate,并发起投票进行选举
  2. 统计票数,如果超过半数则成为Leader,并立刻发送心跳日志
  3. 如果当前节点收到其他节点的投票请求,则比较Term,如果比自己的Term大,则自身状态变成Follower,并进行投票

需要注意的细节主要是:状态之间的同步问题。

看起来很简单?

——

坑点一 #

raft-lab2a-figure1.png

Heartbeat #