Raft 一致性算法读书笔记
论文原文链接 In Search of an Understandable Consensus Algorithm Raft 保证一致性的 4 个重要组成部分: 领导人的选举,日志复制,安全性,集群成员的变化。 Raft 是一个强领导者算法,意思就是所有的数据以当前领导者(Leader)上的为准,领导者上有的就是正确的,领导者上没有的就是错误的。 5.1 Raft 的基本术语和概念 任期的概念:任期(term) 用来区分时间轴上不同的领导者,当领导者换了,日期也也立刻变更。raft 算法用 term 来表示一个 逻辑时钟,而不是用传统的几月几日几点几分几秒,term 是一个递增的整数,当领导者变了,term 也 +1。 集群中的每一个服务器都存储了一个 currentTerm,任意两个 server 要相互通信时都需要包含各自的 currentTerm。如果一个 server 的 currentTerm 值小于对方,那么它需要更新自己的值。如果 candidate 或者 leader 发现他们自己的 currentTerm 比其他人的要小,那个立马变成 follower。如果收到的请求包含一个旧的 currentTerm,直接忽略。 原论文的图 2 包含了大量的信息,我自己制作了下面四个图片。 5.2 领导人的选举 领导人不断的向集群中其他人发送心跳包,当集群中一个 server 在一段时间里没有收到领导人的心跳包,那么他就要起义,自己竞选当领导人。 开始一次选举 Follower 把自己的 term+1,身份转变成 Candidate,向集群中其他 server 发起请求投票 RPC,当他获得大多数选票时,就成功当选。 问题:他怎么知道 “大多数” 是多少?(etcd 的实现似乎是每个 server 知道集群里面有多少台服务器) ...