Raft算法系列教程1:Leader选举

Nacos源码分析之Raft协议(一)----Leader选举 Nacos一致性协议 分布式一致性协议有很多,例如Paxos协议,Zab协议,Raft协议,而Nacos采用的是Distro协议和Raft协议。对于非临时数据,Nacos采用的是Raft协议,而临时数据Nacos采用的是Distro协议。简单说一下Distro,Distro协议被定位为临时数据的一致性协议:该类型协议不需要把数据存储到磁盘或者数据库,因为临时数据通常和服务器保持一个session会话,该会话只要存在,数据就不会丢失。本篇文章主要针对于CP的Raft算法。 Raft协议 Raft协议是一种强一 阅读详情

Raft将分布式一致性分解为多个子问题:Leader选举(Leader election)、日志复制(Log replication)、安全性(Safety)、日志压缩(Log compaction)等。本系列内容将逐个子问题进行介绍,欢迎大家关注和收藏,本系列不断有更新,请记得回头查阅!

1、服务器的三种角色

Raft算法中服务器主要分为三种角色:Leader、Follower、Candidate,并且三种角色相互独立,也就是服务器在同一时间内只可能扮演其中一种角色。

Leader:用于对所有用户的请求进行处理以及日志的复制等等。
Follower:不会主动发送消息,只响应来自Leader与Candidate的请求。
Candidate:用于选举新的Leader。

2、任期介绍

Raft 算法将时间划分成为任意不同长度的任期(term)。任期用连续的数字进行表示。每一个任期的开始都是一次选举(election),一个或多个候选人会试图成为领导人。如果一个候选人赢得了选举,它就会在该任期的剩余时间担任领导人。在某些情况下,选票会被瓜分,有可能没有选出领导人,那么,将会开始另一个任期,并且立刻开始下一次选举。Raft 算法保证在给定的一个任期最多只有一个领导人。

3、网络状态

网络状态分为两种情况:选举阶段,正常运行阶段。备注:网络状态还可能会有成员变化阶段,暂时先不考虑。

每一个任期都是以选举阶段开始。但不一定以正常运行阶段结束。在某些情况下一个完整的任期可能全部为选举阶段。如下图:

在这里插入图片描述

4、选举阶段->正常运行阶段

在网络初始化时,网络中所有的服务器都以Follower的角色启动。由于Follower只被动接收消息,所以全网中所有服务器都处于等待状态。同时每一个服务器都在本地维护一个计时器。计时器的作用很简单,就是判断当前阶段(选举阶段或正常运行阶段)是否超时,而当计时器超时后,任期将会加1。

总之,在网络启动后所有服务器等待指定长度的一段时间之后,计时器将会超时。这时候计时器超时的服务器将转换自己的角色为Candidate,从而进入选举阶段。进入选举阶段的Candidate将会做以下几件事:

(1)将自己的任期号加1。
(2)为自己投一票用以选举出新的Leader。
(3)将本地的计时器重置。
(4)发送投票请求到网络中的其他所有的服务器。
(5)等待下一次的计时器超时。

同时,投票选举Leader具有以下几点要求:

(1)每个服务器在一个任期内只能投一票,并且只能投先到者(即投票给自己收到的第一个请求)。如果没有先到者,只能投票选自己了。
(2)请求投票的消息中需要带有请求者所处的当前任期号。
(3)投票者只会投票给任期号大于等于自己当前任期号的服务器。

在选举状态会出现三种结果:

(1)自己成功当选Leader
(2)网络中其他服务器当选Leader
(3)网络中没有服务器当选Leader

在这里插入图片描述

当网络中某一个Candidate接收到网络中大多数成员的投票后,即可将自己的身份转换为Leader。在当选Leader后,该服务器将周期性地发送心跳信息(心跳信息包含成功当选Leader的服务器的当前任期号)到网络中其他服务器。在网络中其他的服务器收到心跳信息后检查心跳消息中的任期号是否大于等于自己的任期号。如果满足该条件的话Candidate将会转换为Follower状态,并重置计时器。而如果任期号小于自己的任期号,服务器将拒绝该心跳消息并继续处于Candidate状态。

第三种情况为网络中没有服务器成功当选Leader。这种情况在有很多Follower同时成为Candidate时会发生。因为当角色转换为Candidate后将会将选票投给自己,从而导致选票被分散开来,没有Candidate可以得到网络中大部分节点的选票,从而没有节点可以成为Leader。这种情况下计时器将再次超时,网络状态将从选举阶段进入下一个选举阶段,同时Candidate将会再次执行上面说明的几件事。

Raft算法采用了随机选举超时机制来避免出现这种情况。即当计时器超时后,服务器将随机延迟指定的时间后才进入选举阶段。
由于随机延迟的原因,将降低服务器在同一时间选举超时的情况,可以有效避免选票分散的情况。

5、正常运行阶段->选举阶段

当Leader成功选举之后,将周期性发送心跳消息到网络中其他服务器。同时其他服务器将转换自己的角色为Follower,并且每次收到心跳消息后都会重置自己的计时器,防止超时再次进入选举阶段。

如果Leader因为特殊情况崩溃时,网络中的其他服务器将不再接收到心跳消息,在等待指定时间后计时器将会超时,从而再次进入选举阶段。

如果Leader崩溃时间较短,可以在其他服务器计时器超时之间恢复,并发送心跳消息,网络仍然可以恢复为Leader崩溃之前的状态。

如果Leader崩溃时间较长,在网络中已有新的Leader选举产生后恢复,由于旧的Leader任期号将小于新的Leader,在旧的Leader接收到新的Leader发送的心跳消息后则会变为Follower状态。

6、参考

Raft算法系列教程1:Leader选举

Fabric 多机部署 fabric 的多机集群部署教程,包括 1 个 Orderer排序节点和 4 个 peer 节点。 立即下载

相关推荐

zookeeper选举机制图

zookeeper选举机制图,内讲述了zookeeper是如何选举出leader、fllower的

raft学习(16)

5.5 follower 和 candidate crashed了 直到现在我们都专注于leader的failures。follower和candidate crashed简单多了,他们可以用相同的方法进行处理。如果follower或者candidate crashes了,那么未来requestvote和appendentries rpcs发给他将会fail。raft通过无限重试来解决这些failures;如果crashed的server重启,那么rpc将会完全地成功。如果一个server再收到rpc但还没

小楼一夜听春雨 1817

51单片机也能玩转信号发生器?手把手教你用DAC0832和LM358输出四种标准波形

本文详细介绍了如何使用51单片机和DAC0832芯片搭配LM358运放,自制低成本信号发生器,实现正弦波、矩形波、三角波和锯齿波四种标准波形的输出。从硬件选型、电路设计到编程实现,手把手教你完成这一实用电子项目,总成本不到50元,适合电子爱好者和学生实践。

weixin_30530939的博客 551

leader选举常用算法

是最常见的选举算法,其要求每个节点对应一个序号,序号最高的节点为leader。leader宕机后次高序号的节点被重选为leader。但是由于消息传递的不确定性,可能有多个节点自认为自己已经成为leader。Bully算法中有2PC的身影,都具有提议(propose)和收集反馈(vote)的过程。

枫火的博客 851

Livox MID-360与FAST-LIO2实战:从驱动部署到参数调优的完整指南

激光雷达惯性里程计(LIO)是机器人定位与建图(SLAM)领域的核心技术,它通过紧耦合融合激光雷达点云与惯性测量单元(IMU)数据,实现高精度、低漂移的位姿估计。其核心原理在于利用IMU的高频数据预测运动,并用激光雷达的精确测距信息进行校正与优化,从而在快速运动或特征缺失场景下保持鲁棒性。这项技术的工程价值在于为自动驾驶、移动机器人及三维重建提供了可靠的前端里程计解决方案。针对Livox MID-360固态雷达与FAST-LIO2这一热门组合,其应用场景广泛覆盖了室内外导航与地图构建。本文聚焦于**驱动部署

weixin_29997523的博客 444

【Unity Animation 2D】从零到一:骨骼绑定与IK动画实战指南

本文详细介绍了Unity中2D骨骼绑定与IK动画的实战流程,从角色素材准备、骨骼系统创建到权重绘制和IK设置,逐步指导开发者掌握2D动画制作技巧。通过反向动力学(IK)技术,实现更自然的角色动画效果,适用于游戏开发和动画制作。

weixin_30430677的博客 370

fabric1.4.4手动部署网络创建通道时报错no Raft leader

fabric1.4.4手动部署网络创建通道时报错no Raft leader

Veissia_的博客 1235

lidar点云比赛-Southlidar软件使用入门

lidar点云比赛-Southlidar软件使用入门 广西高校重点实验室培训基地 系统控制与信息处理重点实验室 本篇博客来自河池学院: 智控无人机小组 写作时间:2020.09.29 一、软件资源及安装 1.下载地址: https://pan.baidu.com/s/1jN1pynmAZOqj5mMx774pVg 提取码:gkvv (资源来自南方测绘) 2.安装 进入链接,找到软件文件夹, 内含文件即为安装包 3.下载成功后按提示安装即可 4.安装成功后桌面自动创建一个快捷方式 二、界面布

qq_49621416的博客 4891

Leader选举算法( Raft 协议)

一、由 Raft 协议组织的集群中有三类角色: Leader(领袖)Follower(群众)Candidate(候选人) 二、选举          1、 一个最小的 Raft 民主集群需要三个参与者          2、发起选举这时有三种可能情形发生(A、B、C):                  1) A: 1    B:1   C:1            

caifengguo的博客 1251

centos7 python3.12.1 报错 No module named _ssl,坑我几个小时

网上的教程很多,但几乎是无效的,跟着我这教程,可以完美解决。

Amio_的博客 1万+

mysql笔记:23. 在Mac上安装与卸载MySQL

MySQL对Mac电脑的适配十分强大,再加上Mac本身就是Unix操作系统演化而来的,所以在Mac上安装MySQL的方式有多种。常见的方法有如下三种:DMG、brew、TAR。介绍这些方法前,我们先了解下MySQL安装文件的下载。

斌斌(Java) 2248

Raft算法之Leader选举

Raft 使用心跳(heartbeat)触发Leader选举。当服务器启动时,初始化为Follower。Leader向所有Followers周期性发送heartbeat。如果Follower在选举超时时间内没有收到Leader的heartbeat,就会等待一段随机的时间后发起一次Leader选举。Follower将其当前term加一然后转换为Candidate。它首先给自己投票并且给集群中的其他服务器发送 RequestVote RPC。结果有以下三种情况:1、赢得了多数的选票,成功选举为Leader。

一直在努力的小渣渣 1244

WSL 相关命令时遇到了 “无法从raw.githubusercontent.com提取分发列表、操作超时

核心问题:国内网络屏蔽raw.githubusercontent.com,导致WSL无法获取发行版列表;最优方案:优先用方案1(手动指定发行版安装),无需改配置,1分钟搞定;永久修复:用方案2(修改hosts),适合需要管理多个WSL发行版的场景;兜底方案:用方案3(手动下载安装包),适配所有网络环境。按以上步骤操作后,你不仅能正常安装WSL,等命令也能正常执行,后续可正常使用WSL搭配Docker Desktop(如切换WSL 2后端),无需再担心网络超时问题。

weixin_39766667的博客 2126

Kafka中的leader选举算法Raft

Apache Kafka是一种流行的分布式消息队列系统,它被广泛用于解决现代应用程序中的数据传输问题。它支持高吞吐量和低延迟,可通过多个生产者分区、消费者组和分区复制实现高可靠性分布式系统。在Kafka集群中,每个分区都有一个Leader节点,负责处理该分区所有的读写请求。Leader节点会通过ZooKeeper进行注册,其他节点则作为Follower。Leader节点的重要性在于它提供了一个单点入口来确保多副本之间一致性及高可用性。

BXA 2992

贝叶斯地理统计模型R-INLA-1

贝叶斯地理统计模型R-INLA-1

学习中 2426

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

nacos-1.3.2 raft leader 选举源码解析

说明 本文以开源框架nacos,版本号为1.3.2针对leader 的选举进行源码解析 ,leader 选举采用raft 算法实现,所以对raft 算法原理也会进行阐述; Nacos源码下载地址:https://github.com/alibaba/nacos Raft 算法原理 Raft理论是分布式数据一致性算法,为了便于理解Raft算法分成了4个部分:-Leader选举-日志复制-成员变更-日志压缩 本文章只讲述leader 选举 系统角色: Leader、Candidate、Follo.

qq_30834791的博客 2339

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

关于 raft 算法 leader 选举的一点改进想法

4. 假设 B 和 C 的日志 offset 相同,分别获得了 D 和 E 的投票,那么这里可以考虑使用一种启发式想法,我们认为 A 节点没办法投票,那么 B 和 C 都认为在现有的 raft 算法逻辑下,都不会成为主节点,由于 C 节点 offset 大,C 节点不会发起特定节点的重新投票。4. 假设 B,C,D,E 分别获得 1 票,由于 C,D,E 都收到了三票被拒绝的消息(超过半数),所以这三个节点都会向自己发送消息,告诉转投票给 B 节点。

hs3002的博客 1413

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

MIT6.824-Raft笔记4:leader选举及随机超时时间

为什么要有leader以及leader的选举过程和避免一直选不出来的"大杀器"随机超时时间。

分布式存储学习 2327

Raft系列文章之二:Leader选举

Raft首先会选举出一个唯一的Leader, Leader负责管理日志,所用对日志的添加和状态变化操作都通过Leader完成。Leader接受用户的日志请求并将日志分发给系统中其他节点。并告知其他节点何时可以安全地将日志应用到状态机上。这种方式简化了多副本日志的管理,日志的数据流向是从Leader到其他节点,而其他节点不会发送日志给Leader。Leader当掉时,Raft会选出一个新的Leader。本文介绍Leader选举过程。

chicm的专栏 7096

分布式选举-Raft算法-2 Leader选举 代码实现

Raft Leader选举实现 设定集群中有5个节点,通过Raft算法实现选主。节点之间的通信使用的是自我实现的Remoting组件,基于Netty开发,可以以同步,异步的方式发起通信。在后续《分布式通信》系列的文章中,会向大家详细分析Remoting组件。 分布式选举的项目名称:justin-distribute-election 整体结构如图: 主要Package说明:...

Coding到灯火阑珊的专栏 1324

etcd leader选举详解

raft 是针对paxos的简化版本,拆解为三个核心问题Leader 选举;日志复制;正确性的保证;本文不对 raft算法做详细的证明和阐述,仅阐述基础的知识点在 raft 集群中,对外的服务只由 Leader 这个角色来提供;集群只会有一个有效 Leader,换句话说,有效的入口只有一个,就算是发给 Follower 的,最后也是会转发 Leader 处理;日志数据是单向传输的,只由 Leader 分发给 Follower,learner 等角色;

sre救赎之路 1327

etcd 中 Raft 共识算法的 Leader 选举机制详解

通过以上结构化解析,etcd 中 Leader 选举的触发条件、核心流程及工程优化细节已清晰呈现,结合流程图和示例可帮助理解分布式共识的实际运行逻辑。

喝醉酒的小白 1598

Raft协议深度解析:RocketMQ中的Leader选举与故障转移

在分布式系统应用中,高可用、一致性是经常面临的问题,针对不同的应用场景,我们会选择不同的架构方式,比如master-slave、基于ZooKeeper选主。随着时间的推移,出现了基于Raft算法自动选主的方式,Raft 是在 Paxos 的基础上,做了一些简化和限制,大大简化了算法的复杂度。Raft协议是目前分布式领域一个非常重要的一致性协议,RocketMQ 的主从切换机制也是介于Raft协议实现的。Raft 协议主要包含两个部分:Leader选举和日志复制。

听得到微笑的博客 6276

【Raft原理探究·Leader选举详解】谁来当老大?牛马也有春天

Raft 共识算法中,Leader 不是天生的,而是选出来的!本篇带你抽丝剥茧理解 Raft 的选举机制:节点三种身份如何切换?心跳丢了怎么触发选举?投票规则有哪些坑?怎么避免“两个皇帝”?还有平票机制的骚操作?让你秒懂 Raft 为什么稳得住!

PragueJoker的博客 1233

分布式选举-Raft算法-1 Leader选举 原理

Raft理论是分布式数据一致性算法,为了便于理解Raft算法分成了4个部分: Leader选举 日志复制 成员变更 日志压缩 此系列文章先来分析Raft Leader选举的原理及实现,在后续《分布式数据复制》的系列文章中,我们再回过头来实现Raft算法的其他功能。 Leader选举: 选举原则:典型的投票选举算法(少数服从多数),也就是说,在一定周...

Coding到灯火阑珊的专栏 1128

分布式选举算法——Raft Leader Election算法深度解析

分布式选举算法——Raft Leader Election算法深度解析

专注分享技术、实用优质教程、资源 1051
上一篇: MyBatis @Select注解介绍:基本用法与动态SQL拼写
下一篇: Raft算法系列教程2:状态机复制 (State Machine Replication)
计算机小书童
博客等级 码龄7年 10粉丝 8原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值