CP模型--Raft协议介绍


文章目录

  • 前言
  • 一、Raft 是什么:
  • 二、Raft的工作原理:
    • 2.1 Raft 节点的3中状态:
    • 2.2 集群启动 leader 节点的选举:
    • 在这里插入图片描述
    • 2.3 数据的同步(日志复制):
    • 2.4 leader 重新选举:
    • 2.5 网络分区故障:
    • 2.6 超时时间控制:
  • 总结:
  • 参考:


前言

本文对分布式系统下,强一致性模型(cp)之Raft 算法的实现进行介绍。


一、Raft 是什么:

Raft 是工程上使用较为广泛的 强一致性、去中心化、高可用 的分布式协议,用于管理副本复制(Log Replication)。相比传统的 Paxos 算法,Raft 将大量的计算问题分解成为了一些简单的相对独立的子问题,并有着和 Multi-Paxos 同样的性能。

二、Raft的工作原理:

CP协议raft 实现动画版: http://thesecretlivesofdata.com/raft/

2.1 Raft 节点的3中状态:

  • Leader:Leader 会一直工作,直到失败。Leader 节点负责处理所有客户端的请求,定期向集群中的 Follower 节点发送心跳消息,证明自己还健在。
  • Follower:Follower 只响应来自其他服务器的请求。Follower 节点不处理 Client 的请求,而是将请求重定向给集群的 Leader 节点,由 Leader 节点进行请求处理。
  • Candidate:如果 Follower 长时间没有收到任何通信,它将成为 Candidate 并发起选举。获得多数选票的 Candidate 成为新的 Leader。

2.2 集群启动 leader 节点的选举:

  • 集群中的节点一开始都是 fllower 从节点;

  • 当集群中接收不到leader 节点的心跳,在选举的超时时间过完后,触发选举,此时从节点变为候选节点
    在这里插入图片描述

  • 从节点发送选举投票给到其它的节点(自己先投给自己一票),其它节点接到请求并返回值;
    在这里插入图片描述 - - 返回选票结果:

投票限制:
1) 在任一任期内,单个节点最多只能投一票;
2) 候选人知道的信息不能比自己的少;
3) first-come-first-served 先来先得;
投票结果:
(1) 收到majority的投票(含自己的一票),则赢得选举,成为leader;
(2)被告知别人已当选,那么自行切换到follower;
(3)一段时间内没有收到majority投票,则保持candidate状态,重新发出选举;

在这里插入图片描述

  • 改从节点获取到集群内过半节点的投票返回,则晋升为leader 节点,然后发送心心跳给到从节点;

在这里插入图片描述

在这里插入图片描述

2.3 数据的同步(日志复制):

  • 将数据发送到leader节点,leader 节点将数据写入到log 日志中;
    在这里插入图片描述

  • 日志写入完成,将日志数据发送给到其它的从节点(在心跳中将数据一并传输);
    在这里插入图片描述

  • 从节点写入数据到各自 的日志中,然后返回成功的状态给到leader 节点;
    在这里插入图片描述

  • leader 接收到集群节点过半都已经成功,则将本机数据进行更新(提交),响应客户端,并发送命令到从节点,各从节点完成数据更新;
    在这里插入图片描述

  • 如果不是过半成功,则不更数据,并并发送命令到从节点,各从节点不进行数据更新;

2.4 leader 重新选举:

当出现网络故障或者leader 挂掉时,leader和follower 之间的心跳超时,触发leader的重新选举:

  • 从节点在重置自己成为候选者的时间到达后,成为候选者;
  • 然后发送选举给到集群内其它节点;
  • 获取半数投票成为leader 节点,然后发送心心跳给到从节点;
  • 从节点接收到leader 心跳,则重置自己成为候选者的时间;

2.5 网络分区故障:

当出现网络分区,A&B,C&D&E,则会出现两个leader节点;
在这里插入图片描述

此时如果客户端,发送数据给到 NodeB 不满足过半写入,则数据写入不成功;如果发送给到 NodeC ,有3个节点(5/2 +1 =3)则数据写入成功;

网络分区恢复:

  • 则通过一定的规则得到唯一的一个新leader 节点;
  • 旧的leader节点数据及旧的从节点,则回滚到没有没有提交的日志;然后接收新的leader 的日志数据;

2.6 超时时间控制:

  • 选举的超时时间:每个节点从fllower 变为 候选节点 ,每个节点的时间在150ms 和300 ms 之间;减少多个节点同时进行选举投票,产生候选者获取到投票数量相同 从而触发再次选举进入死循环;
  • 如果产生候选者获取到投票数量相同,则等待选举的超时时间之后重新进行投票选举;

总结:

raft 通过投票(过半)当选为leader 节点,只有leader 节点负责对客户端的数据写入操作;leader 在接收到数据之后,现在本地记录日志,然后将日志信息跟随心跳一起发送到集群内的从节点,从节点完成日志数据记录后,返回leader,只有过半的从节点都写入日志成功,则进行数据提交(数据真正的写入成功),否则 进行数据的回滚;当心跳超时时则会重新触发leader 的选举。

参考:

Raft协议;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/11650.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

目前公认的一些好用AI工具

ChatGPT:这是一个广泛推荐和使用的AI聊天机器人,能够进行高效的文本生成和对话管理。它在多个证据中被提及,显示其普遍性和实用性。 Midjourney:这是一款强大的AI绘画工具,特别适合创意写作和图像生成。它在多个来源中…

Git怎么查询当前的仓库情况,比如是否有没添加的到Git版本控制的文件、是否有没追踪的文件、是否有新增的文件?

2024年5月9日,周四上午 在 Git 中,要查询当前仓库的情况,主要关注的是文件的状态,包括已修改(modified)、已暂存(staged)和已提交(committed)的状态。 以下是…

Web 安全漏洞之文件上传

目录 文件上传漏洞及危害 文件名 HTML 和 SVG 软链 服务器磁盘 防御方法 网络安全学习路线 (2024最新整理) 学习资料的推荐 1.视频教程 2.SRC技术文档&PDF书籍 3.大厂面试题 特别声明: 文件上传漏洞及危害 文件上传漏洞…

基于Idea搭建Android开发环境

文章目录 下载SDK ManagerAndroid SDK Platform-toolsAndroid SDK Build-toolsAndroid SDKAndroid SDK Extras IDEA设置创建TestApp导入Android Studio创建的项目 下载SDK Manager SDK Manager是Google提供的,专门用于下载/管理,安卓开发中需要用到的工…

CANopen总线_CANOpen开源协议栈

CANopen是自动化中使用的嵌入式系统的通信协议栈和设备配置文件规范。就OSI 模型而言,CANopen 实现了以上各层,包括网络层。 CANopen 标准由一个寻址方案、几个小型通信协议和一个由设备配置文件定义的应用层组成。通信协议支持网络管理、设备监控和节点…

java 解决跨域时遇到问题,怎么来做一个跨域环境

今天遇到一个问题: 关于#java#的问题:java 解决跨域时遇到问题:为什么跨域访问时配置的CorsFilter没有进入?直接访问请求地址时进入了配置的CorsFilter 由于没有实际的跨域环境,因此打算在本机建一个跨域环境&#xff…

Oracle的高级分组函数grouping和grouping_id

在网上对Oracle的高级分组函数grouping和grouping_id的讲解并不多,特别是grouping_id,还有解说有误的。经过1天研究,已经完全掌握了两个函数的作用和用法,下面简单的讲述即可明白。下面给大家分享。 GROUPING 函数 语法:grouping(表达式) 作用: GROUPING将超聚…

庙算兵棋推演AI开发初探(4-调用AI模型)

前面讲了如何开展编写规则脚本型Agent(智能体)的方法,现在探究一下如何调用知识型(一般而言的训练出的模型)智能体的方法。 这次调用的是庙算平台的demo(网址见图) 下载了“知识强化学习型”…

【异常处理】(中北大学-程序设计基础(2))

目录 题目 源码 结果示例 题目 求一元二次方程式ax^2bxc0的实根&#xff0c;如果方程没有实根&#xff0c;则输入有关警告信息。要求&#xff1a;建立一元二次方程类&#xff0c;利用异常技术处理。 源码 #include <iostream> #include <cmath>using namespa…

MFC:字符串处理

例子 //多字节char* szTest "abc多字节";int nLen strlen(szTest);//9//宽字节wchar_t* szTest2 L"abc多字节";int nlen2 wcslen(szTest2);//6//测试项目配置为Unicodewchar_t* szTesz3 TEXT("abcd");//char* -> CStringCString strTes…

Kubernetes——调试小技巧

目录 前言 一、K8s调试技术的重要性 二、7个具体的K8s调试技巧 前言 Kubernetes&#xff08;K8s&#xff09;调试技术是指在使用Kubernetes集群过程中&#xff0c;用于定位和解决问题的方法和技术。Kubernetes是一个复杂的系统&#xff0c;它负责管理容器化的应用程序&…

力扣HOT100 - 763. 划分字母区间

解题思路&#xff1a; class Solution {public List<Integer> partitionLabels(String s) {int[] last new int[26];int len s.length();for (int i 0; i < len; i) {last[s.charAt(i) - a] i;//记录字母最远的下标}List<Integer> partition new ArrayList…

SketchUp Pro for Mac v2024 24.0.484 草图大师中文版

SketchUp Pro 2024 for Mac是一款功能强大的三维建模软件&#xff0c;适用于Mac电脑。其简洁易用的界面和强大的工具集使得用户可以轻松创建复杂的3D模型。 SketchUp Pro 2024 for Mac支持导入和导出多种文件格式&#xff0c;如dwG、DXF、3DS、OBJ、DEM等&#xff0c;方便用户…

(一)Spring教程——Spring框架简介

Spring框架是Java平台的一个开源的全栈应用程序框架&#xff0c;一般被称作Spring。Spring框架的核心特性是依赖注入(DI)与面向切面的编程(AOP)&#xff0c;Spring可以看成是一个控制反转的容器。 Spring框架由20多个模块组成。这些模块可以分成几个大的层次&#xff1a;核心容…

java spring boot动态数据库获得配置信息连接多数据源(数据库)

数据库 数据库文件和代码文件 https://download.csdn.net/download/qq_34631220/89304173 链接&#xff1a;https://pan.baidu.com/s/1xoh6xiSRx4nW_gKvR1QPjg 提取码&#xff1a;i7b7 –来自百度网盘超级会员V5的分享 文章位置 添加链接描述 说明&#xff1a;事务只能单库…

学习软考----数据库系统工程师32

NoSQL非关系型数据库 CAP理论和BASE特性 关系型数据库主要使用ACID理论 各种NoSQL数据 库的分类与特点

中国海洋大学整体来说值得报考吗?中国海洋大学考情分析。

中国海洋大学&#xff08;Ocean University of China&#xff09;&#xff0c;简称中国海大。位于中国青岛&#xff0c;是中华人民共和国教育部直属的综合性重点大学&#xff0c;国家“双一流”、“985工程”和“211工程”重点建设高校之一&#xff0c;入选“2011计划”、“111…

RT-Thread事件集

文章目录 前言一、RT-Thread事件集的概念二、事件集函数的使用1.创建事件集函数2.事件集发送函数3.事件集接收函数4.事件集删除函数 三、事件集使用例程总结 前言 本篇文章将给大家讲解RT-Thread中事件集的概念&#xff0c;了解什么是事件集及事件集的函数使用方法。 一、RT-…

Lesson5--二叉树(超详细版)

【本节目标】 1. 树概念及结构 2. 二叉树概念及结构 3. 二叉树顺序结构及实现 4. 二叉树链式结构及实现 1.树概念及结构 1.1树的概念 树是一种 非线性&#xff08;线性结构就是顺序表链表&#xff09; 的数据结构&#xff0c;它是由 n &#xff08; n>0 &#xff09;个…

Linux 第三十章

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C&#xff0c;linux &#x1f525;座右铭&#xff1a;“不要等到什么都没有了…