raft协议

114 阅读1分钟

概要

Raft 是一个非拜占庭的一致性算法,即所有通信是正确的而非伪造的。NN个结点的情况下(NN为奇数)可以最多容忍 (N1)/2(N−1)/2 个结点故障。 raft 节点的角色:

  • Leader
  • Follower
  • Candidate 正常情况下只存在一个 Leader,其他均为 Follower,所有客户端都与 Leader 进行交互。

Leader 在收到来自客户端的请求后并不会执行,只是将其写入自己的日志列表中,然后将该操作发送给所有的 Follower。Follower 在收到请求后也只是写入自己的日志列表中然后回复 Leader,当有超过半数的结点写入后 Leader 才会提交该操作并返回给客户端,同时通知所有其他结点提交该操作。

通过这一流程保证了只要提交过后的操作一定在多数结点上留有记录(在日志列表中),从而保证了该数据不会丢失。

每个节点的state

image.png

image.png

过程

初始状态

image.png

S2超时,成为candidate

image.png

此时状态为

image.png