Raft 共识算法2-领导者选举

Raft算法中译版地址:https://object.redisant.com/doc/raft中译版-2023年4月23日.pdf

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

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

Raft 使用心跳机制来触发领导者选举。 当服务器启动时,它们以跟随者的身份开始。 只要服务器从领导者或候选者那里收到有效的 RPC,它就会保持跟随者状态。 领导者定期向所有跟随者发送心跳(不携带日志条目的 AppendEntries RPC),以维护自己的权威。 如果跟随者在称为选举超时(election timeout)的一段时间内没有收到任何通信,那么它会假定没有可行的领导者并开始选举以选择新的领导者。

为了开始选举,追随者增加其当前任期并转换到候选者状态。 然后它为自己投票并向集群中的每个其他服务器并行发出 RequestVote RPC。 候选者一直处于这种状态,直到发生以下三种情况之一:(a)它赢得了选举,(b)其他服务器确立了自己的领导地位,或者(c)一段时间内没有赢家。这些结果将在下面的段落中分别讨论。

如果一个候选者在同一任期内获得了整个集群中大多数服务器的投票,那么它就赢得了选举。每台服务器在给定的任期内最多为一名候选者投票,以先到先得为原则(注:第5.4节对投票增加了一个额外的限制)。少数服从多数的原则保证了最多只有一名候选者能够在某一任期内赢得选举(@fig3 中的选举安全(Election Safety))。一旦一个候选者在选举中获胜,它就成为领导者。然后,它向所有其他服务器发送心跳信息,以建立其权威并防止新的选举。

在等待投票时,候选者可能会收到来自另一台声称是领导者的服务器的 AppendEntries RPC。 如果领导者的任期(包含在其 RPC 中)至少与候选者的当前任期一样大,则候选者承认领导者是合法的并返回到追随者状态。 如果 RPC 中的任期小于候选者的当前任期,则候选者拒绝 RPC 并继续处于候选者状态。

第三种可能的结果是候选者既不赢也不输:如果许多追随者同时成为候选者,则可以平分选票,从而没有候选者获得多数票。 发生这种情况时,每个候选者都会超时并通过增加其任期并启动另一轮 RequestVote RPC 来开始新的选举。 然而,如果不采取额外措施,分裂投票可能会无限期地重复。

Raft 使用随机化的选举超时(election timeout)来确保分裂投票很少见并且可以快速解决。 为了首先防止分裂投票,选举超时是从固定间隔(例如,150-300 毫秒)中随机选择的。 这分散了服务器,因此在大多数情况下只有一个服务器会超时; 它赢得了选举,并在其他服务器超时之前发出心跳。 相同的机制用于处理分裂投票。 每个候选者在选举开始时重新启动其随机选举超时,并在开始下一次选举之前等待该超时结束; 这减少了在新选举中再次出现分裂投票的可能性。 9.3 节展示了这种方法可以快速选出领导者。

选举是可理解性如何指导我们在设计方案之间做出选择的一个例子。 最初我们计划使用排名系统:为每个候选者分配一个唯一的排名,用于在竞争候选者之间进行选择。 如果一个候选者发现了另一个排名更高的候选者,它会回到追随者状态,以便排名更高的候选者更容易赢得下一次选举。 我们发现这种方法在可用性方面产生了微妙的问题(如果排名较高的服务器出现故障,排名较低的服务器可能需要超时并再次成为候选者,但如果时间过早,它可能会重置选举领导者的进程 ). 我们对算法进行了多次调整,但每次调整后都会出现新的极端情况。 最终我们得出结论,随机重试方法更加明显和易于理解。

Raft 共识算法2-领导者选举的更多相关文章

  1. raft共识算法

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

  2. Raft共识算法详解

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

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

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

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

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

  5. Raft 共识算法

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

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

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

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

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

  8. MIT 6.824 Lab2A Raft之领导者选举

    实验准备 实验代码:git://g.csail.mit.edu/6.824-golabs-2021/src/raft 如何测试:go test -run 2A -race 相关论文:Raft Exte ...

  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. 记录--npm, npx, cnpm, yarn, pnpm梭哈

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 依赖管理解决了在软件开发过程中管理和协调各种依赖项的问题,简化了开发流程,提高了项目的可靠性.可维护性和可重复性.它们帮助开发人员更高效地 ...

  2. 开发进阶系列:Java并发之从基础到框架

    一  线程基础 1.synchronized取得的锁都是对象锁,哪个线程执行synchronized修饰的方法,哪个线程就获得这个方法所属对象的锁.不同对象不同锁,互不影响. 另一种情况是static ...

  3. GitHub WebHook 使用教程

    本文收录于 Github.com/niumoo/JavaNotes,Java 系列文档,数据结构与算法! 本文收录于网站:https://www.wdbyte.com/,我的公众号:程序猿阿朗 什么是 ...

  4. 深度探索.NET Feature Management功能开关的魔法

    前言 .NET Feature Management 是一个用于管理应用程序功能的库,它可以帮助开发人员在应用程序中轻松地添加.移除和管理功能.使用 Feature Management,开发人员可以 ...

  5. KingbaseES使用sys_backup.sh脚本init初始化配置文件常见错误处理

    KingbaseES使用sys_backup.sh脚本init初始化配置文件常见错误处理: 一.sys_backup.sh脚本按照如下顺序寻找初始化配置文件: [kingbase@postgres ~ ...

  6. P图神器Lama下载介绍,一键移除图片中任何不想要的元素

    Lama是一个完全自托管的图像处理工具,基于最前沿的AIGC模型,它可以从图片中删除任何不需要的物体.缺陷或对象,却看不到一点修改痕迹~ 在以前,我们想将图片中的文字.水印去除,可以使用ps,但ps的 ...

  7. BIO ,NIO ,AIO

    一.同步阻塞I/O(BIO): 服务器实现模式: 一个连接一个线程,即客户端有连接请求时服务器就需要启动一个线程进行处理 弊端:如果这个连接不做任何事情会造成不必要的线程开销 解决措施:可以通过线程池 ...

  8. #SPFA,动态规划#洛谷 1772 [ZJOI2006]物流运输

    题目 分析 改变航线可以通过费用提前计算实现, 这样就不用增加次数这一维,也没有必要, 设\(dp[i]\)表示前\(i\)天的总费用 那么\(dp[i]=\min\{dp[j-1]+(i-j+1)* ...

  9. #区间dp,离散#D 弱者对决

    分析 设\(dp[i][j][x]\)表示当前区间为\([i,j]\),最小值为\(x\)的最大总分, 状态转移方程可以用后缀最大值优化到\(O(n^3m)\),主要难点是输出方案 后缀最大值需要记录 ...

  10. JDK14性能管理工具:Jconsole详解

    目录 简介 JConsole 概览 内存 线程 类 VM信息 MBean 总结 简介 我们在开发java项目的时候,或多或少都会去用到Java的性能管理工具.有时候是为了提升应用程序的性能,有时候是为 ...