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. 如何理解UDP 和 TCP? 区别? 应用场景?

    一.UDP UDP(User Datagram Protocol),用户数据包协议,是一个简单的面向数据报的通信协议,即对应用层交下来的报文,不合并,不拆分,只是在其上面加上首部后就交给了下面的网络层 ...

  2. 记录--开发uniapp nvue App+微信小程序,我踩过的坑( 纯干货 )

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 最近接了个项目,采用uniapp的nvue开发安卓和ios端+小程序端,第一次开发nvue,对于css布局这块,还是踩了很多坑.以及一些u ...

  3. [MySQL]细节、经验

    [版权声明]未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://blog.csdn.net/m0_69908381/article/details/129922615 出自[进步* ...

  4. 简单c++构建第一人称

    本文内容为UE4.27的文档教程 GameMode确定 新建的项目会自动生成GameMode,如果有更改,而不是使用默认的GameMode类,就需要在引擎的设置中更改 角色的实现 前后左右移动 //前 ...

  5. Python爬取腾讯疫情实时数据并存储到mysql数据库

    思路: 在腾讯疫情数据网站F12解析网站结构,使用Python爬取当日疫情数据和历史疫情数据,分别存储到details和history两个mysql表. ①此方法用于爬取每日详细疫情数据 1 impo ...

  6. 正则表达式 (?<= 与 (?= 的区别

    (?=pattern) 正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串.这是一个非获取匹配, 也就是说,该匹配不需要获取供以后使用.例如,"Windows(?=95|98 ...

  7. MySQL分组数据和子查询

    分组数据 创建分组 mysql> SELECT vend_id,COUNT(*) AS num_prods FROM products GROUP BY vend_id; +---------+ ...

  8. Refresh Clean Code

    这是一本被前辈称赞, 另一个马丁的知名著作, 被赋予学习如何写出漂亮代码的教皇级手册, 最近(再)浏览, 有诸多感受. 总结一下就是如果你是新手, 可能看优秀的open source学习更好; 如果你 ...

  9. 21 JSONP

    JSONP 为了解决浏览器跨域问题. jquery提供了jsonp请求. 在网页端如果见到了服务器返回的数据是: ​ xxxxxxxxxxdjsfkldasjfkldasjklfjadsklfjasd ...

  10. 如何在OpenHarmony上使用SeetaFace2人脸识别库?

    简介 相信大部分同学们都已了解或接触过OpenAtom OpenHarmony(以下简称"OpenHarmony")了,但你一定没在OpenHarmony上实现过人脸识别功能,跟着 ...