1. 角色
a. Follower、Candidate、Leader
2. leader行为
a. 向follower同步日志
b. 定时向follower发送heartbeat
3. election-timeout:150ms - 300ms
4. 原理
a. 正常选举
i. 初始节点都是follower,并设定election-timeout
ii. 如果timeout周期内没有收到heartbeat,节点转变为candidate
iii. candidate向其他follower询问是否选举自己为leader,在收到过半数投票后,节点转变为leader,步进数+1
b. leader不可用
i. 与正常选举情况相同
ii. 当老leader复活后,因为步进数小于新leader,老leader转变为follower,丢弃所有uncommitted数据
c. follower不可用:follower复活后,重新从leader拉取日志
d. 多candidate
i. 如果多candidate得到的投票数相同时,candidate会随机选择等待间隔再次发起投票
ii. 直到多candidate的投票数不相同时,leader被选举出来
e. 多leader:步进数大的leader继续是leader,小的转变为follower
5. 读:节点都存有完整数据,支持读
6. 写
a. follower将uncommitted数据上报leader
b. leader发起投票,过半数follower同意后数据转为committed
c. leader同步给所有follower
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。