raft选举算法

在分布式系统中,一致性指在集群中的多个节点在状态上达成一致。但在现实场景下,由于程序崩溃,网络故障,硬件故障,断电等原因,结点间的一致性很难保证,这样就需要Paxos,Raft等一致性协议。

Raft核心概念

leader身份:负责处理接收客户端交互请求,日志复制等,一般正常情况下只有一个leader。
follwer身份:类似选民,完全被动,在探测不到leader存在时,follwer在超时时间过后会转化为candidate。
candidate身份:候选人:可以被选为一个新的leader。
term:选举任期。
election timeout:选举超时时间。raft中是随机的。

Raft集群各个节点之间是通过RPC通讯传递消息的,每个节点都包含一个RPC服务端与客户端,初始时启动RPC服务端,状态设置为follwer。

Raft选举的三大规约

1.超过半数投票
2.节点只能相应任期号大于或等于自己任期的请求,投票后term+1.
3.同一个任期内(term)内只能选举一次

举例

系统初始化时,有4个节点,分别是a,b,c,d。
在election timeout的驱使下,follwer会转换成candidate,去拉取半数以上选举后就会当选leader。

正式流程:

1.加入a的随即时间最短,a醒来,term变为1(初始都是0),切换到candidate状态,首先投自己一票,并通知其余节点发起选举,等待其他节点的回复,根据来自其他节点的消息,可能有三种结果。
	1.1.a收到半数以上投票,当选leader(a的term大)。此时,a会给其他节点发送消息,避免其他节点发起新的选举。
	1.2.被告知别人已当选,a自行切换到follwer。
	1.3.一段时间内,所有节点都没有收到大部分选票,则保持candidate状态,重新发起选举,知道产生leader。
	

Raft协议总结

1.通过election timeout一定层度上解决了候选人争抢选票,导致的选举时间过长的问题。
2.Raft的优点,比Paxos算法更容易理解,而且更容易工程化实现。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值