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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

编程四十载 - 总结了 13 条建议

原文:Theo Leggett - 2024.03.12 引言 10 PRINT "HELLO" 20 GOTO 10(注:这段代码是 BASIC 语言,无限循环打印 “HELLO”) 1984 年的 4 月,我的父亲为自己的家庭办公室,购买了一台电…

用户数据的FLASH存储与应用(FPGA架构)

该系列为神经网络硬件加速器应用中涉及的模块接口部分,随手记录,以免时间久了遗忘。 一 背景 我们知道,在FPGA做神经网络应用加速时,涉及到权重参数的存储和加载。通常在推理过程中,会将权重参数存储在外部DDR或片上S…

数据资产在制造行业的应用:释放潜在价值,驱动产业升级

随着信息技术的飞速发展,数据已成为各行各业的重要资产。在制造行业中,数据资产的应用更是日益广泛,为企业的生产、管理、决策等各个环节带来了前所未有的变革。本文将深入探讨数据资产在制造行业的应用,以及如何通过数据驱动实现…

C/C++中{}的用法总结(全)

C基础专栏:http://t.csdnimg.cn/UjhPR 目录 1.定义初始化列表(Initializer List) 2.类成员初始化列表 3.无默认构造函数的类的默认初始化(C11 及以后版本) 4.初始化器列表构造函数(C11 及以后版本&…

HCIP —— 三层架构

企业网的三层架构 园区网络 常见的行业园区网 按照传输介质分类,可以将网络分为有线网络、无线网络和光纤网。 无线网络是有线网络的最后一公里。 无线网络 无线网络 --- Access Point --- 简称 AP --- 无线接入点 路由器上的WAN口:用于连接运营商的接口 路由器…

vue右键自定义样式

<!-- eslint-disable vue/no-dupe-keys --> <template><div><div class"search-box"><div class"search"><el-input placeholder"搜索" prefix-icon"el-icon-search" v-model"input2">…

STM32OLED调试工具

OLED介绍 4个引脚的oled &#xff1a; GND引脚接地&#xff0c;VCC接3.3v的电源 SCL与SDA是I2C通信的引脚 使用OLED显示屏驱动函数模块 接线图 将oled函数调试的代码引入到工程项目中 oled工程代码 OLED.C文件代码 #include "stm32f10x.h" #include "OLED_Font…

自定义方法SQL注入器-DefaultSqlInjector

/*** 自定义Sql注入* author zy*/ public class SqlInjector extends DefaultSqlInjector {Overridepublic List<AbstractMethod> getMethodList(Class<?> mapperClass, TableInfo tableInfo) {// 注意&#xff1a;此SQL注入器继承了DefaultSqlInjector(默认注入器…

Oracle 主从切换脚本

一、 切换前预检查 1. dg_precheck_main_v1.4.sh #!/bin/bash#********************************************************************************** # Author: Hehuyi_In # Date: 2022年06月16日 # FileName: dg_precheck_main_v1.4.sh # # For sys user, execute the sc…

2024年初中生古诗文大会备考:多选题真题和独家解析(持续更新)

今天我们继续来做初中古诗文大会的一道难题&#xff1a;多选题&#xff0c;让大家了解初中生古诗文大会的考察内容和形式&#xff0c;并且提供了我独家的题目解析和答案&#xff0c;供初中的同学们学习和参考。 Tips&#xff1a;古诗文大会的许多题目都来自于中考、高考&#…

goland设置保存文件时不将4个空格转为TAB

goland设置保存文件时不将4个空格转为TAB 版本&#xff1a;GoLand 2022.3 设置路径&#xff1a; Settings -> Editor -> Code Style -> Go -> Run gofmt图示&#xff1a;

springmvc学习笔记1

springmvc学习笔记part1 总概述图创建步骤创建project并在父工程中导入配置类添加为web工程检查maven配置写handller方法写配置类SpringMVC环境搭建项目部署关键步骤总结 具体设置路径设置注解接收参数&#xff08;重点param参数接收路径参数接收json参数接收请求头接收和cooki…

【Unity】persistentDataPath、streamingAssetsPath和dataPath

介绍 我们在用Unity进行开发时&#xff0c;资源路径是我们最常用到的&#xff0c;下面我就来简单介绍一下几种常用的路径。 1.dataPath dataPath是包含游戏数据文件夹的路径&#xff0c;是app程序包安装路径 Windows: xxx /Assets &#xff08;如下图&#xff09; Mac: xxx…

canvas绘制圆形进度条

canvas绘制圆形进度条 用canvas绘制了一个圆形进度条&#xff0c;记录一下&#xff1a; 效果如下&#xff1a; 感觉效果还行&#xff0c;不过有待优化 代码如下&#xff1a; 我是用Vue写的 组件的代码&#xff1a; progressCanvas.vue <template><div><can…

深度学习——基本数据类型创建Tensor(持续更新)

声明&#xff1a;本深度学习笔记基于课时18 索引与切片-1_哔哩哔哩_bilibili学习而来 All is about Tensor 定义&#xff1a;Tensors are simply mathematical objects that can be used to describe physical properties, just like scalars and vectors. In fact tensors a…

C语言黑魔法第三弹——动态内存管理

本文由于排版问题&#xff0c;可能稍显枯燥&#xff0c;但里面知识点非常详细&#xff0c;建议耐心阅读&#xff0c;帮助你更好的理解动态内存管理这一C语言大杀器 进阶C语言中有三个知识点尤为重要&#xff1a;指针、结构体、动态内存管理&#xff0c;这三个知识点决定了我们…

QT定时器使用

实现功能&#xff1a;在界面中显示日期跟时间&#xff0c;并时刻刷新 实现原理&#xff1a;定时器能反馈程序运行的时间&#xff0c;通过设定定时器的启动间隔可以实现对时间的更新 步骤&#xff1a; 1.设定两个QString分别获取系统当前的日期和时间&#xff0c;并导入到labl…

线性代数 --- 特征值与特征向量(下)

特征值与特征向量 Eigen Values & Eigen Vectors Part III:如何求解特征向量与特征值 The Key Equation 对于一般矩阵A&#xff0c;如何找到他的特征值与特征向量&#xff1f; Step I: Find λ first! 首先&#xff0c;我们有方程&#xff1a; 但这里有两个未知数&…

Git win与linux换行符转换的问题

转载&#xff1a;warning: in the working copy of ‘package-lock.json‘, LF will be replaced by CRLF the next time Git_warning: in the working copy of package.json, lf-CSDN博客 warning: in the working copy of ‘package-lock.json‘, LF will be replaced by CRL…

“人工智能+”成国策,天翼云如何打造大模型时代的驱动力样板?

文 | 智能相对论 作者 | 叶远风 两会政府工作报告中明确指出要制定支持数字经济高质量发展政策&#xff0c;开展“人工智能”行动&#xff0c;这意味着&#xff0c;“人工智能”已经成为国策。 在这种大背景下&#xff0c;大模型的重要性无疑被抬到了新的高度。 此时&#…