Raft 协议笔记

2020-10-22  算法    2,363

原理

非常好的教程:http://thesecretlivesofdata.com/raft/

总结一下关键的点

  • 两个阶段:Leader Election、Log Replication
  • 三种角色:Leader、Candidate、Follower
  • 两种超时:Election Timeout(150~300ms随机)、Heartbeat Timeout(不要设置太小,要不然容易重新选主)
  • Follower 等待 Leader 指令若超过 Election Timeout,便成为 Candidate,并且进入下一轮选举(Term++)
  • Follower 收到心跳包(以及 Leader 的消息、Candidate 的 Vote 请求)会重置 Election Timeout 和更新 Term
  • Candidate 得到超过半数的投票才会变成 Leader。这能保证在每一个 Term 中,只会有一个 Leader。
  • Candidate 变成 Leader 后会给所有节点发送一条 Append Entries 的信息,告诉大家我是 Leader。
  • Candidate 若接收到 Leader 的 Hearbeat 或者下一个 Term,就会变成 Follower。
  • Candidate 会在每一个 Election Timeout 进入下一轮选举(Term++),并广播 Vote for me 请求
  • Client 修改数据时,请求是发送到 Leader,然后 Leader 再发送到其余所有节点,并在大多数节点确认后才在 Leader 上 Commit
  • 读写只通过 Leader,也就是 Raft 协议只满足 CAP 理论中的 CP 两个,因为在分区后,可能由于少数的原因,变成了不可用。
  • 新增/删除一个节点:新节点给 Leader 发出请求,Leader 往日志里添加一条 ConfChange 的日志,然后再同步到所有 Follower 里。注意在 Commit 之前,新节点就已经开始同步日志了。

欢迎留言>_<

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据