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

news2024/9/24 23:25:22

上篇文章我们介绍了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集群相关的内容就介绍到这里,下篇开始,我们来看一下如何高效实现服务间的消息通信。欢迎有兴趣的小伙伴继续关注。

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

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

相关文章

【javaWeb】在webapp中手动发布一个应用

标题 🐲一、为什么要在webapp中手动发布一个应用🎉二、手动发布步骤1.下载Tomcat2.解压并安装3.在webapps中创建文档 ✨三、总结 🐲一、为什么要在webapp中手动发布一个应用 好处解释灵活性手动发布应用程序可以根据自己的需求进行自定义配置…

Abaqus三维梯度泰森多边形插件:Voronoi FGM 3D(Mesh)- AbyssFish

插件介绍 Voronoi FGM 3D (Mesh) V1.0 - AbyssFish 插件可在Abaqus软件内生成梯度分布的三维泰森多边形长方体模型。插件可用于梯度功能材料(Functionally Gradient Materials)、梯度纳米金属材料、梯度金属结构等梯度晶体模型的建立。模型基于背景网格实现,通过单…

YOLO_项目环境配置

YOLOv5官方项目地址 https://github.com/ultralytics/yolov5 下载 5.0和1.0源码 5.0 master-Tags-v5.0 Code-Download.ZIP 切换到1.0下载 解压缩提取 打开V5.0 使用Pycharm打开V5.0的文件夹 环境配置 参考 http://t.csdnimg.cn/Zdfh2 http://t.csdnimg.cn/Nqkwr 然后在Pyc…

学习JAVA的二十二天(基础)

目录 网络编程 三要素: IP InetAddress类 端口号 协议 UDP协议 TCP协议 前言:学习JAVA的第二十一天(基础)-CSDN博客 网络编程 在网络通信协议下,不同计算机上运行的程序,进行的数据传输。 三要素:…

Qt篇——QChartView获取鼠标停留位置的数值

需求:鼠标停留在QChartView上时,想要计算停留位置的数值。 一开始的方法是想要通过鼠标移动事件计算鼠标在QChartView上的坐标,在换算成数值,后来发现QChartView中除了图表数据,还有坐标轴与坐标轴数值标签占了高度&a…

Python数据分析-Matplotlib1

一、折线图的绘制 1.数据分析流程 2.运用Matplot绘制折线图 #encodingutf-8 import random from matplotlib import pyplot as plt #绘图工具库 from matplotlib import font_manager #解决中文显示问题 from cProfile import label #设置字体方式 my_font font_manager.Fon…

个人简历主页搭建系列-02:github 仓库作为联系方式

这篇文章暂时没有开始正式搭建网站。首先是最重要的注意事项:隐私。 真实姓名如果大家自己不介意的话其实我觉得还好,现在在互联网上想扒个姓名挺简单的,而且很多人都实名上网hh(比如我的几位田径队学弟笑)。 电话&a…

怎样基于“用户”思维让内容营销更有效

当下互联网流量见顶,内容已经成为互联网竞争新的制高点,可以说在数字化驱动的新时代下,“内容为王”仍然是真理。然后信息泛滥的时代下,如何让内容营销脱颖而出呢?媒介盒子认为“用户思维”是关键,今天就和…

2024.3.14jsp

一、实验目的 1、安装配置JSP运行环境 2、设置web服务目录,修改TomCAT服务器的端口号、访问web服务目录下的jsp页面。 二、实验项目内容(实验题目) 1、编写两个简单的JSP页面;参考第一章上机实验1、2 (1&#xff09…

Spring Cloud Alibaba微服务从入门到进阶(四)(服务发现-Nacos )

Nacos是服务发现组件和配置服务器 作为服务发现注册组件Nacos Server 搭建Nacos Server 下载、启动 访问nacos,默认 用户/密码 nacos/nacos 将应用注册到nacos 加依赖 在SpringCloud子项目中,Feign是属于OpenFeign,Sentinel、Nacos是属于alibaba的&…

搭建个人智能家居 3 -第一个设备“点灯”

搭建个人智能家居 3 -第一个外设“点灯” 前言ESPHome点灯 HomeAssistant 前言 前面我们已经完成了搭建这个智能家居所需要的环境HomeAssistant和ESPHome,今天我们开始在这个智能家居中添加我们的第一个设备(一颗LED灯),如果环境…

Mysql---库表操作

文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 一.Mysql数据库简介 MySQL是一种关系型数据库管理系统,是最流行的开源数据库之一。它是由瑞典MySQL AB公司开发的,后来被Sun Microsystems收购,之后又被Oracl…

数码管的动态显示(三)

1.原理 data_reg寄存,只寄存符号位和数据位不包含小数点位。 动态数码管每个显示1ms,所以计数到5*10^4-1 为了将sel和seg同步,把sel打了一拍。 6位都使用到了可以这么计算,6位都显示的是数据。或者最高位显示的是小数点&#xff…

微软远程桌面RD Client:连接与管理的新境界

微软远程桌面RD Client:连接与管理的新境界 在数字化日益深入的今天,远程工作与管理已成为许多企业和个人的首选。微软远程桌面RD Client作为一款功能强大的远程连接工具,凭借其出色的性能和便捷的操作,受到了广泛的关注和好评。…

C# EPPlus导出dataset----Excel2绘制图像

一、生成折线图方法 /// <summary> ///生成折线图 /// </summary> /// <param name="worksheet">sheet页数据 </param> /// <param name="colcount">总列数</param> /// &l…

一、C#冒泡排序算法

一、C#冒泡排序算法 简介 冒泡排序算法是一种基础的排序算法&#xff0c;它的实现原理比较简单。核心思想是通过相邻元素的比较和交换来将最大&#xff08;或最小&#xff09;的元素逐步"冒泡"到数列的末尾。 实现原理 冒泡排序是一种简单的排序算法&#xff0c;其…

PGA高端项目:FPGA基于GS2971+GS2972架构的SDI视频收发,提供3套工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐本博已有的 SDI 编解码方案本方案的SDI接收图像缩放应用本方案的SDI接收纯verilog图像缩放纯verilog多路视频拼接应用本方案的SDI接收HLS图像缩放HLS多路视频拼接应用本方案的SDI接收OSD动态字符叠加输出应用本方案的SDI接收HLS多路视频融…

x6.js 从流程图组件库中拖拽组件到画布dnd使用

上一篇已经了解到了x6.js常用功能以及使用方法。但我们使用流程图的时候还少不了一个非常重要的功能那就是拖拽组件库里的组件进来。如下图&#xff1a; 首先是布局这块&#xff0c;拖拽组件库的视图中布局无需我们去写&#xff0c;我们只需把界面搭建好。 添加组件库 1.搭建布…

先验分布、后验分布、极大似然的一点思考

今天和组里同事聊天的时候&#xff0c;无意中提到了贝叶斯统计里先验分布、后验分布、以及极大似然估计这三个概念。同事专门研究如何利用条件概率做系统辨识的&#xff0c;给我画了一幅图印象非常深刻&#xff1a; 其中k表示时序关系。上面这个图表示后验分布是由先验分布与似…

pcl 直通滤波

pcl 直通滤波 处理某一个坐标轴方向上的点云 头文件等 #include<pcl/filters/passthrough.h>typedef pcl::PointXYZ PointT; typedef pcl::PointCloud<PointT> CloudT; typedef CloudT::Ptr CP; 主要代码 CP cloudTo(new CloudT);pcl::PassThrough<pcl::Poi…