一文搞懂Raft算法

🔖软件开发 

概览

Raft 是工程上使用较为广泛的 强一致性、去中心化、高可用的分布式协议

Raft 协议是一种 leader-based的共识算法,与之相应的是 leaderless 的共识算法。

☁☁☁

Leader Election

一个节点任一时刻处于以下三个状态之一:

  1. leader

  2. follower

  3. candidate

每个 leader 工作一段时间,然后选出新的 leader 继续负责,每一届新的履职期称之为一届 任期(term)。

任期是递增的,充当了逻辑时钟的作用。

如果 follower 在 election timeout 内没有收到来自 leader 的心跳,则会主动 发起选举

  1. 增加节点本地的 current term ,切换到candidate状态

  2. 投自己一票

  3. 并行给其他节点发送 RequestVote RPCs

  4. 等待其他节点的回复

情况 1️⃣:收到majority的投票(含自己的一票),则赢得选举,成为 leader

情况 2️⃣:被告知别人已当选,那么自行 切换到 follower

情况 3️⃣:保持 candidate

引入 randomized election timeouts 来尽量避免平票情况。

节点的数目是 奇数个,尽量保证 majority 的出现。

阅读原文