Raft 共识算法1-Raft基础

Raft算法中译版地址:http://www.redisant.cn/etcd/contact

英原论文地址:https://raft.github.io/raft.pdf

Etcd Assistant 是一款 etcd 可视化管理软件,便捷高效地操作您的 etcd 集群;支持多种键的视图;管理租约、用户、角色和权限。

Raft 是一种用于管理第 2 节中描述的形式的复制日志的算法。@fig2 以压缩形式总结了该算法以供参考,@fig3 列出了该算法的关键属性; 这些图片中的元素将在本节的其余部分进行分段讨论。

Raft 通过首先选举一个领导者来实现共识,然后让领导者完全负责管理复制的日志。 领导者接受来自客户端的日志条目,将它们复制到其他服务器上,并告诉服务器何时可以安全地将日志条目应用到它们的状态机。 拥有领导者可以简化复制日志的管理。 例如,领导者可以在不咨询其他服务器的情况下决定在日志中放置新条目的位置,并且数据以简单的方式从领导者流向其他服务器。 领导者可能会失败或与其他服务器断开连接,在这种情况下会选举出新的领导者。

考虑到领导方法,Raft将共识问题分解为三个相对独立的子问题,在后面的小节中讨论:

  • 领导者选举(Leader election):当现有领导者失败时,必须选择新的领导者(第 5.2 节)。
  • 日志复制(Log replication):领导者必须接受来自客户端的日志条目并在集群中复制它们,强制其他日志与其自己的日志一致(第 5.3 节)。
  • 安全性(Safety):Raft 的关键安全属性是 @fig3 中的状态机安全属性:如果任何服务器已将特定日志条目应用到其状态机,则没有其他服务器可以对同一日志索引应用不同的命令。 5.4 节描述了 Raft 如何确保这个属性; 该解决方案涉及对第 5.2 节中描述的选举机制的额外限制。

Raft 保证这些属性中的每一个在任何时候都是真实的。 节号表示讨论每个属性的位置。

在介绍了共识算法之后,本节讨论可用性问题和计时在系统中的作用。

Raft 基础

一个 Raft 集群包含多个服务器; 五是一个典型的数字,它允许系统容忍两次故障。 在任何给定时间,每个服务器都处于三种状态之一:领导者(leader)、追随者(follower)或候选者(candidate)。 在正常操作中,只有一个领导者,所有其他服务器都是追随者。 追随者是被动的:他们不自己发出请求,只是简单地响应领导者和候选者的请求。 领导者处理所有客户端请求(如果客户端请求跟随者,则跟随者将其重定向到领导者)。 第三种状态,候选者,用于选举新的领导者,如第 5.2 节所述。 @fig4 显示了状态及其转换; 下面讨论这种转换。



Raft 共识算法的简要总结(不包括成员变更和日志压缩)。 左上框中的服务器行为被描述为一组独立且重复触发的规则。 §5.2 等节号表示讨论特定功能的位置。 正式规范更准确地描述了该算法。



服务器状态。 追随者只响应来自其他服务器的请求。 如果一个追随者没有收到任何通讯,它就成为候选者并发起选举。 从整个集群中获得大多数选票的候选者成为新的领导者。 领导者通常会一直运作到失败为止。

Raft 将时间划分为任意长度的任期(term),如 @fig5 所示。任期用连续的整数编号。 每个任期都以选举开始,其中一名或多名候选者试图成为第 5.2 节所述的领导者。如果候选人赢得选举,那么它将在该任期的剩余时间内担任领导者。 在某些情况下,选举会导致分裂投票。 在这种情况下,任期将以没有领导者结束; 新任期(包括新选举)即将开始。 Raft 确保在给定任期内至多有一个领导者。



时间分为任期,每个任期从选举开始。 选举成功后,一个领导者管理集群直到任期结束。 有些选举失败,在这种情况下,任期结束时不会选择领导者。 可以在不同服务器上的不同时间观察到任期之间的转换。

不同的服务器可能会在不同的时间观察任期之间的转换,并且在某些情况下,服务器可能不会观察到选举甚至整个任期。 任期在 Raft 中充当逻辑时钟,它们允许服务器检测过时的信息,例如陈旧的领导者。 每个服务器存储一个当前任期号,它随时间单调增加。 每当服务器通信时,都会交换当前任期; 如果一个服务器的当前任期小于另一个,则它将其当前任期更新为较大的值。 如果候选者或领导者发现其任期已过期,则会立即恢复为追随者状态。 如果服务器收到带有陈旧任期号的请求,它会拒绝该请求。

Raft 服务器使用远程过程调用 (RPC) 进行通信,基本的共识算法只需要两种类型的 RPC。 RequestVote RPC 由候选者在选举期间发起(第 5.2 节),AppendEntries RPC 由领导者发起以复制日志条目并提供一种心跳形式(第 5.3 节)。 第 7 节添加了第三个 RPC,用于在服务器之间传输快照。 如果服务器没有及时收到响应,它们会重试 RPC,并且它们会并行发出 RPC 以获得最佳性能。

Raft 共识算法1-Raft基础的更多相关文章

  1. 分布式共识算法 (三) Raft算法

    系列目录 分布式共识算法 (一) 背景 分布式共识算法 (二) Paxos算法 分布式共识算法 (三) Raft算法 分布式共识算法 (四) BTF算法 一.引子 1.1 介绍 Raft 是一种为了管 ...

  2. raft共识算法

    raft共识算法 分布式一致性问题 如果说,服务器只有一个节点,那么,要保证一致性,没有任何问题,因为所有读写都在一个节点上发生.那如果server端有2个.3个甚至更多节点,要怎么达成一致性呢?下面 ...

  3. Raft共识算法详解

    Raft共识算法 一.背景 拜占庭将军问题是分布式领域最复杂.最严格的容错模型.但在日常工作中使用的分布式系统面对的问题不会那么复杂,更多的是计算机故障挂掉了,或者网络通信问题而没法传递信息,这种情况 ...

  4. 【翻译】Raft 共识算法:集群成员变更

    转载请注明出处:https://www.cnblogs.com/morningli/p/16770129.html 之前都在集群配置是固定的(参与共识算法的server集合)假设下讨论raft.在实践 ...

  5. Fabric2.x中Raft共识算法核心数据结构

    一.共识算法可插拔的代码体现Chain接口 Hyperledger Fabric的共识算法是可插拔的,在代码上体现为Chain接口,所有不同的共识算法均可根据Chain接口进行具体实现,目前fabri ...

  6. Raft 共识算法

    转载请注明出处:https://www.cnblogs.com/morningli/p/16745294.html raft是一种管理复制日志的算法,raft可以分解成三个相对独立的子问题: 选主(L ...

  7. Hyperledger Fabric无排序组织以Raft共识算法启动多个Orderer服务、多组织共同运行维护Orderer服务

    前言 在Hyperledger Fabric无系统通道启动及通道的创建和删除中,我们已经完成了以无系统通道的方式启动 Hyperledger Fabric 网络,并将链码安装到指定通道.但目前为止,实 ...

  8. Raft一致性共识算法论文学习

    论文地址:https://pdos.csail.mit.edu/6.824/papers/raft-extended.pdf 看完raft共识算法,脑袋非常懵,所以写一篇学习笔记,记录一下. raft ...

  9. Fabric2.2中的Raft共识模块源码分析

    引言 Hyperledger Fabric是当前比较流行的一种联盟链系统,它隶属于Linux基金会在2015年创建的超级账本项目且是这个项目最重要的一个子项目.目前,与Hyperledger的另外几个 ...

  10. docker swarm英文文档学习-12-在集群模式中的Raft共识

    Raft consensus in swarm mode 在集群模式中的Raft共识 当Docker引擎在集群模式下运行时,manager节点实现Raft 共识算法来管理全局集群状态.Docker s ...

随机推荐

  1. 记录--微信调用jssdk全流程详解

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 微信调用jssdk全流程详解 系统框架使用的是前后端分离,前端使用vant,后端是springboot 一.网页授权的时序图 二.公众号配 ...

  2. 记录--Uniapp + TypeScript 配置文档

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 0 目标 使用 uniapp  + TypeScript 为基础栈进行小程序开发 uniapp 是一个使用 Vue.js 开发所有前端应用 ...

  3. Redis高可用之战:主从架构

    ★ Redis24篇集合 1 主从模式介绍 在笔者的另外两篇文章 <Redis系列:RDB内存快照提供持久化能力>.<Redis稳定性之战:AOF日志支撑数据持久化>中,我们介 ...

  4. ue4-c++定时器和时间轴简易模板

    定时器Delay 在头文件中需要声明TimerHandle和功能函数,功能函数是计时结束后执行的功能 在源文件中利用GetWorldTimerManager()实现定时器的开启(绑定功能函数)和清除. ...

  5. 字符串 Hash 的一些应用

    字符串 Hash 可以快速的解决一类需要字符串匹配的问题.同时还可以以较小的思维量和代码量通过一些难题. P3809 [模板]后缀排序,这题的正解显然是 $\mathcal{O}(n\log n)$ ...

  6. #错排,组合计数#洛谷 4071 [SDOI2016]排列计数

    题目 多组询问长度为\(n\)的排列中恰好有\(m\)个数对号入座的排列数 分析 首先\(n\)个数中选择\(m\)个数放入那\(m\)个位置显然是\(C(n,m)\) 剩下就是错排\(D(n)=(n ...

  7. 快捷转换/互转 Markdown 文档和 TypeScript/TypeDoc 注释

    背景 作为文档工具人,经常需要把代码里面的注释转换成语义化的 Markdown 文档,有时也需要进行反向操作.以前是写正则表达式全局匹配,时间长了这种方式也变得繁琐乏味.所以写了脚本来互转,增加一些便 ...

  8. 共筑使能千行百业的数字底座 | HDC 2022松湖对话顺利召开

     11月5日,华为开发者大会2022松湖对话在东莞松山湖凯悦酒店召开,开放原子开源基金会秘书长冯冠霖.华为终端BG软件部总裁龚体.深圳国家金融科技测评中心董事长钟剑.鸿湖万联(江苏)科技发展有限公司董 ...

  9. 想学习eTS开发?教你开发一款IQ-EQ测试应用

    原文:https://mp.weixin.qq.com/s/eZgifjirAW58dFCa0W7kSQ,点击链接查看更多技术内容. 开发者Mack基于HarmonyOS的ArkUI框架开发的IQ- ...

  10. IIS 动态与静态压缩

    前言 我们有时候需要在页面启动的时候进行压缩代码,这时候iis已经帮助我们做好了动态压缩代码. 正文 静态压缩及动态压缩的区别 IIS7中的HTTP压缩分为"静态内容压缩"和&qu ...