一文带你看懂Raft算法

概述

raft算法是一种分布式共识算法,主要解决的多节点共识一致性问题

举个例子,当我们去饭店吃饭时,怎么保证多个服务员的共识,而不出现一个客人来多个服务员涌上去服务,另一个客人来却没有一个服务员理他的尴尬局面;

一、节点角色

在raft算法中,节点有三种角色

1、leader:领导,接受客户端请求,并向follower同步请求日志

2、follower:候选人,接受leader同步的日志

3、candidate:候选者,选举过程中的临时角色

在这里插入图片描述

二、选举过程

初始状态下,所有节点都为follower,当follower节点未收到leader节点的日志或者心跳,此时follower节点会变candidate状态,并触发选举操作

1、候选人节点向其他节点发起投票通知

在这里插入图片描述

2、若候选人节点收到了大多数节点的投票,那么它就会升级成为leader节点

在这里插入图片描述
Raft算法将时间分为一个个的任期(term),每一个term的开始都是Leader选举。在成功选举Leader之后,Leader会在整个term内管理整个集群。如果Leader选举失败,该term就会因为没有Leader而结束

此时外部的请求会先下发到leader节点上,在通过leader节点两段式提交进行同步到follow节点上

三、leader节点与follower节点数据同步

两段式提交过程

1、leader节点先将数据提交至follower节点
在这里插入图片描述
2、leader节点统计到了大多数节点已经写入完成,将请求本地置为提交状态,并响应客户
在这里插入图片描述
3、leader节点通知大多数follower节点将数据置为提交状态
在这里插入图片描述

四、leader节点宕机了,怎么办?

如果leader节点与follower节点保存心跳连接,如果leader节点宕机,此时未收到心跳包的follower节点会在150ms - 300ms之间变成选举人角色,并触发选举流程
在这里插入图片描述

五、如果系统中有多个选举人节点怎么办?

按照刚才的流程,同一系统中可能出现,多个选举人节点,但是如果其中已经有一个选举人已经当选成leader节点,那么剩下的选举人节点该怎么办呢?

当选举人节点收到新的leader节点通知时,会自动退化为follower节点
在这里插入图片描述
问题:
若系统中出现网络分割,导致多个节点隔离,多地分别有自己任期内的Leader节点,当网络恢复,多节点间该如何共识呢?
提示:任期term

参考:
http://thesecretlivesofdata.com/raft/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值