Raft的PreVote实现机制

2023-05-16

                                                                                       Raft的PreVote实现机制

1. 背景

在Basic Raft算法中,当一个Follower与其他节点网络隔离,如下图所示:

Follower_2在electionTimeout没收到心跳之后,会发起选举,并转为Candidate。每次发起选举时,会把Term加一。由于网络隔离,它既不会被选成Leader,也不会收到Leader的消息,而是会一直不断地发起选举。Term会不断增大。

一段时间之后,这个节点的Term会非常大。在网络恢复之后,这个节点会把它的Term传播到集群的其他节点,导致其他节点更新自己的term,变为Follower。然后触发重新选主,但这个旧的Follower_2节点由于其日志不是最新,并不会成为Leader。整个集群被这个网络隔离过的旧节点扰乱,显然需要避免的。

2. Provote算法

Raft作者博士论文《CONSENSUS: BRIDGING THEORY AND PRACTICE》的第9.6节 "Preventing disruptions when a server rejoins the cluster"提到了PreVote算法的大概实现思路。

在PreVote算法中,Candidate首先要确认自己能赢得集群中大多数节点的投票,这样才会把自己的term增加,然后发起真正的投票。其他投票节点同意发起选举的条件是(同时满足下面两个条件):

  • 没有收到有效领导的心跳,至少有一次选举超时。
  • Candidate的日志足够新(Term更大,或者Term相同raft index更大)。

PreVote算法解决了网络分区节点在重新加入时,会中断集群的问题。在PreVote算法中,网络分区节点由于无法获得大部分节点的许可,因此无法增加其Term。然后当它重新加入集群时,它仍然无法递增其Term,因为其他服务器将一直收到来自Leader节点的定期心跳信息。一旦该服务器从领导者接收到心跳,它将返回到Follower状态,Term和Leader一致。

3. 总结

Prevote是一个典型的2PC协议,第一阶段先征求其他节点是否同意选举,如果同意选举则发起真正的选举操作,否则降为Follower角色。这样就避免了网络分区节点重新加入集群,触发不必要的选举操作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Raft的PreVote实现机制 的相关文章

  • 一套实时音视频传输机制和QOS策略选择及语音视频SDK的选型标准

    64 author wangdaopo 64 email 3168270295 64 qq com 语音视频SDK的选型标准 设备的问题 网络部分 物理场景 一套实时的传输机制 sip是通讯协议 xff0c sip只是信令 xff0c 就是
  • sample.html

    目录 一 Html使用注意 1 二 界面设计 xff08 css xff09 9 三 表单使用 15 Jquery判断表单是否修改 15 表单序列化为json对象 16 json对象转为json字符串 16 json对象赋值到表单 xff0
  • Cgi使用

    目录 一 CGI xff08 通用网关接口 xff09 是外部扩展应用程序与 Web 服务器交互的一个标准接口 1 二 web服务器配置 3 三 Cgi编程 xff08 根据CGI标准 xff0c 编写Web服务器运行时的外部扩展应用程序
  • mmap内存映射在应用和内核/驱动交互,进程间交互,大规模数据传输/大文件读写中的使用

    目录 一 Mmap用途 步骤实例 细节 及相关函数 2 1 mmap函数主要用途有三个 xff08 应用和内核 驱动交互 xff0c 进程间交互 xff0c 大规模数据传输 大文件读写 xff09 2 2 使用步骤 xff1a 所有对mma
  • PID控制器整理分享

    概述 日常开发中 xff0c 常常需要对速度 温度等物理量进行稳态控制 xff0c 而在目前的自动化控制原理中 xff0c 使用最为广泛的方法就是PID控制算法 本文简要整理分享PID控制器的使用 正文 PID控制器 xff0c 即比例 积
  • Markdown插入图片的方法

    Markdown插入图片的方法 Markdown插入图片的语法 xff1a alt 属性文本 图片地址 alt 属性文本 图片地址 34 可选标题 34 说明 xff1a 以感叹号开头 接着一个中括号 接着一个小括号 xff0c 里面放上图
  • SLA的基本概念

    SLA的基本概念 现在的产品和系统都非常的复杂 xff0c 彼此连接依赖越来越复杂 xff0c 为了整体的高速运转 xff0c 对每个部件的稳定性越来越高 xff0c 越来越精密 xff0c 发展到一定程度 xff0c 人力已经无法掌控 x
  • ssh远程登录可能出现的问题以及解决办法

    首先 确保server端的ssh服务是开的 xff08 service shhd start xff09 然后在client端输入 xff1a ssh usrname 64 serverip xff08 远程登录 xff09 scp fil
  • 各种滤波原理

    1 维纳滤波 维纳滤波是一种平稳随机过程的最佳滤波理论 xff0c 换句话说就是在滤波过程中系统的状态参数 xff08 或信号的波形参数 xff09 是稳定不变的 它将所有时刻的采样数据用来计算互相关矩阵 xff0c 涉及到解维纳 xff0
  • MTCNN算法提速应用(ARM测试结果评估)

    经博主测试 xff0c mtcnn原三层网络如果用于工程测试 xff0c 误检情况严重 xff0c 在fddb上测试结果也是 xff0c 经常将手或者耳朵 检测为人脸 xff0c 这个很头疼 xff08 因为标注数据 xff01 xff09
  • 国外知名音频库一站式资料和简介

    Speex Speex http blog csdn net xyz lmn article details 8013490 简介 Speex是一套主要针对语音的开源免费 xff0c 无专利保护的音频压缩格式 Speex工程着力于通过提供一
  • vs2010调试工具栏不可用(变灰)解决办法

    菜单中页不能进行调试 使用vs的命令行工具 在命令行中运行 xff1a devenv ResetSkipPkgs 重新打开vs xff08 注 xff1a 第一次没有关闭vs xff0c 运行这条命令后 xff0c 会新打开vs没有变化 x
  • STM32 抗锯齿中文显示另类方案分享

    STM32 抗锯齿中文显示另类方案分享 最近在玩车载液晶仪表 xff0c 之前用Arduino 43 USART液晶 xff0c 后来发现Arduino性能不够 xff0c 就转向STM32 由于需要在液晶屏上显示手机信息 xff0c 先是
  • [Pixhawk] ardupilot源码windows编译教程

    声明 此教程最开始取自于淘宝商家 xff0c 后查找资料发现淘宝商家取自 怒飞垂云 的教程 xff0c 但原教程中有些冗余和错误导致无法通过编译 xff0c 我做更改整理后发出 xff0c 如有疑问请各位一起讨论 目录 一 建立飞控固件编译
  • pixhawk MP地面站 NTF_LED参数相关

    NeoPixel Copter documentation 这一部分里面的NTF相关参数 xff0c 对应MP地面站里的这几项 不是给外接WS2812设置的 我折腾了一下午 xff0c 再更改了其他一些参数后 xff0c 导致飞控上那个最大
  • 无人机betaflight 地面站遥控器通道最低点不是1000,最高点不是2000,中点不是1500的调整办法

    参考老外的视频 How to fix the endpoints of your Rx channels with RXRANGE in Betaflight or Cleanflight EASY FIX 需要进入CLI界面 xff0c
  • 八皇后详解

    历史 八皇后问题是一个古老而著名的问题 xff0c 是回溯算法的典型例题 该问题是十九世纪著名的数学家高斯1850年提出 xff1a 在8X8格的国际象棋上摆放八个皇后 xff0c 使其不能互相攻击 xff0c 即任意两个皇后都不能处于同一
  • KVM虚拟机创建功能详细讲解

    KVM虚拟机创建功能详细讲解 一 KVM虚拟机创建的用户操作 对于用户或者管理员来说 xff0c 虚拟机的创建有着很多的方法 xff0c 例如 xff1a kvm自带命令行工 具 使用virsh命令来创建 使用具有图形界面的virt man
  • JS中堆和栈

    什么是栈和堆 栈和堆的主要作用存储变量 xff0c 根据变量值得不同存储的位置也不同 在JS中 xff0c 栈主要是存储基本类型的变量 xff0c 包括String Number Boolean Undefined Null 和 对象类型的
  • 实例:Python调用c++文件(参数为指针和数组指针)

    本文作为Python调用c 43 43 的进阶实现 xff0c 简单的实现参考文章Python调用c 43 43 高级 xff08 swig xff09 1 一个小小的工作目标 通过Python调用c 43 43 文件 xff0c 生成一个

随机推荐

  • RT-Thread学习笔记——信号量

    前言 本文讲RT Thread的线程间同步之信号量 xff0c 包括为什么要进行线程间同步 信号量创建与删除 信号量获取与释放以及基于STM32的二值信号量示例和计算型信号量示例 xff0c 采用RTT amp 正点原子联合出品潘多拉开发板
  • ssh Connection closed by remote host解决

    描述 最近某台服务器隔一段时间就会有ssh连接失败的告警 xff0c 但是上去排查的时候会发现ssh并没有连接失败的错误 后来有在ssh的地方添加日志 xff0c 打印错误的输出 xff0c 最终得到的报错Stderr ssh exchan
  • linux-2.6.32.6源码目录结构分析及其driver所占比重

    find maxdepth 1 type d name exec du sh 未编译个目录文件大小 xff1a 423M linux 2 6 32 6 5 8M firmware 1 3M lib 140K init 144K virt 2
  • Formatter(格式化)和 Converter(格式化)

    功能 xff1a Spring框架的功能 xff0c Formatter和Converter均可以将一种对象类型转换成另一种对象类型 区别 xff1a Converter是通用元件 xff0c 可以在应用程序的任意层中使用 Formatte
  • 牛人 就是这样锤炼出来的,中兴资深工程师,嵌入式专家韦东山是这样炼成的!

    导读 xff1a 还在大学的你 xff0c 不知道未来何去何从 xff1f 都说迷茫是大事做不了 xff0c 小事不想做 还在做程序袁的你 xff0c 是不是也想创业 xff1f 程序袁好创业吗 xff1f Linux好学吗 xff1f 学
  • Windows下编译PX4源码并连接simulink

    目录 一 安装UAV支持PX4飞行器支持包二 下载工具链对于2019a对于2021a 三 克隆PX4源码四 构建PX4固件固件的选择编译指令报错的处理 五 MATLAB的Test Connection 一 安装UAV支持PX4飞行器支持包
  • ubuntu树莓派3/4B+的GPIO硬件串口通信

    目录 一 概要二 树莓派硬件常识三 交换硬件串口和mini串口映射关系3 1 查看原始映射3 2 编辑config文件 xff0c 置换硬件映射3 3 禁用蓝牙 四 串口功能配置4 1 编辑cmdline文件4 2 禁用蓝牙4 3 串口功能
  • JS运行原理,宏任务微任务的任务loop驱动模式

    要拎清运行原理 xff0c 就要知道js有什么无理限制和主要解决什么问题 首先 xff0c js是单线程的 xff0c 不能开辟多线程 这决定了它支持并发 xff0c 不支持并行 并发 强调的是可以一起 出 发 xff0c 并行 强调的是可
  • 关于CPU C-States 省电模式,你需要知道的事情

    为了在CPU空闲的时候降低功耗 xff0c CPU可以被命令进入low power模式 每个CPU都有几种power模式 xff0c 这些模式被统称为C states或者C modes lower power模式最早在486DX4处理器上被
  • nginx如何部署多个web应用(vue)

    服务器资源与域名资源都是有限的 xff0c 如何在同一个域名下部署多个vue项目 xff08 nginx反向代理 xff09 xff0c 通过域名后面的不同的URI来访问不同的应用 xff0c 来解决资源不足的问题 xff0c 在此期间遇到
  • 【博客8】缤果PyQt5串口调试助手V1.1(初级篇)

    超级好用的Python QT GUI串口调试助手 目录 前言 一 软件概要 xff1a 二 软件界面 xff1a 1 App动态演示 2 其他扩展展示 三 main py源码 xff1a 1 PyQt5 Serial Debug Assis
  • 主机ubuntu通过SSH访问TX2

    因为最近实验室搭建好了装有激光雷达的ros小车 xff0c 笔者想通过主机对TX2的文件进行管理和下载 但由于笔者之前使用TX2都是直接连接在显示屏上使用 xff0c 并未使用过远程访问 xff0c 为此笔者查了较多资料走了不少弯路 xff
  • IDEA快捷创建Servlet项目

    IDEA快捷创建Servlet项目 1 右键单击 要创建Servlet项目 所在的包 注 xff1a 若没有Servlet选项 打开File gt project structure 进入如下页面 xff0c 选择你使用的工程 xff0c
  • 【基础教程】Python转义字符及用法

    ASCII 编码为每个字符都分配了唯一的编号 xff0c 称为编码值 在 Python 中 xff0c 一个 ASCII 字符除了可以用它的实体 xff08 也就是真正的字符 xff09 表示 xff0c 还可以用它的编码值表示 这种使用编
  • SAP 实施新的金融工具 IFRS17规则解析

    在实施新的金融工具 IFRS 规则的过程中 xff0c 保险公司现在看到了保险负债的新标准 经过多年的长期讨论 xff0c IASB 于 2016 年 11 月承诺在 2021 年 1 月 1 日生效 xff0c 并明确表示不会考虑进一步推
  • FreeRTOS中任务控制块中关于堆栈的三个变量pxTopOfStack、pxStack、pxEndOfStack的分析

    这里写自定义目录标题 FreeRTOS中任务控制块中关于堆栈的定义 typedef struct tskTaskControlBlock volatile StackType t pxTopOfStack lt Points to the
  • 在keil中添加c文件时的一些常见错误

    近期在做项目时 xff0c 计划添加一个测距模块 xff0c 因此要新建一个c文件封装一些函数 xff0c 方便调用 xff0c 在实际操作时遇到了以下两个问题 1 编译时报错 error no such file or dictionar
  • stm32f1驱动HC-SR04超声波测距模块

    这段时间算是比较系统的学习了一点stm32相关的东西 xff0c 驱动超声波测距模块这个简单的小任务综合了定时器 xff0c 中断 xff0c 串口三个知识点 xff0c 拿来练手还是挺不错的 首先先介绍一下HC SR04模块 xff1a
  • HC05/HC06蓝牙模块驱动(1)

    花了点时间熟悉了一下蓝牙模块 xff0c 发现意料之外的简单 先说蓝牙模块的三种工作模式 xff08 这三种工作模式是HC05 06共有的 xff0c 并且通过模块上的LED反映出来 xff09 1 待连接模式 HC05 快速闪灯 HC06
  • Raft的PreVote实现机制

    Raft的PreVote实现机制 1 背景 在Basic Raft算法中 xff0c 当一个Follower与其他节点网络隔离 xff0c 如下图所示 xff1a Follower 2在electionTimeout没收到心跳之后 会发起选