分布式一致性协议raft

一、简介

1、介绍

raft是一种分布式一致性,它是在multi-Paxos思想的基础上,做了一些简化和限制,只支持领导者、跟随者和候选人,相对于pasox而言更加简单,两者都旨在解决分布式系统中的数据一致性和高可用问题。

二、结构

1、服务器节点状态

  • 跟随者:就相当于普通群众,默默接受和处理来自领导的消息,当等待领导者心跳信息超时时,就主动站出来,推荐自己当候选人。
  • 候选人:候选人将向其他节点发送请求投票RPC信息,通知其他节点来投票,如果赢得大多数投票,就晋升当领导者。
  • 领导者:平常的主要工作内容就是处理写请求、管理日志复制和不断发送心跳信息。

注:raft算法时强领导者模型,集群中只能有一个。

2、选举领导者的过程

1、首先,初始状态下,集群中所有节点都是跟随者的状态
在这里插入图片描述
raft算法实现了随机超时时间的特性。也就是说,每个节点等待领导者节点心跳信息的超时时间间隔时随机的。通过上面图片可以看到,集群中没有领导者,而节点A的等待超时时间最小(150ms),它会最先因为没有等到领导者的心跳信息,发生超时。
2、这个时候,节点A就增加自己的任期编号,并推荐自己为候选人,先给自己投上一票,然后向其他节点发送请求投票RPC信息,请他们选举自己为领导者。
在这里插入图片描述
如果其他节点接收到候选人A的请求投票RPC消息,在编号为1的这届任期内,也还没进行过投票,那么它将把选票投给节点A,并增加自己的任期编号。
在这里插入图片描述
如果候选人在选举超时时间内赢得大多数选票,那么它就会成为本届任期内新的领导者。
在这里插入图片描述
节点A当选领导者后,他将周期性地发送心跳信息,通知其他服务我是领导者,阻止跟随者发起新的选举,篡权。
在这里插入图片描述

三、日志

1、介绍

在raft算法中,副本数据是以日志的形式存在的,日志由日志项组成,领导者接受到来自客户端写请求后,处理写请求的过程就是一个复制和应用日志项到状态及的过程。

2、日志项组成

日志项是一种数据格式,它主要包含用户指定的数据,也就是指令,还包含一些附加信息,比如索引值,任期编号
在这里插入图片描述

  • 指令:一条由客户端请求指定的,状态机需要执行的指令。我们可以理解成客户端指定的数据。
  • 索引值:日志项对应的整数索引值。它其实就是用来表示日志项的,是一个连续的,单调递增的整数号码。
  • 任期编号:创建这条日志的领导者的任期编号。

3、日志的复制

在这里插入图片描述
1、领导者接收到客户端请求后,领导者基于客户端请求中的指令,创建一个新日志项,并附加到本地日志中。
2、领导者通过日志复制RPC,将新的日志项复制到其他服务器。
3、当领导将日志项,成功复制到大多数的服务器上的时候,领导者会将这条日志项应用到它的状态机。
4、领导者将执行的结果返回给客户端
5、当跟随者接收到心跳信息,或者新的日志复制RPC消息后,如果跟随者发现领导者已经提交了某条日志项,而它还没应用,那么跟随者就将这条日志项应用到本地的状态机中。

4、领导者和跟随者保持数据一致性方法

  • PrevLogEntry:表示当前要复制的日志项,前面一条日志项的索引值。比如在图中,如果领导者将索引值为8的日志项发送给跟随者,那么此时PrevLogEntry值为7.
  • PrevLogTerm:表示当前要复制的日志项,前面一条日志项的任期编号,比如在图中,如果领导者将索引值为8的日志项发送给跟随者,那么此时PrevLogTerm值为4.

在这里插入图片描述
1、如果领导者通过日志复制RPC消息,发送当前最新日志项到跟随者(假设当前需要复制的日志项是最新的),这个消息的PrevLogEntry值为7,PrevLogTerm值为4.
2、如果跟随者在它的日志中,找不到与PrevLogEntry值为7,PrevLogTerm为4的日志项,也就是说它的日志和领导者不一致,那么跟随者就会拒绝接收新的日志项,并返回失败信息给领导者。
3、这时,领导者会递减要复制的日志项的索引值,并发送新的日志项到跟随者,这个消息的PrevLogEntry值为6,PrevLogTerm值为3.
4、如果跟随者在它的日志中,找到PrevLogEntry值为6、PrevLog为3的日志项,那么日志复制RPC返回成功,这样一来,领导者就知道在PrevLogEntry值为6,prevLogTerm值为3的位置,跟随者的日志项与自己相同。
5、领导着通过日志复制RPC,复制并更新覆盖掉该索引值之后的日志项(也就是不一致的日志项),最终实现了集群各节点日志的一致。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值