当前位置: 首页 > news >正文

【微服务-Nacos】Nacos集群的工作原理及集群间数据同步过程

上篇文章我们介绍了Nacos集群的搭建方法及步骤,下面我们来看一下Nacos集群的工作原理,一共有两部分:Leader节点选举及各节点数据同步。

1、Nacos集群中Leader节点是如何产生的

Nacos集群采用了Raft算法实现。它是一种比较简单的选举算法,用于选举出Nacos集群中最重要的Leader(领导)节点。

在Nacos集群中,每个节点都有以下三种角色中的一种:

  • Leader:领导者(主节点),集群中最重要的角色,用于向其他节点下达指令。(一把手,请求接收并转发给其他节点处理,对能力的要求很高)
  • Candidate:参选者,参与竞选Leader的节点。(相当于岗位中的副职,等一把手GG的时候可以接替)
  • Follower:跟随者,用于接收来自Leader和Candidate的请求并进行处理。(相当于干活的大头兵,负责站队和干活)

可以看出,这里的Leader选举在集群中是有很重要的地位,毕竟蛇无头不行。那在什么情况下要开始选举Leader呢?有三个时机:

1、当Nacos节点启动后,还没有产生Leader时启动选举工作。

2、集群成员总量发生变化时重新选举。

3、当Leader停止服务后重新选举。

在介绍选举过程前,先来看一下任期的含义:

Raft算法将时间划分成任意不同长度的任期(Term),任期用连续的数字表示。每个任期的开始都是一次选举,一个或多个候选人会试图成为Leader。

下面来看一下选举过程:

(1)选举过程

1、当没有节点启动时

当所有Nacos节点都没有启动时,角色默认是Follower(跟随者),任期都是0。

节点角色任期状态
192.168.3.1:8848Follower0DOWN
192.168.3.2:8848Follower0DOWN
192.168.3.3:8848Follower0DOWN

2、当一个节点启动时

当第一个节点(192.168.3.1)启动后,节点角色会自动变为Candidate(参选者),192.168.3.1节点在每个任期开始时便会尝试向其他节点发出投票请求,征求其他节点选为 Leader(领导者)节点。只有算上自己获得超过半数的选票,这个 Candidate 才能转正为 Leader。

在当前案例,因为192.168.3.1发起选举投票,但 192.168.3.2和192.168.3.3 两个节点不在线,尽管 131 会投自己一票,但在总 3 票中未过半数,因此无法成为 Leader。因为第一次选举没有产生 Leader,过段时间在下一个任期开始时,192.168.3.1任期自增加 1,同时会再次向其他节点发起投票请求争取其他节点同意,直到同意票过半。

节点角色任期状态
192.168.3.1:8848Candidate16UP
192.168.3.2:8848Follower0DOWN
192.168.3.3:8848Follower0DOWN

3、当三个节点启动时

在 Raft 算法中,成为 Leader 的必要条件是某个 Candidate 获得过半选票,如果 192.168.3.2节点上线,遇到192.168.3.1节点 再次发起投票。192.168.3.2 投票给 192.168.3.1 节点,192.168.3.1 获得两票超过半数就会成为 Leader,192.168.3.2 节点自动成为 Follower(跟随者)。之后 192.168.3.3 节点上线,因为集群中已有 Leader,因此自动成为 Follower。

节点角色任期状态
192.168.3.1:8848Leader13UP
192.168.3.2:8848Follower13UP
192.168.3.3:8848Follower0UP

4、当Leader宕机时

当Leader节点无法提供服务(宕机)时,会在剩余的两个节点中产生新的Leader,现在192.168.3.1节点下线了,192.168.3.3获得了两票成为了新的Leader,192.168.3.2成为了Follower,但192.168.3.1节点已经下线但角色暂时仍为Leader。

节点角色任期状态
192.168.3.1:8848Leader13DOWN
192.168.3.2:8848Follower14UP
192.168.3.3:8848Leader14UP

新Leader产生后,192.168.3.1节点恢复上线了,但此时Nacos集群中已经有Leader了,192.168.3.1节点则自动变为Follower,且任期归0.

节点角色任期状态
192.168.3.1:8848Follower0UP
192.168.3.2:8848Follower14UP
192.168.3.3:8848Leader14UP

对于Nacos集群来说,只要“UP”状态节点数不少于“1+N/2”,集群就能正常运行。但少于“1+N/2”,集群仍然可以提供服务,但已无法保证Nacos各节点数据一致性。

以上就是Nacos基于Raft算法的Leader选举过程,确定Leader是维持Nacos集群数据一致的最重要前提。那下面再来看一下Nacos集群是如何通过Leader达成数据一致性的

2、Nacos节点间数据同步过程

关于Nacos节点间的数据同步过程,我们先看一下下面的图:


在Raft算法中,只有Leader才拥有数据处理和信息分发的权利。因此当服务启动时,如果注册中心指定为Follower节点,则步骤如下:

  • 1、Follower 会自动将注册心跳包转给 Leader 节点;
  • 2、Leader 节点完成实质的注册登记工作;
  • 3、完成注册后向其他 Follower 节点发起“同步注册日志”的指令;
  • 4、所有可用的 Follower 在收到指令后进行“ack应答”,通知 Leader 消息已收到;
  • 5、当 Leader 接收过半数 Follower 节点的 “ack 应答”后,返回给微服务“注册成功”的响应信息。

此外,如果某个Follower节点无ack反馈,Leader也会不断重复发送,直到所有Follower节点的状态与Leader同步为止。

以上便是Nacos集群中Leader选举算法及Nacos节点间数据同步的主体流程。通过文字表述可能有些绕口,建议多看几遍,按照服务器的IP来区分会更好理解。

Nacos集群相关的内容就介绍到这里,下篇开始,我们来看一下如何高效实现服务间的消息通信。欢迎有兴趣的小伙伴继续关注。

相关文章:

【微服务-Nacos】Nacos集群的工作原理及集群间数据同步过程

上篇文章我们介绍了Nacos集群的搭建方法及步骤,下面我们来看一下Nacos集群的工作原理,一共有两部分:Leader节点选举及各节点数据同步。 1、Nacos集群中Leader节点是如何产生的 Nacos集群采用了Raft算法实现。它是一种比较简单的选举算法&am…...

LeetCode202.快乐数

202快乐数 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。 如果这个过程 结果为 1&…...

c++面试整理(二)

一、new和malloc的区别 1.属性: new属于c运算符,编译器支持就可以,makkoc是c的标准库函数,需要引用头文件才可以调用。 2.参数和返回值 malloc分配内存时需要指定内存大小,返回值是void*的指针,需要强制转换 new根…...

Python中的区块链技术与应用

区块链技术是一个复杂的概念,涉及许多不同的方面,如加密算法、数据结构、网络协议等。在这里,我将提供一个简单的区块链实现示例,以帮助你理解其基本概念。请注意,这个示例是为了教学目的而简化的,并不适用…...

opencv-python 霍夫变换圆形检测:HoughCircles

文章目录 简介代码HoughCircles函数说明 简介 opencv中提供了基于霍夫变换的圆形检测方法,可实现下图所示的检测结果。 其中,【gray】是经过均值滤波的灰度图,其目的是将目标边缘凸显出来;【edge】是通过Canny边缘检测得到的灰度…...

行为型-观察者模式

文章目录 基本概念定义使用场景代码实现 延伸阅读java监听机制spring监听机制 基本概念 定义 观察者模式是一种行为型设计模式,它定义了一种一对多的依赖关系,当一个对象的状态发生改变时,其所有依赖者都会收到通知并自动更新。 观察者模式…...

《ElementPlus 与 ElementUI 差异集合》el-input 和 el-button 属性 size 有变化

差异 ** element-ui el-input、el-input-number 和 el-button 中,属性size 值是 medium / small / minielement-plus el-input、el-input-number 和 el-button 中,属性size 值是 large / default /small 如果你是自动升级,Vue3 系统会有如…...

pxe安装mini centos系统

一、准备工作 1、关闭防火墙和selinux systemctl stop firewalld && systemctl disable firewalldsetenforce 02、配置静态ip 需要在dhcp里面填写tftp配置,所以需要固定ip 二、dhcp安装配置 作用:给客户端提供ip地址,并告诉客户…...

Android studio 性能调试

一、概述 Android studio 的Profiler可用来分析cpu和memory问题,下来进行说明介绍。 二、Android studio CPU调试 从开发模拟器或设备中启动应用程序; 在 Android Studio 中,通过选择View > Tool Windows > Profiler启动分析器。 应…...

java8特性 stream流中map函数的使用

map 函数的作用就是针对管道流中的每一个数据元素进行转换操作。 例如 将集合中的每一个字符串&#xff0c;全部转换成大写&#xff01; List<String> collect alpha.stream().map(String::toUpperCase).collect(Collectors.toList()); //上面使用了方法引用&#xf…...

【Emgu CV教程】9.5、形态学常用操作之形态学梯度

文章目录 一、相关概念1.什么叫形态学梯度2.形态学梯度的函数 二、演示1.原始素材2.代码3.运行结果 一、相关概念 1.什么叫形态学梯度 形态学梯度&#xff0c;就是用膨胀的原始图像减去腐蚀的原始图像&#xff0c;所以它的特性就是去除前景物体的内部区域&#xff0c;只得到前…...

算法笔记之蓝桥杯pat系统备考(2)

算法笔记之蓝桥杯&pat系统备考&#xff08;1&#xff09; 文章目录 五、数学问题5.2最大公约数和最小公倍数5.2.1最大公约数5.2.2最小公倍数 5.3分数的四则运算5.3.1分数的表示与化简5.3.2分数的四则运算5.3.3分数的输出 5.4素数&#xff08;质数&#xff09;5.4.1[素数的…...

基于SpringBoot+Druid实现多数据源:注解+编程式

前言 本博客姊妹篇 基于SpringBootDruid实现多数据源&#xff1a;原生注解式基于SpringBootDruid实现多数据源&#xff1a;注解编程式基于SpringBootDruid实现多数据源&#xff1a;baomidou多数据源 一、功能描述 配置方式&#xff1a;配置文件中配置默认数据源&#xff0c…...

已解决org.apache.zookeeper.KeeperException.BadVersionException异常的正确解冲方法,亲测有效!!!

已解决org.apache.zookeeper.KeeperException.BadVersionException异常的正确解冲方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 目录 问题分析 报错原因 解决思路 解决方法 总结 博主v&#xff1a;XiaoMing_Java 问题分析 在使用Apache ZooKeeper进行…...

数据结构:堆

堆的概念 1.堆是一个完全二叉树 2.小堆(任何一个父亲<孩子),大堆(任何一个父亲>孩子) 堆的结构 物理结构:数组 逻辑结构:二叉树 #pragma once #include<assert.h> #include<iostream> typedef int HPDataType; typedef struct Heap {HPDataType* _a;int…...

CSS中三栏布局的实现

三栏布局一般指的是页面中一共有三栏&#xff0c;左右两栏宽度固定&#xff0c;中间自适应的布局&#xff0c;三栏布局的具体实现&#xff1a; 利用绝对定位&#xff0c;左右两栏设置为绝对定位&#xff0c;中间设置对应方向大小的margin的值。 .outer {position: relative;h…...

Linux搭建我的世界(MC)整合包服务器,All the Mods 9(ATM9)整合包开服教程

Linux使用MCSM面板搭建我的世界(Minecraft)整合包服务器&#xff0c;MC开服教程&#xff0c;All the Mods 9(ATM9)整合包搭建服务器的教程。 本教程使用Docker来运行mc服&#xff0c;可以方便切换不同Java版本&#xff0c;方便安装多个mc服版本。 视频教程&#xff1a;https:…...

让数据在业务间高效流转,镜舟科技与NineData完成产品兼容互认

近日&#xff0c;镜舟科技与NineData完成产品兼容测试。在经过联合测试后&#xff0c;镜舟科技旗下产品与NineData云原生智能数据管理平台完全兼容&#xff0c;整体运行高效稳定。 镜舟科技致力于帮助中国企业构建卓越的数据分析系统&#xff0c;打造独具竞争力的“数据护城河”…...

2.1HTML5基本结构

HTML5实际上不算是一种编程语言&#xff0c;而是一种标记语言。HTML5文件是由一系列成对出现的元素标签嵌套组合而成&#xff0c;这些标签以<元素名>的形式出现&#xff0c;用于标记文本内容的含义。浏览器通过元素标签解析文本内容并将结果显示在网页上&#xff0c;而元…...

设置浏览器显示小于12px以下字体

问题 我们在项目开发过程中有时候会遇到设计师给的小于12px的字体&#xff0c;IE、火狐浏览器、移动端等小于12px的字号大小还是可以正常显示的&#xff0c;但是谷歌浏览器上显示字体最小为12px&#xff0c;css设置font-size&#xff1a;10px&#xff0c;运行代码显示结果仍然…...

机器学习揭示h-BN莫尔超晶格中滑动铁电的拓扑极化图案与调控

1. 项目概述&#xff1a;当机器学习遇见莫尔物理最近几年&#xff0c;但凡关注凝聚态物理前沿的人&#xff0c;都绕不开“莫尔超晶格”这个词。简单来说&#xff0c;就是把两层原子晶体&#xff08;比如石墨烯、过渡金属硫化物&#xff09;稍微扭一个角度&#xff0c;或者让它们…...

神经符号系统实践:耦合机器学习与本体论提升机器人自主诊断能力

1. 项目概述&#xff1a;当机器学习遇见本体论 在机器人圈子里摸爬滚打十几年&#xff0c;我见过太多“聪明”但“不可靠”的自主系统。它们能精准识别物体、规划路径&#xff0c;但一旦遇到训练数据之外的场景&#xff0c;或者传感器出现一点小毛病&#xff0c;行为就可能变得…...

基于SVD/HOSVD与DLinear的流体场高分辨率预测模型解析

1. 项目概述&#xff1a;当流体动力学遇上智能预测在计算流体动力学&#xff08;CFD&#xff09;和科学机器学习&#xff08;SciML&#xff09;的交叉领域&#xff0c;我们每天都在和数据洪流搏斗。一次高保真度的湍流模拟&#xff0c;动辄产生TB级的高维时空数据——速度场、压…...

Agent 状态持久化:基于 Redis 的多轮交互上下文存储方案

一、 引言 (Introduction) 1.1 钩子&#xff1a;从 Siri 答非所问到 AI Agent 的「失忆症噩梦」 你有没有遇到过这种令人血压升高的场景&#xff1a; 早上起床&#xff0c;对着家里的智能音箱&#xff08;假设它搭载了最新的「多轮对话」AI Agent&#xff09;说&#xff1a;“嘿…...

【Claude教育内容创作黄金法则】:20年教育技术专家亲授5大不可复制的AI协同写作心法

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;Claude教育内容创作的范式革命 传统教育内容生产长期受限于人力密集、周期冗长与个性化不足三大瓶颈。Claude凭借其长上下文理解、结构化输出能力与教育领域微调优势&#xff0c;正推动一场从“经验驱动”到“…...

别光背公式了!用Python的NumPy和SciPy手把手带你玩转SVD(附实战代码与可视化)

别光背公式了&#xff01;用Python的NumPy和SciPy手把手带你玩转SVD&#xff08;附实战代码与可视化&#xff09;在数据科学和机器学习领域&#xff0c;奇异值分解&#xff08;SVD&#xff09;就像一把瑞士军刀——它可能不是你每天都会用到的工具&#xff0c;但当遇到棘手问题…...

Spark Transformer:稀疏激活技术提升大模型计算效率

1. Spark Transformer架构概述在当今大规模语言模型的时代&#xff0c;计算效率已成为制约模型实际应用的关键瓶颈。传统Transformer架构中&#xff0c;前馈网络(FFN)和注意力机制占据了绝大部分计算开销&#xff0c;特别是在处理长上下文时&#xff0c;这种计算负担呈指数级增…...

AI企业参与国防采购的挑战、机遇与实操路线图

1. 项目概述&#xff1a;当AI遇见国防采购&#xff0c;一场静默的“双向奔赴”在硅谷的咖啡厅和五角大楼的简报室之间&#xff0c;正上演着一场深刻而复杂的对话。话题的核心&#xff0c;是人工智能这项被誉为“新时代电力”的技术&#xff0c;如何融入世界上最庞大、最严谨的采…...

揭秘AI Agent如何3天筛选10万简历:头部猎企正在用的5个私有化部署方案

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AI Agent招聘行业应用全景图 AI Agent正以前所未有的深度与广度重塑招聘行业的技术范式。它不再局限于简历关键词匹配或简单流程自动化&#xff0c;而是以多角色协同、上下文感知、自主决策为特征&…...

别再手动跑Jupyter了!Lindy标准化流程强制接管你的分析工作流(仅剩最后23个企业未迁移)

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;Lindy数据分析自动化流程的演进逻辑与核心价值 Lindy效应指出&#xff0c;一个事物的预期剩余寿命与其当前已存在时间成正比——在数据分析领域&#xff0c;这一原理映射为&#xff1a;越经受住多轮业务迭代、…...