Raft算法系列教程4:日志不一致的解决

一致性协议raft详解(一):raft整体介绍 一致性协议raft详解(一):raft介绍前言概述raft独特的特性raft集群的特点raft中commit何意?raft leader electionlog replication网络分区Symmetric network partitioningAsymmetric network partitioningStepDownraft冲突解决方法 前言 有关一致性协议的资料网上有很多,当然错误也有很多。笔者在学习的过程中走了不少弯路。现在回过头来看,最好的学习资料就是Leslie Lamport和Dieg 阅读详情

网络不可能一直处于正常情况,因为Leader或者某个Follower有可能会崩溃,从而导致日志不能一直保持一致。因此存在以下三种情况:

(1)Follower缺失当前Leader上存在的日志条目。
(2)Follower存在当前Leader不存在的日志条目。(比如旧的Leader仅仅将AppendEntries RPC消息发送到一部分Follower就崩溃掉,然后新当选Leader的服务器恰好是没有收到该AppendEntries RPC消息的服务器)
(3)Follower即缺失当前Leader上存在的日志条目,也存在当前Leader不存在的日志条目

在这里插入图片描述

图中最上方是日志的索引号(1-12),每个方块代表一条日志信息,方块内数字代表该日志所处的任期号。

图中当前Leader(图中最上方一行日志代表当前Leader日志)处于任期号为8的时刻。以此图说明以上三种情况存在的原因:

Follower a、b(Follower崩溃没有接收到Leader发送的AppendEntries RPC消息)满足以上说明的第一种情况。
Follower c在任期为6的时刻,Followerd在任期为7的时刻为Leader,但没有完全完成日志的发送便崩溃了,满足以上说明的第三种情况。
Follower e在任期为4的时刻,Followerf在任期为2、3的时刻为Leader,但没有完全完成日志的发送便崩溃了,同时在其他服务器当选Leader时刻也没有接收到新的Leader发送的AppendEntries RPC消息,满足第三种情况。

日志不一致的解决方案

Leader通过强迫Follower的日志重复自己的日志来处理不一致之处。这意味着Follower日志中的冲突日志将被Leader日志中的条目覆盖。因此Leader必须找到与Follower最开始日志发生冲突的位置,然后删除掉Follower上所有与Leader发生冲突的日志,最后将自己的日志发送给Follower以解决冲突。

Leader不会删除或覆盖自己本地的日志条目

这些步骤从之前说到的日志的一致性检查开始。

当发生日志冲突时,Follower将会拒绝由Leader发送的AppendEntries RPC消息,并返回一个响应消息告知Leader日志发生了冲突。
Leader为每一个Follower维护一个nextIndex值。该值用于确定需要发送给该Follower的下一条日志的位置索引。(该值在当前服务器成功当选Leader后会重置为本地日志的最后一条索引号+1)
当Leader了解到日志发生冲突之后,便递减nextIndex值。并重新发送AppendEntries RPC到该Follower。并不断重复这个过程,一直到Follower接受该消息。
一旦Follower接受了AppendEntries RPC消息,Leader则根据nextIndex值可以确定发生冲突的位置,从而强迫Follower的日志重复自己的日志以解决冲突问题。

在这里插入图片描述

情况a:如上图,服务器S1在任期为2的时刻仅将日志<index:2,term:2>发送到了服务器S2便崩溃掉。

情况b:服务器S5在任期为3的时刻当选Leader(S5的计时器率先超时,递增任期号为3,高于服务器S3和S4,因此可以当选Leader),但没来得及发送日志便崩溃掉。

情况c:服务器S1在任期为4的时刻再次当选Leader(S1重启时,任期仍然为2,收到新的LeaderS5发送的心跳信息后更新任期为3,而在LeaderS5崩溃后,服务器S1为第一个计时器超时的,因此发起投票,任期更新为4,大于网络中其他服务器任期,成功当选Leader),同时将日志<index:2,term:2>发送到了服务器S2和S3,但还没有通知服务器对日志进行提交便崩溃掉。

情况d:情况(a->d)如果在任期为2时服务器S1作为Leader崩溃掉,S5在任期为3的时刻当选Leader,由于日志<index:2,term:2>还没有被复制到大部分服务器上,并没有被提交,所以S5可以通过自己的日志<index:2,term:3>覆盖掉日志<index:2,term:2>。

情况e:情况(a->e)如果在任期为2时服务器S1作为Leader,并将<index:2,term:2>发送到S2和S3,成功复制到大多数成员服务器上。并且成功提交了该日志,那么即便S1崩溃掉,S5也无法成功当选Leader,因为S5不具备网络中最新的已被提交的日志条目。

Raft算法详解 Raft算法属于Multi-Paxos算法,它是在Multi-Paxos思想的基础上,做了一些简化和限制,比如增加了日志必须是连续的,只支持领导者、跟随者和候选人三种状态,在理解和算法实现上都相对容易许多 从本质上说,Raft算法是通过一切以领导者为准的方式,实现一系列值的共识和各节点日志的一致 1、领导者选举 1)、成员身份 Raft算法支持领导者(Leader)、跟随者(Follower)和候选人(Candidate)3种状态: 跟随者:接收和处理来自领导者的消息,当等待领导者心跳信息超时的时候,就主 阅读详情

相关推荐

Nacos如何实现Raft算法与Raft协议原理详解

前言 大名鼎鼎的Paxos算法可能不少人都听说过,几乎垄断了一致性算法领域,在Raft协议诞生之前,Paxos几乎成了一致性协议的代名词。但是对于大多数人来说,Paxos算法太难以理解了,而且难以实现。因此斯坦福大学的两位教授Diego Ongaro和John Ousterhout决定设计一种更容易理解的一致性算法,最终在论文"In search of an Understandable Consensus Algorithm"中提出了Raft算法! Raft 适用于数据一致...

Jack章臣的博客 3447

MIT6.824-Raft笔记6:不一致log处理、日志快照

本部分主要是关于不一致的日志是怎么决策和取舍的。同时对于日志的恢复,通过快照的方式提高恢复的效率。

分布式存储学习 1362

一致性算法之Raft算法

一致性raft算法简单理解

aichojie的博客 2355

raft协议中的日志安全性

目录1.日志安全性问题2.选举限制3.当前term的日志提交4.上个term的日志提交5.参考 1.日志安全性问题 日志安全性是指, 新选出的leader必须包含所有已提交的日志项,已经提交的日志不能因为leader变化被覆盖。 在raft日志复制过程中,follower为了保持与leader一致性,follower的日志可能会被覆盖。 raft是如何保证日志安全性的? raft有以下几点规则: leader只能日志追加日志,不能覆盖日志。 只有leader的日志项才能被提交,follower不能接收写请

翔云 1054

强一致性算法Paxos、Raft、ZAB

在B站上一个讲这三个算法的视频网址https://www.bilibili.com/video/av21667358 Paxos协议 Basic paxos算法中,分为4种角色: Client: 系统外部角色,产生议题者,像民众 Proposer :接收议题请求,像集群提出议题(propose),并在冲突发生时,起到冲突调节的作用,像议员 Acceptor:提议的投票者和决策者,只有在形...

ystyaoshengting的专栏 3765

一致性算法—Paxos、Raft、ZAB

写在前面 1、分布式系统对fault tolerence的一般解决方案是state machine replication(状态机复制)。 2、分布式一致性算法的一种更准确的说法应该是:state machine replication的共识(consensus)算法。 3、pasox其实是一个共识算法。系统的最终一致性,不仅需要达成共识,还会取决于client的行为。 4、分布式系统中有多个节点...

bulingma的博客 2221

raft学习(10)——日志一致的精髓

继续log entries 1.如果在不同logs的两个entries有者相同的index和term,那么他们必然存储相同的command 2.如果在不同logs的两个entries有者相同的index和term,那么他们之前的entries必然全等! 第一条性质遵循leader在给定的term内和给定的log index中生成最多一个entry的事实,而且log entries永远不会改变他们在log中的位置。第二个性质被appendentries的简单一致性检查所保证。当sending一个appende

小楼一夜听春雨 728

raft4j:练手之作

raft for Java

jsjbrdzhh的博客 908

Raft清理不一致的日志

领导者将从nextIndex[2]=11处开始检查,一直检查到nextIndex[2]=4处,附带的日志条目信息为index=3且term=1,与领导者匹配。(3) 如此往复,直到领导者的nextIndex[1]=5,带上前一个日志的唯一标识:索引为4且任期为4的信息。(1) 一开始领导者根据自己的日志长度,记录nextIndex[1]= 10+1 =11,带上前一个日志条目的唯一标识:索引为10且任期为6.检查发现跟随者1的索引为10处没有日志,检查失败。跟随者1的索引为9处还是没有日志,检查失败。

yumWant2debug的博客 335

Arduino Nano + MCP3422A0 ADC 毫欧表:3档分辨率(0.1mΩ-1.3kΩ)开尔文连接实测

本文详细介绍了如何使用Arduino Nano与MCP3422A0 ADC构建高精度毫欧表,采用四线制开尔文连接和三档量程设计,实现0.1mΩ-1.3kΩ的精确测量。通过精密恒流源和18位ADC技术,结合智能量程切换和数字滤波算法,显著提升测量精度和稳定性,适用于电子维修、PCB测试等场景。

weixin_28292761的博客 325

Nature风格的北半球投影图,几行代码就能绘制...

在子刊***Nat. Clim. Chang.***中,通过北极俯视投影表示NAO和AO的EOF分解。仅在定义图层的时候设置为该投影,其余设置content,绘制contourf都是PlateCaree。如子刊Nature Geosci中表示了海冰的漂移,还添加了DEM底图,非常美观。以海温数据为例,ERA5月温度平均,是一张721*1440的0.25degTIF。现在的结果看起来不错,但太大了,我们如果只需要北半球的数据,则需要指定经纬度。绘制完结果也是正方形,和ArcGIS差不多,见之前的推文。

wlh2067的博客 1292

RAFT算法详解

一、RAFT算法 1、Raft算法概述   Raft算法则是从多副本状态机的角度提出,用于管理多副本状态机的日志复制。Raft实现了和Paxos相同的功能,它将一致性分解为多个子问题:Leader选举(Leader election)、日志同步(Log replication)、安全性(Safety)、日志压缩(Log compaction)、成员变更(Membership change)等。同时...

青萍之末的博客 2万+

西门子PLC新手必看:200SMART与1200/1500的MODBUS RTU通讯实战(附完整配置流程)

本文详细解析了西门子PLC中S7-200 SMART与S7-1200/1500之间实现MODBUS RTU通讯的完整实战流程。内容涵盖硬件接线、软件配置及程序编写,重点讲解了200SMART作为从站、1200/1500作为主站的典型架构,并提供了关键功能块的使用方法和常见问题排查技巧,帮助新手快速打通不同系列PLC间的数据交换。

weixin_29214559的博客 397

Raft算法详解:最容易理解的分布式一致性算法

Raft是一个用于实现分布式一致性的共识算法,和Paxos目标相同。易于理解的一致性算法。fill:#333;important;important;fill:none;color:#333;color:#333;important;fill:none;fill:#333;height:1em;Raft角色选举成功发起选举Leader领导者Follower跟随者Follower跟随者Follower跟随者Candidate候选人角色职责状态Leader。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 4772

YonSuite如何新增用户并分配角色角色授权图文教程

用友YonSuite产品基础教学

ct341688的博客 619

UE5在Ubuntu22.04.4下的高效开发环境配置指南

本文详细介绍了在Ubuntu 22.04.4系统上配置UE5高效开发环境的完整指南,包括系统准备、显卡驱动安装、UE5引擎编译与配置、开发工具链设置以及性能优化技巧。通过逐步指导,帮助开发者快速搭建稳定的UE5开发环境,解决常见问题,提升开发效率。

weixin_29251131的博客 383

Raft 一致性算法论文

本篇博客为著名的 RAFT 一致性算法论文的中文翻译,论文名为《In search of an Understandable Consensus Algorithm (Extended Version)》(寻找一种易于理解的一致性算法)。 Raft 是一种用来管理日志复制的一致性算法。它和 Paxos 的性能和功能是一样的,但是它和 Paxos 的结构不一样;这使得 Raft 更容易理解并且更易...

跨链技术践行者 1万+

TransUnet官方代码训练自己数据集(彩色RGB3通道图像的分割)

官方代码:https://github.com/Beckschen/TransUNet 目的:训练5个类别的汽车部件分割任务(测试在另一篇博客中) 实现效果: 1. github下载代码,并解压。 项目里的文件可能跟你下载的不一样,不急后面会讲到! 2. 配置数据集(尽最大努力还原官方数据集的格式)。 通常自己手上的数据集分images和labels文件夹,分别存放着原始图像和对应的mask图像,如下图所示; mask图像中的像素有0,1,2,3,4 分别代表背景,车身,轮子,车灯,窗户,一共五个

qq_37652891的博客 5万+

一致性算法Raft详解

原文出处:http://www.solinx.co/archives/415?utm_source=tuicool&utm_medium=referral 一致性算法Raft详解 背景   熟悉或了解分布性系统的开发者都知道一致性算法的重要性,Paxos一致性算法从90年提出到现在已经有二十几年了,而Paxos流程太过于繁杂实现起来也比较复杂,可能也是以为过于复杂

小小本科生成长之路 1万+

win10解决IE浏览器安装不上的问题(卸载依然显示不能安装)

目前win10 系统不支持外部ie安装程序,所以必须用win10自带的应用来安装 一、错误的卸载的方式 在控制面板的当前安装的程序界面是看不到ie的,需要选择控制面板左上角的启用或关闭windows功能 将ie11前面的勾勾去掉 这种方法是很多网站上的误区,其实这并没有卸载成功ie只是把ie的功能关闭了,但是他还在你的电脑上。你可以理解为我们说的对文件夹执行的隐藏文件夹功能。那个隐藏的文件夹依...

清平乐的技术专栏 3万+

非结构化数据在大数据湖中的应用实践

想象一下,你正在整理一个杂乱的书房。有些书整整齐齐地放在书架上,每本书都有明确的标题、作者和出版日期——这些就是结构化数据,它们像数据库中的表格,有固定的格式和字段。但书房里还有更多东西:散落的照片、手写的笔记、录音带、视频光盘、甚至还有画作。这些物品没有固定的格式,每件都独一无二——这就是非结构化数据。在技术术语中,非结构化数据是指没有预定义数据模型或组织形式的信息。文本文档(Word、PDF、TXT)电子邮件和社交媒体内容图像和照片(JPG、PNG)音频文件(MP3、WAV)

软件工程实践的博客 361

分布式一致性算法:Raft学习

Raft算法又被称为基于日志复制的一致性算法,旨在解决分布式系统中多个节点之间的数据一致性问题。它通过选举一个**领导者(Leader)**,让领导者负责管理和协调日志复制,确保所有节点的数据一致。复制日志在分布式系统中,每个节点都维护着一份日志,记录系统操作的历史。为了保证数据一致性,这些日志需要在所有节点之间保持同步。Raft通过领导者选举和日志复制机制,确保所有节点的日志最终是一致的。心跳机制与选举Raft使用心跳机制来触发选举。

shenfenxihuan的博客 8553

温度PID控制PLC程序

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

Raft 共识算法学习笔记 二:日志复制

文章 Raft 共识算法学习笔记 一:领导人选举 描述了 Raft 算法如何进行领导者选举,本文描述 Raft 共识算法如何进行日志复制。 复制状态机 在 Raft 集群中,每个服务器可以看成是一个复制状态机(Replicated State Machine),如下图。 复制状态机通常基于复制日志(replicated log)实现。每个服务器存储一个包含一系列指令的日志,并且按顺序执行指令。由于日志都包含相同顺序的指令,状态机会按照相同的顺序执行指令,由于状态机是确定的(deterministic),因此

Leo的博客 1689

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

日志一致性协议Raft

前言        数据一致性是分布式服务的一大难题。假设我们能无成本的保证数据一致性,在分布式环境中就可以使用无限扩容来分发流量。那么数据一致性,何为数据 ?往往日志log是一应用的可靠性的保障,例如 mysql的binlog,redis 的aof日志。通过分析日志从机子可以达到和本机子相同的状态。因此数据一致性的问题,化简为日志一致性问题。Raft则是一个用于管理日志一致性的协议。 Raft简介 Raft又称 木筏协议,一种共识算法,

懒猫的脚印 1233

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

【分布式】一致性算法 Raft

Raft 算法是共识算法(也叫一致性算法)的一种,用来解决分布式一致性问题,主要作为 Paxos 的替代算法。文章有一万多个字,对算法的主要内容进行了整理,加上了对关键问题的消化和理解,希望对大家学习 Raft 算法能提供一些帮助。

_山月 1751

【ETCD:分布式一致性算法 Raft】

Etcd 是一个高可用、强一致的分布式键值(Key-Value)数据库,主要用途是共享配置和服务发现。那Etcd是如何保证强一致性的呢?昨天面试就被问到这个问题,当时没有答上来,就很尴尬。其实,其内部采用 Raft 算法作为分布式一致性协议,因此,Etcd 集群作为一个分布式系统“天然” 具有强一致性;而副本机制(一个 Leader,多个 Follower)又保证了其高可用性(点击进入 链接:Etcd官网)。所以这里我们重点介绍一下Etcd底层运用的分布式一致性算法Raft。

m0_74120645的博客 1868
上一篇: Raft算法系列教程3:日志复制
下一篇: SQL数据分析:从基础破冰到面试题解
计算机小书童
博客等级 码龄7年 10粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值