温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

一致性算法Raft分为哪些模块

发布时间:2021-12-31 09:23:38 来源:亿速云 阅读:158 作者:iii 栏目:大数据

这篇文章主要介绍“一致性算法Raft分为哪些模块”,在日常操作中,相信很多人在一致性算法Raft分为哪些模块问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”一致性算法Raft分为哪些模块”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

一:一致性算法Raft

Raft 算法:Raft 是一种为了管理复制日志的一致性算法,Raft提供了和Paxos算法相同的功能和性能,但是它的算法结构和Paxos不同。

Raft将一致性算法分解成了3模块:

  1. 领导人选举

  2. 日志复制

  3. 安全性

二个阶段:首先是选举过程,然后在选举出来的领导人带领下进行正常操作,比如日志复制等。

1.1 领导人选举

在Raft中,任何时候一个服务器都可以扮演下面的角色之一:

领导者(leader):处理客户端交互,日志复制等动作,一般一次只有一个领导者
候选者(candidate):候选者就是在选举过程中提名自己的实体,一旦选举成功,则成为领导者
跟随者(follower):类似选民,完全被动的角色,这样的服务器等待被通知投票

Raft使用心跳机制来触发选举。当server启动时,初始状态都是follower。每一个server都有一个定时器,超时时间为election timeout(一般为150-300ms),如果某server没有超时的情况下收到来自领导者或者候选者的任何消息,定时器重启,如果超时,它就开始一次选举。

  1. 初始状态下集群中的所有节点都处于 follower 状态。
    一致性算法Raft分为哪些模块

  2. 某一时刻,其中的一个 follower 由于没有收到 leader 的 heartbeat 率先发生 election timeout 进而发起选举。
    一致性算法Raft分为哪些模块

  3. 只要集群中超过半数的节点接受投票,candidate 节点将成为即切换 leader 状态。
    一致性算法Raft分为哪些模块

  4. 成为 leader 节点之后,leader 将定时向 follower 节点同步日志并发送 heartbeat。
    一致性算法Raft分为哪些模块

1.2 可能遇到的节点异常

1)leader 不可用
  1. 一般情况下,leader 节点定时发送 heartbeat 到 follower 节点,由于某些异常导致 leader 不再发送 heartbeat ,或 follower 无法收到 heartbeat 。

  2. 当某一 follower 发生 election timeout(超时机制,该时间内未收到心跳包) 时,其状态变更为 candidate,并向其他 follower 发起投票。

  3. 当超过半数的 follower 接受投票后,这一节点将成为新的 leader,leader 的步进数加 1 并开始向 follower 同步日志。

当一段时间之后,如果之前的 leader 再次加入集群后:

  1. 两个 leader 比较彼此的步进数,步进数低的 leader 将切换自己的状态为 follower。

  2. 较早前 leader 中不一致的日志将被清除,并与现有 leader 中的日志保持一致。

2)follower 节点不可用

follower 节点不可用的情况相对容易解决。因为集群中的日志内容始终是从 leader 节点同步的,只要这一节点再次加入集群时重新从 leader 节点处复制日志即可。

3)多个 candidate

多个 candidate 比较容易出现在集群节点启动初期尚未选出 leader 的“混沌”时期。

  1. 初始状态下集群中的所有节点都处于 follower 状态,此时两个节点同时成为 candidate 发起选举。

一致性算法Raft分为哪些模块

  1. 两个 candidate 都只得到了少部分 follower 的接受投票。

一致性算法Raft分为哪些模块

  1. candidate 继续向其他的 follower 询问,由于一些 follower 已经投过票了,所以均返回拒绝接受。

一致性算法Raft分为哪些模块 一致性算法Raft分为哪些模块

  1. candidate 也可能向另一个 candidate 询问投票,在步进数相同的情况下,candidate 将拒绝接受另一个 candidate 的请求。

一致性算法Raft分为哪些模块 一致性算法Raft分为哪些模块

  1. 由于第一次未选出 leader,candidate 将随机选择一个等待间隔(150ms ~ 300ms)再次发起投票,如果得到集群中半数以上的 follower 的接受,这一 candidate 将成为 leader。

一致性算法Raft分为哪些模块 一致性算法Raft分为哪些模块

  1. 稍后另一个 candidate 也将再次发起投票,由于集群中已经选出 leader,candidate 将收到拒绝接受的投票。

一致性算法Raft分为哪些模块 一致性算法Raft分为哪些模块

  1. 在被多数节点拒绝之后,并已知集群中已存在 leader 后,这一 candidate 节点将终止投票请求、切换为follower,从 leader 节点同步日志。

一致性算法Raft分为哪些模块

1.3 日志复制(保证数据一致性)

日志复制的过程

Leader选出后,就开始接收客户端的请求。Leader把请求作为日志条目(Log entries)加入到它的日志中, 然后并行的向其他服务器发起 AppendEntries RPC复制日志条目。当这条日志被复制到大多数服务器上,Leader 将这条日志应用到它的状态机并向客户端返回执行结果。

下图表示了当一个客户端发送一个请求给领导者,随后领导者复制给跟随者的过程如下:

一致性算法Raft分为哪些模块

  • 客户端的每一个请求都包含被复制状态机执行的指令。

  • leader把这个指令作为一条新的日志条目添加到日志中,然后并行发起 RPC 给其他的服务器,让他们复制这条信息。

  • 跟随者响应ACK,如果 follower 宕机或者运行缓慢或者丢包,leader会不断的重试,直到所有的 follower 最终都复制了所有的日志条目。

  • 通知所有的Follower提交日志,同时领导人提交这条日志到自己的状态机中,并返回给客户端。

可以看到,直到第四步骤,整个事务才会达成。中间任何一个步骤发生故障,都不会影响日志一致性。

到此,关于“一致性算法Raft分为哪些模块”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI