Lab 2A - Raft_Leader_Election_And_Heartbeat #
Lab 2A 的实验内容是:
- 发起投票进行选举过程
- Leader 向所有其他节点发送心跳(AppendEntries)
以下内容记录了笔者在实验过程中遇到的一些问题,以及需要注意的细节
Data Structure #
在 Raft 结构体里,参照论文里的 Figure 2 添加对应的属性,还补充了两个重要的属性:当前节点的状态(leader、follower还是candidate),以及最后一次收到心跳的时间
新增 Entry 结构体,作为执行心跳(AppendEntries) 时传递的对象
Leader Election #
实现 Leader 选举的过程主要有以下内容:
- 如果当前节点不是Leader,并且最近没有收到心跳日志,则自身状态变成Candidate,并发起投票进行选举
- 统计票数,如果超过半数则成为Leader,并立刻发送心跳日志
- 如果当前节点收到其他节点的投票请求,则比较Term,如果比自己的Term大,则自身状态变成Follower,并进行投票
需要注意的细节主要是:状态之间的同步问题。
看起来很简单?
——
坑点一 #