Raft之Leader选举简要
Posted 陌上发花缓缓醉
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Raft之Leader选举简要相关的知识,希望对你有一定的参考价值。
问题的大背景
C: consistent
A: available
P: partition
RAFT算法只能解决 C && A
如何解决?
LEADER 选举
日志复制 (下期会讲)
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选举简要的主要内容,如果未能解决你的问题,请参考以下文章
Raft协议实战之Redis Sentinel的选举Leader源码解析