初探Raft算法

news2024/11/28 16:31:54

在这里插入图片描述

在分布式系统有一个经典的CAP理论,C:一致性,即集群中所有节点都应该是一致的。A:可用性,集群一直处于可用状态。P:分区容错性:即复制所有数据到集群的所有节点,保证即使出现网络分区,不同的网络分区都可以访问到数据,不过这里又要引用出数据一致性。

因为网络始终存在不可靠的可能,所以在P确定的情况下,我们只能从C和A中选择一种,优先选择C。

Raft算法实现的是强一致性,即优先追求数据一致性,若集群无法达到一致性,则应该停止服务。raft使用了“Quorum”机制,只要集群中超过半数节点可以正常运转,集群就可以正常提供服务。同时Raft还使用了该机制来达成共识,即一个操作只要半数节点同意,即可进行。

一般Raft会选举出一个leader(领导)节点,由leader节点负责所有写请求,保证了操作顺序,同时leader会把自己收到请求广播给其他follow节点,从而达成数据一致性。

通过以上描述,我们需要知道的是:

  1. 如何进行领导选举

    集群启动或leader节点下线的时候都需要进行leader选举,此外raft中leader还有任期的概念,每个任期都要选举新的leader。

    1. raft中节点状态:
      1. leader:leader节点定时像follower节点发送心跳维护leader地位。
      2. candidate:follower节点在一段时间没有收到心跳消息后,会转化为candidate(候选)节点,并发起选举流程
        1. 增加任期,更新currentTerm 为currenTerm+1
        2. 给自己投上一票
        3. 向集群其他节点发送报文请求,要求它们给自己投票。
      3. follower
    2. 投票实现:
      1. 其他节点收到candidate节点的投票要求后,会进行如下操作:
        1. 比较任期,如果candidate的任期比自己小则拒绝
        2. 比较上一条日志的任期号和索引值,若小于则拒绝
        3. 如果任期相等,且接收节点的votedFor不为空,说明该任期内已经投过票,拒绝
        4. 投票,更新任期时间,重置选举超时时间。
    3. candidate节点状态转换:
      1. 收到超过半数的投票,成为leader节点
      2. 收到其他节点的心跳报文,且任期不小自己当前的任期,说明已经有leader节点了,转换为follower节点
      3. 等待一段时间,选举超时或没有收到心跳报文,开始重新选举
  2. 日志复制

    leader节点会将每个请求记录为一个新的日志条目并加入到本地日志集中,然后通过心跳报文,发送给集群中其他节点,让其复制该条日志条目。因此所谓的数据一致性,其实可以看做成日志的一致性。心跳报文也可看做附加日志报文。

    1. 日志复制流程:
      1. follwer节点收到报文以后,首先比对任期值大小,若报文任期小于节点当前任期则拒绝
      2. 执行日志一致性检查操作,不通过则拒绝
        1. 检查日志的任期号和索引,一致则相同
      3. 添加日志报文到本地日志集中,若本地日志集与报文日志有冲突(索引相同,任期不同),则需删除索引及以后的所有日志
  3. 数据安全

    1. 投票限制,如果一个节点不包含所有已提交日志,则不能当选leader节点
    2. 新的leader节点不会抛弃前一任未提交的日志,而是继续处理。如果一个日志在前一个任期已经被多数节点接受,在现任期中,需等到当前任期的日志被大多数节点接受,才会提交。

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

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

相关文章

TQRFSOC开发板47DR,LMK04832更新配置

在利用RFSOC开发板进行项目开发时,面对多样化的时钟需求,巧妙地配置LMK04832时钟管理芯片以输出精确的时钟信号显得尤为重要。本期内容将讲解如何通过ZYNQ更新LMK04832的配置,以满足您的特定时钟需求。 每次配置成功后,配置文件都…

电路笔记(PCB):JLC PCB布局和走线基础教程笔记

对立创EDA 四层板PCB设计保姆级教程的笔记看完才发现是个虚假的教程,除了没教四层板咋画其它教了(中间的两层全是GND的作用) PCB布局 转换原理图 使用USB模块(3.0集线器)中的原理图。设计- - -》更新/转换原理图到P…

CSP内容安全策略

目录 CSP内容安全策略 一、引入 二、CSP内容安全策略 1、通过 HTTP 响应头信息的 Content-Security-Policy 的字段 2、通过网页的 meta 标签 3、在security的read.php页面,增加以下响应头 4、report-uri安全报告 5、其他安全配置 6、Web服务器全局配置 三…

机器学习:逻辑回归处理手写数字的识别

1、获取数据, 图像分割该数据有50行100列,每个数字占据20*20个像素点,可以进行切分,划分出训练集和测试集。 import numpy as np import pandas as pd import cv2 imgcv2.imread("digits.png")#读取文件 graycv2.cvtColor(img,cv2.COLOR_BGR2G…

8月20日

思维导图 面试题整理: 数据结构中顺序表和链表的区别? 顺序表: 1、存储方式:顺序表是一系列连续的内存空间,每个元素的地址可以通过索引计算出; 2、访问速度:由于不需要遍历查找,访问速度较…

一路坎坷-Mac下安装Python3、环境变量配置、安装jupyter notebook

遇到很多问题最终解决--Mac下安装Python3、环境变量配置、安装jupyter notebook 下载-安装python打开Mac终端-安装Jupyter给python3配置环境变量给jupyter配置环境变量配置遇到的问题 首先说一下我是先下载python3.8-然后安装;再在苹果电脑的终端下载Jupyter的&…

【JAVA CORE_API】Day18 网络编程、线程、在线聊天室v1.0

C/S:客户端/服务器端,所有网络应用都是基于客户端服务器端进行的,Java写的是服务端,客户端是一个软件,服务端也是一个软件,两个软件之间交互;(只能连接对应的服务器) B/…

使用 Arch Linux 几个月有感 | 为什么我选择 Arch Linux ,Arch 的优缺点有什么 | 一些Linux发行版推荐

(终端是 Yakuake ,KDE 自带) 一点碎碎念,可以跳过不看 几年前从 CentOS 接触的 Linux ,试图搭建一个KMS服务器 但是失败了 ,后来装过 Ubuntu Debian deepin Kali Kubuntu Manjaro,踩一路坑最后…

线性数据结构的基本概念(数组,链表,栈,队列)

数组 数组由相同类型的元素组成,使用一块连续的内存来存储。 数组的特点是: 1.利用索引进行访问 2.容量固定 3.使用一块连续的内存来存储 各种操作的时间复杂度: 查找/修改:O(1)//访问特定位置的元素 插入…

day07_算法训练

案例零:整数反转(大整数算法) 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。 暂时不用考虑数据太大的问题,把本题的核心思路写出来即可 比如: ​ 输入:x 123 ​ 输出…

一分钟带你了解叉车!

一、叉车的概念 叉车是指对整件托盘货物或大件桶装进行装卸、堆垛和短距离运输作业的各种搬运车辆。叉车是实现整件货物和散装物料机械化装卸、堆垛和短途运输的高效率工作车辆。 叉车常用于仓储大型物件的运输、车站、码头、机场、仓库、工地、货厂和工矿企业,是…

【案例47】enq: TX - row lock contention事件导致制单卡死

问题现象 制单时,选择公司就会卡住不动,其他节点正常。 问题分析 通过nmc排查,发现后台有很多制单线程卡住,时间较久,并且当前的事件都是在数据库执行sql层面。并且每条线程的卡住语句都为update语句,怀…

Openstack 与 Ceph集群搭建(中): Ceph部署

文章目录 一、部署前说明1. ceph 版本选择依据2. ceph网络要求3. 硬件要求 二、部署架构三、部署过程1. 通用步骤2. 部署管理节点创建账号安装Cephadm运行bootstrap 3. 登录Ceph web4. 将其他节点加入集群同步ceph key安装ceph CLI命令行添加主机节点到集群添加OSD节点将监控节…

[数据集][目标检测]机械常用工具检测数据集VOC+YOLO格式4713张8类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):4713 标注数量(xml文件个数):4713 标注数量(txt文件个数):4713 标注…

配置typora上传图片到Chevereto图床

目录 一、下载安装PicGo二、配置PicGo三、配置Typora 一、下载安装PicGo PicGo下载地址点击进入 进入官网后点击下载,会跳转到GitHub,如图,选择对应的操作系统版本下载 下载完成后单击安装(本文已windows系统为例) 二、配置PicGo 点击插件设…

华为OD机试 - 密码输入检测 字符串

只在本地跑过&#xff0c;不确保一定对 #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <string.h>#define setbit(value,bit) (value value |(1<<bit))int main(void) {char buf[201];char out[201];int i 0;int to…

UploadLabs靶场环境

目录 UploadLabs靶场环境 第十八题 第十九题 第二十一题 UploadLabs靶场环境 .php .php. . 第五&#xff0c;十关访问的时候空格必须要使用 %20代替 第七题在linux服务器上的话&#xff0c;文件名如果末尾只存在空格并不会自动删除&#xff0c;还会保留&#xff0c;但是这…

合宙Air700ECQ硬件设计手册——应用接口1

Air700ECQ是一款高度集成的LTE Cat1无线通信模组&#xff0c;基于移芯EC716E平台设计&#xff0c;有着极小的封装和极高的性价比。 它支持移动双模FDD-LTE/TDD-LTE 4G远距离无线传输技术&#xff0c;能够广泛应用于共享设备、定位器、DTU数传等多种场景。 此外&#xff0c;Air7…

2024年互联网公司时薪排行榜大曝光!

2024年互联网公司时薪排行榜重磅出炉&#xff01;这一次&#xff0c;行业薪资数据的透明度前所未有&#xff0c;看完这份榜单&#xff0c;你会发现互联网圈子的贫富差距竟然如此悬殊&#xff0c;不禁让人直呼“酸了”&#xff01; 在这个人人都关注收入与回报的时代&#xff0…

算法之工程化内容(3)—— Docker常用命令

目录 1. 配置docker镜像加速 2. 创建镜像docker-name 3. 查看正在运行的镜像 4. 拉取镜像 5. 运行镜像 6. 停止/启动指定 id 的容器 7. 删除指定 id 的镜像/容器 8. docker发布和部署 (推荐教程&#xff1a;&#x1f69a; 发布和部署 - Docker 快速入门) 1. 配置docke…