任何时刻,每一个服务器节点都处于 leader, follower, candidate 三个状态之一

image.png

Raft 只需要考虑状态的切换,不需要像 Paxos 一样考虑状态之间的共存和互相影响

任期

Raft 保证一个任期内只能有一个 Leader 产生,同时任期的机制可以非常容易看出集群的状态,例如看某个节点是否有 Term 2 任期可以看出节点是否离线

image.png

RPC 通信

主要只有两种不同的 RPC 通信方式:

服务器之间通信的时候会交换当前任期号;如果一个服务器上的当前任期号比其他的小, 该服务器会将自己的任期号更新为较大的那个值。

如果一个节点接收到一个包含过期的任期号的请求,它会直接拒绝这个请求。

如果一个 candidate 或者 leader 发现自己的任期号过期了,它会立即回到 follower 状态。