分布式一致性算法-Raft学习笔记

本文详细介绍了Raft算法的角色与状态转换、相关概念、消息种类和事件流程,阐述了如何通过Raft实现分布式一致性,与Paxos算法的区别及选举策略,以及在状态机复制中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分布式一致性算法-Raft学习笔记

版权声明:本文为博主原创文章,未经博主允许不得转载。

手动码字不易,请大家尊重劳动成果,谢谢

作者:http://blog.youkuaiyun.com/wang_wbq

Raft在Leader选举阶段使用term编号作为提案编号来执行paxos算法进行leader选举,为了防止活锁出现,Raft算法使用了随机定时器的策略避开了同时竞争Leader的可能。在日至提交阶段,算法保证了Leader要拥有全部日志,并且Client只能与Leader交流,提交日志。Leader利用两阶段提交和大多数集合确认的方式来确保日志被成功保存。其算法和Zookeeper的ZAB算法有一定相似性。

Raft算法中角色和存储

不同于Paxos算法,Raft算法中只有一种角色。这个角色可以有三种状态:
1、Follower
2、Candidate
3、Leader

在每台机器上都会存储:
1、currentTerm:当前节点所能看到的最大的term值,该值单调增加
2、votedFor:当前term里将票投给的对象,如果尚未投票则为空
3、log[]:日志条目,会按顺序作用于状态机
4、commitIndex:当前节点最后一个被提交的日志序号
5、lastApplied:当前节点最后一条被应用于状态机的日志序号,如果发现当前机器commitIndex > lastApplied则应该将本机log[]中序号为(lastApplied, commitIndex]的部分应用到状态机
6、snapshot:如果做了日志快照则会存储快照镜像

在状态为Leader机器上会额外存储:
1、nextIndex[]:针对每个其他节点,下一个需要发送的日志的序号
2、matchIndex[]:针对每个其他节点,当前所知的和Leader匹配的最大日志编号

Raft算法中的相关概念

1、Leader:当前集群中的领导者(干活最多的),一个Raft集群只能有一个Leader持久存在
2、Candidate:Leader候选人,当接收到多数投票后会成为Leader
3、Follower:跟随者,接受Leader的日志存储、应用请求,拥护Leader的地位
4、term:Leader的选举周期(假设所有机器都是从0开始),在一个Raft集群内单调递增。在一个term周期内,只能有一个Leader当选。这个概念和paxos算法中的提案号一致

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值