Raft共识算法详解 (3)

Raft共识算法详解

➢ 在下一个 heartbeat,leader 将此条目复制给所有的 follower。

Raft共识算法详解

➢ 当大多数节点记录此条目之后,leader 节点认定此条目有效,将此条目设定为已提交并存储于本地磁盘。

Raft共识算法详解

Raft共识算法详解

➢ 在下一个 heartbeat,leader 通知所有 follower 提交这一日志条目并存储于各自的磁盘内。

Raft共识算法详解

Network Partition 情况下进行复制日志:

由于网络的隔断,造成集群中多数的节点在一段时间内无法访问到 leader 节点。按照 raft 共识算法,没有 leader 的那一组集群将会通过选举投票出新的 leader,甚至会在两个集群内产生不一致的日志条目。在集群重新完整连通之后,原来的 leader 仍会按照 raft 共识算法从步进数更高的 leader 同步日志并将自己切换为 follower。

➢ 集群的理想状态。

Raft共识算法详解

➢ 网络间隔造成大多数的节点无法访问 leader 节点。

Raft共识算法详解

➢ 新的日志条目添加到 leader 中。

Raft共识算法详解

➢ leader 节点将此条日志同步至能够访问到 leader 的节点。

Raft共识算法详解

➢ follower 确认日志被记录,但是确认记录日志的 follower 数量没有超过集群节点的半数,leader 节点并不将此条日志存档。

Raft共识算法详解

➢ 在被隔断的这部分节点,在 election timeout 之后,followers 中产生 candidate 并发起选举。

Raft共识算法详解

➢ 多数节点接受投票之后,candidate 成为 leader。

Raft共识算法详解

➢ 一个日志条目被添加到新的 leader并复制给新 leader 的 follower。

Raft共识算法详解

➢ 多数节点确认之后,leader 将日志条目提交并存储。

Raft共识算法详解

➢ 在下一个 heartbeat,leader 通知 follower 各自提交并保存在本地磁盘。

Raft共识算法详解

➢ 经过一段时间之后,集群重新连通到一起,集群中出现两个 leader 并且存在不一致的日志条目。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wssfjp.html