一文搞懂Raft算法
概览
Raft 是工程上使用较为广泛的 强一致性、去中心化、高可用的分布式协议。
Raft 协议是一种 leader-based的共识算法,与之相应的是 leaderless 的共识算法。
Leader Election
一个节点任一时刻处于以下三个状态之一:
-
leader
-
follower
-
candidate
每个 leader 工作一段时间,然后选出新的 leader 继续负责,每一届新的履职期称之为一届 任期(term)。
任期是递增的,充当了逻辑时钟的作用。
如果 follower 在 election timeout 内没有收到来自 leader 的心跳,则会主动 发起选举:
-
增加节点本地的 current term ,切换到candidate状态
-
投自己一票
-
并行给其他节点发送 RequestVote RPCs
-
等待其他节点的回复
情况 1️⃣:收到majority的投票(含自己的一票),则赢得选举,成为 leader;
情况 2️⃣:被告知别人已当选,那么自行 切换到 follower;
情况 3️⃣:保持 candidate。

引入 randomized election timeouts 来尽量避免平票情况。
节点的数目是 奇数个,尽量保证 majority 的出现。