首页 > 其他分享 >Raft笔记

Raft笔记

时间:2022-12-06 17:11:42浏览次数:71  
标签:状态 笔记 节点 状态机 follower Raft Leader

内容参考自:解读共识算法Raft(1)简介和状态简化

出自Lamport的《In Search of an Understandable Consensus Algorithm》

1. Raft把共识算法分为三个子问题:Leader Election、Log Replication、Safety

2. 状态简化。只有三个状态,并且通信只通过两类RPC完成。

复制状态机(RSM Replication State Machine)

相同的初始状态+相同的输入=相同的结束状态。即“在多个节点上面,从相同的初始状态执行相同的一串命令,一定会产生相同的结束状态”。

Leader将客户请求command封装到一个个log entry日志实体中,将log entries复制到所有的follower节点,大家按照相同的顺序应用log entries中的command,根据复制状态机理论,大家的结束状态一定是一致的。Client无论查询哪个节点的状态机,只要节点应用了日志,那么查询结果就是一样的。

使用共识算法就是为了实现复制状态机,因为一个分布式场景下的各节点间,就是通过共识算法来保证命令序列的一致,从而始终保持它们的状态一致,从而实现了高可用。

复制状态机和主备复制:

复制状态机更强大,例如,两个副本,一个行存储,一个列存储,它们初始数据相同,那么只要持续发给它们相同的命令,那么同一时刻从两个副本中读取到的结果也是一样的,这是一种HTAP的实现方法。

状态简化

任何时刻,每一个服务器节点处于Leader、Follower、Candidate三个状态之一。相比Paxos,Raft只需要考虑状态之间的切换,不需要考虑状态之间共存和互相影响。

  1. 任何节点启动时都是follower状态。
  2. 如果察觉到集群中没有Leader的话,它会把自己从follower状态切换到candidate状态。
  3. 在candidate中经历一次或者多次选举,最终根据选举的结果决定自己切换到leader状态,或者切换回follower状态。选举成功就切换到Leader状态,并在Leader状态下为客户端提供服务。
  4. 如果在Leader状态下的任期已经结束,或者自身发生宕机或者其它问题,那么它会切换到follower状态并进行下一次循环。

Raft把时间划分为多个任期,每一个任期都以一次选举开始,如果选举没有选举出Leader就会重新开始一个任期以及新的一次选举。

Raft算法中服务器节点之间使用RPC进行通信,Raft中只有两种主要的RPC。

1. RequestVote RPC。由Candidate在选举期间发起。

2. AppendEntries RPC。由Leader发起,用来复制日志和提供一种心跳机制。

Raft为RPC提供了其他功能,服务器之间通信的时候会交换当前的任期号。用来更新为较大的任期号。

如果一个Candidate或者Leader发现自己的任期号过期了,就会回到Follower状态。

领导者选举

Raft内部有一种心跳机制,如果存在Leader,那么这个Leader就会周期性地向所有follower发送心跳来维持自己的地位,如果follower一段时间没有收到心跳,那么他就会认为系统中没有可用的leader了,然后开始进行选举。

 

标签:状态,笔记,节点,状态机,follower,Raft,Leader
From: https://www.cnblogs.com/zhaoke271828/p/16955868.html

相关文章

  • (笔记)关于Typora提示”This beta version of Typora is expired...“的解决办法
      一、问题使用老版本Typora时,会提示下文,并跳转至typora官网,从而没有使用。  二、解决办法修改Typora相应注册表的权限(作为旧版本失效后的一种补充):打开......
  • UML画图笔记
    提纲:1:面向对象技术2:模型与可视化建模3:什么是UML4:UML发展历史5:软件过程6:UML工具7:UML构成8:UML实例9:UML在软件开发各个阶段的应用。 一:面向对象技术二:软件质......
  • 操作系统笔记
    第一章一:什么是操作系统覆盖在硬件和操作软件中间的一个系统,和硬件部分相互作用,主要起一个承上启下的任务二:资源的管理者现代计算机支持多任务,多......
  • 操作系统笔记总结
    操作系统一:什么是操作系统覆盖在硬件和操作软件中间的一个系统,和硬件部分相互作用,主要起一个承上启下的任务二:资源的管理者现代计算机支持多任务,多个应用程序共同使用......
  • [个人学习笔记]卫生统计学R语言代码总结
    卫生统计学R语言代码总结目录前言不同分布相关函数统计描述数值变量集中位置离散程度正态性检验分类变量t检验方差分析假设检验两两比较秩和检验......
  • krping学习笔记 (1)
    krpingKriping是一个内核态的rdmaping-pong程序,其使用rdma读写的方式实现了数据在server-client间的ping-pong式传递.如下图所示,在开始数据传输前,client会先将......
  • 刷题笔记——2997.梯形面积
    题目2997.梯形面积代码h=(2*150)/15s=((15+25)*h)/2print('%.2f'%s)笔记使用占位符方法保留小数%g,科学计数法输出小数,会舍弃无效的部分print(......
  • HTML-学习笔记02
    HTML13、样式器+标签选择器内部样式表<html> <head> <metacharset="utf-8"> <title></title> <!--内部样式表--> <style> /*标签选择器*/ h1{ ......
  • ES6笔记 - 函数参数扩展 与 箭头函数
    函数的扩展目录函数的扩展1.函数的默认值1.1解构赋值默认值与函数默认值1.2参数默认值的位置2.rest参数3.箭头函数3.1基础用法3.2箭头函数中的this3.3用途1.函......
  • C语言第二课学习笔记--运算符,流程控制和函数
    <7>运算符1)分类:一些基本的运算符分类有:算术、关系、逻辑、赋值算术运算符有:+,-,*,/,%;    对于/被除数和除数都是int则结果是int,有一个是float结果就是float;对于%,被......