Raft算法

简介

        Raft 算法是一种通过对日志复制管理来达到集群节点一致性的算法。这个日志复制管理 发生在集群节点中的 Leader 与 Followers 之间。Raft 通过选举出的 Leader 节点负责管理日志 复制过程,以实现各个节点间数据的一致性。

角色、任期及角色转变

        在 Raft 中,节点有三种角色:

Leader:唯一负责处理客户端写请求的节点;也可以处理客户端读请求;同时负责日志 复制工作

Candidate:Leader 选举的候选人,其可能会成为 Leader。是一个选举中的过程角色

Follower:可以处理客户端读请求;负责同步来自于 Leader 的日志;当接收到其它 Cadidate 的投票请求后可以进行投票;当发现 Leader 挂了,其会转变为 Candidate 发起 Leader 选举。

leader 选举

(1) 我要选举

       若 follower 在心跳超时范围内没有接收到来自于 leader 的心跳,则认为 leader 挂了。此 时其首先会使其本地 term 增一。然后 follower 会完成以下步骤:

1.此时若接收到了其它 candidate 的投票请求,则会将选票投给这个 candidate

2.由 follower 转变为 candidate

3.若之前尚未投票,则向自己投一票  向其它节点发出投票请求,然后等待响应。

(2) 我要投票

follower 在接收到投票请求后,其会根据以下情况来判断是否投票:

1.发来投票请求的 candidate 的 term 不能小于我的 term

2.在我当前 term 内,我的选票还没有投出去

3.若接收到多个 candidate 的请求,我将采取 first-come-first-served 方式投票

(3) 等待响应

当一个 Candidate 发出投票请求后会等待其它节点的响应结果。这个响应结果可能有三 种情况: 1.收到过半选票,成为新的 leader。然后会将消息广播给所有其它节点,以告诉大家我是 新的 Leader 了

2.接收到别的 candidate 发来的新 leader 通知,比较了新 leader 的 term 并不比自己的 term 小,则自己转变为 follower

3.经过一段时间后,没有收到过半选票,也没有收到新 leader 通知,则重新发出选举

(4) 选举时机

 在很多时候,当 Leader 真的挂了,Follower 几乎同时会感知到,所以它们几乎同时会变 为 candidate 发起新的选举。此时就可能会出现较多 candidate 票数相同的情况,即无法选举 出 Leader。 为了防止这种情况的发生,Raft 算法其采用了 randomized election timeouts 策略来解决 这个问题。其会为这些 Follower 随机分配一个选举发起时间 election timeout,这个 timeout 在 150-300ms 范围内。只有到达了 election timeout 时间的 Follower 才能转变为 candidate, 否则等待。那么 election timeout 较小的 Follower 则会转变为 candidate 然后先发起选举,一 般情况下其会优先获取到过半选票成为新的 leader。

后续内容,关注博主私信访问~

  • 22
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

航小张

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值