Raft 算法
Raft
介绍
Raft是一种共识算法,旨在替代Paxos。 它通过逻辑分离比Paxos更容易理解,但它也被正式证明是安全的, Raft提供了一种在计算系统集群中分布状态机的通用方法, 确保集群中的每个节点都同意一系列相同的状态转换。主要确认日志和日志任期、Leader 信息 CAP理论是分布式最重要的实现Raft实现CP,Consistency(一致性)、Availability(可用性)、Partition Tolerance(分区容错性)
角色
Leader:管理整个集群,处理客户端请求,发起日志复制。 Follower:从节点,响应 Leader 的心跳和日志复制。 Candidate:当 Follower 在超时时间内未收到 Leader 的心跳时,它会变成 Candidate 并发起选举。
选举
Raft 集群启动由于没有 Leader 或 Leader 失效时,有些 Follower(各个节点节点超时是随机) 会变成 Candidate 并发起选举(一定有效期内) 进行投票, Candidate 发送自己日志信息去让 Follower 投票给自己(如果日志比自己大或者等于自己),如果超过半数得票就变成 Leader ,否则 等待进行下一轮选举
日志复制
日志复制是通过 Leader 向 Follower 附加上去(如果日志缺失很多,Follower 会恢复上一条日志信息),可能复数。当一条日志得到半数确认,那么它就是一提交状态(通过心跳确认已提交进度) 特殊: 当上 Leader 立即向 Follower 发送一条空日志来解决 no-op 问题
no-op 问题
这是一个极端问题 对应 论文:Figure 8 红色确认的日志,黄色未确认
Leader (A): 1,2,3,4,
Follower (B):1,2,3
Follower (C):1,2
A 如果此时无法工作了,那么 b 基本就是下一任 leader 。但是日志 3 是没有被确认的,导致 c 一直缺失日志, 解决方案:Leader 当选立即向 Follower 发送一条空日志来解决 。
B 当选是依赖未确认的日志 3 。即使后面 B 当选后写入日志未被确认日志 5 且立即无法工作,这种混乱时刻也能保证日志不混乱