ITPub博客

首页 > 数据库 > NewSQL > Raft论文学习笔记

Raft论文学习笔记

原创 NewSQL 作者:assmdx 时间:2023-05-18 10:33:15 0 删除 编辑

核心包括3部分:leader选举,日志复制,集群扩容或缩容

本质上Raft是解决分布式一致性问题的,说白了就是分布式状态机之间的同步问题(同步真是个世界难题)


leader选举逻辑:

1. 节点有3个角色 Leader, Follwer, Candidate

2. 一个节点向其他节点发请求失败或超时都会发起新的选举,由Leader,Follwer转变为Candidate

3. 节点发送选举请求包含term(currentTerm + 1), candidateId, lastLogIndex, lastLogTerm

4. 节点收到其他节点的选举请求,判断:

1. 若term < currentTerm,返回拒绝该candidateId成为新Leader

2. 若candidateId的log包含当前节点最新的日志,返回同意,否则返回拒绝的信息


日志复制:

1. Leader会每隔一段时间发送保活心跳给其他Follwer,保持自己的Leader角色,以及将commitIndex传给Follwer,让Follwer及时将Log应用到自己的状态机上。

2. Leader收到Client发过来的raft log后,会先并发发给所有的follwer,同时写到自己本地的log[]里,follwer收到后持久化到本地,返回success给Leader,Leader收到半数(N/2)以上的success后,在自己本地将log应用到状态机上。

3. 若在第2步过程中出现宕机或超时时,出现新的选举,新的Leader会复制旧的未commit的log到所有节点上,在下次收到Client的log commit时,写入新的commitIndex(commit)


集群扩容或缩容

1. raft设计了一个过渡态

2. 新节点加入后,leader会降状态机和日志发给新节点(落后很多的话,会直接发快照),然后leader向所有节点发送扩容请求,同步新节点信息给follwer,集群进入过渡态

3. 若过度态发生选举,则选举产生的节点必须拿到新集群下的半数以上的选票和旧集群下半数以上的选票才能成为Leader,从而避免了脑裂问题的发生。(脑裂即分布式系统下出现2个leader的情况)


参考资料

raft论文: https:// raft .github.io/raft.pdf)

raft论文b站解读视频:https://www.bilibili.com/video/BV1pr4y1b7H5/

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70030130/viewspace-2952912/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2023-05-18

  • 博文量
    1
  • 访问量
    678