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. Python 批量合并csv文件

    一.批量合并csv文件<方法1> import pandas as pd import glob import os # 获取所有CSV文件的路径 file_paths = glob.gl ...

  2. C# 日志监控软件 基于 FileSystemWatcher

    效果: 代码如下: using System; using System.Collections.Generic; using System.ComponentModel; using System. ...

  3. CPU上下文切换 CPU的调度策略

    CPU上下文切换 就是先把前一个任务的CPU上下文(也就是CPU寄存器和程序计数器)保存起来,然后加载新任务的上下文,到这些寄存器和程序计数器,最后再跳转到程序计数器所指的新位置,运行新任务. 根据任 ...

  4. MySQL连接数超出最大值报错及修改

    报错: create connection SQLException, url: jdbc:mysql://xx.xxx.x.xx:6306/hksk-cloud-mes?characterEncod ...

  5. archlinux启动virtualbox实例出现错误:内核驱动未安装

    参照 https://cn.linux-console.net/?p=22258 错误如下 Kernel driver not installed (rc=-1908) The VirtualBox ...

  6. ubuntu环境下因pie选项导致双击启动失败的问题

    在ubuntu环境下,链接可执行文件时增加-pie选项,双击可执行程序,无法正常启动. 对于这个现象,stackoverflow有个帖子,gcc creates mime type applicati ...

  7. go~istio加载wasm的步骤

    参考 https://github.com/higress-group/proxy-wasm-go-sdk/tree/main/proxywasm https://github.com/tetrate ...

  8. 官方直播丨“Hello Ability:从页面跳转开始”周三晚不见不散

    12月8日 19:00-20:30,Hello HarmonyOS系列课程的第四期"Hello Ability:从页面跳转开始"线上直播,将带你学习如何快速通过JS page间.A ...

  9. 第十九篇:Django ORM外键关联关系

    一.一对多的创建 二.一对多跨表操作 三.创建多对多 四.Ajax处识 五.模板继承与导入 六.自定义分页

  10. Hive 查看,删除分区

    查看所有分区 show partitions 表名; 删除一般会有两种方案 1.直接删除hdfs文件 亲测删除hdfs路径后 查看分区还是能看到此分区 可能会引起其他问题 此方法不建议 2. 使用删除 ...