Raft之Leader选举简要

Posted 陌上发花缓缓醉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Raft之Leader选举简要相关的知识,希望对你有一定的参考价值。


  1. 问题的大背景

    • C: consistent

    • A: available

    • P: partition

  2. RAFT算法只能解决  C && A

  3. 如何解决?

    • LEADER 选举

    • 日志复制 (下期会讲)

  4. Leader 选举具体策略: 角色与对应职责(状态与状态维护)


    • follower(低层): 所有节点init的时候的状态

      • route write request to leader

      • handleAppendEntries: 处理同步日志请求

      • 维护一个term(相当于mvcc,但是term 越大层级越高) 和 one vote ticket

      • 维护 heart_beat_timer (rand between 150~300 ms:防止并发发起leader选举,leader选举采用first in first become leader 的策略)

      • vote 时机(receive vote request): self.not_yet_vote && vote_request.term >= self.term

      • heart_beat_timer run out: term += 1 and become candidate


    • candidate(中层):follower=>leader的中间状态

      tips: 如果没有candidate,follower会有比较大的概率处于无限制的竞选成为leader的状态

      • sendRequestVote()

      • 清点票数决定成为 Leader  or  Follower


    • leader(高层):

      • 处理写请求(会在日志接下来的日志复制详细讲)

      • 周期性发送心跳

      • 处理msg from lower level(日志复制)


以上是关于Raft之Leader选举简要的主要内容,如果未能解决你的问题,请参考以下文章

Consul 核心原理解析之-Raft leader选举

Raft算法之选举篇

Raft协议实战之Redis Sentinel的选举Leader源码解析

分布式选举-Raft算法-1 Leader选举 原理

Raft协议实战之Redis Sentinel的选举Leader源码解析

Raft协议实战之Redis Sentinel的选举Leader源码解析