Nacos 简介与 本地调试环境搭建

news2024/11/16 15:45:23

目录

1、简介

2、Nacos架构

3、本地调试环境搭建

3.1 源码下载

3.3 单机启动 Nacos

3.4 集群方式启动:基于文件方式

4、Nacos源码模块介绍

5. 约定说明


1、简介

Nacos是Dynamic Naming and Configuration Service的首字母简称

Nacos由阿里巴巴开源,经过10年双十一的高并发考验。支持具有数百万服务的大规模场景。

使用Java语言编写,包含 服务管理配置管理 两大功能

本系列基于最新版本 Nacos2.2.0 讲解

Nacos官网 home

Github https://github.com/alibaba/nacos

BLOG blog

2、Nacos架构

用户通过NacosSDK、控制台、Nacos接口 与NacosServer交互。

NacosNaming 和 NacosConfig 依赖了 Nacos-Core 只需要负责实现自己的代码。

Nacos-core 为 Nacos核心模块,实现了插件机制、事件机制、日志模块、回调机制、寻址机制、传输通道、容量管理、流量管控、缓存机制、启动模式等。

Nacos 将存储层与一致性层抽离了出来,供上层的服务注册发现模块和配置中心模块使用。

3、本地调试环境搭建

3.1 源码下载

推荐从发行版页面下载已发布过的版本,因为最新的代码可能无法运行(比如缺少类等等。。)

Releases · alibaba/nacos (github.com)

本专栏使用最新版本 Nacos 2.2.0

https://github.com/alibaba/nacos/archive/refs/tags/2.2.0.zip

如果 GitHub 打不开,我准备了 百度云网盘的 下载方式:

链接: 百度网盘 请输入提取码

3.2 MySQL 数据库准备

将代码导入 IDEA, 等待 maven 导入依赖完成。

Nacos 使用 MySQL 数据库作为存储。我们需要准备 MySQL 数据库。

先创建一个数据库,名字可以随意起。找到代码中 nacos/distribution 模块下 conf/mysql-schema.sql 文件

将该文件导入刚创建的数据库中,结果如下。

然后修改 Nacos console 模块的数据库链接配置,改为刚创建的数据库。

3.3 单机启动 Nacos

单机即只有一个节点的 Nacos,我们在学习或测试的时候使用,这种方式,启动快速,不需要怎么运维。

Nacos 由 SpringBoot 编写,所以直接按照 SpringBoot 的方式启动即可。

启动 console 模块的的 com.alibaba.nacos.Nacos 类。

此时可能编译不通过,下面再说,我们先把 单机 参数加上。

由于刚才点了启动,IDEA 右上角就会生成当前应用的启动项目了。点击 Edit Configurations

增加 虚拟机参数 -Dnacos.standalone=true (按快捷键 alt + v 在定位后的输入框输入这个参数) 然后点击 Apply

在编译过程中,会报错:consistency 的 entity 包不存在

这是由于 Nacos 使用了 Protobuf 序列化,这些不存在的类都是由 Protobuf 编译出来的,这里我们需要手动将编译出来的类放到源码中。

编译项目:可使用 mvn compile 命令 或 直接在 IDEA maven 视图中 双击 compile

编译完成后,打开nacos-consistency 项目的 target\generated-sources\protobuf\java\com\alibaba\nacos\consistency\entity 目录

即可看到生成的类。

直接复制 entity 文件夹到 com.alibaba.nacos.consistency 下

然后再次运行 console 项目。

启动成功,点击控制台的链接即可进入 Nacos 管理界面。

默认账号是 用户名 nacos 密码 nacos

登录后即可进入 Nacos 管理界面。

3.4 集群方式启动:基于文件方式

集群代表存在多个 Nacos 节点,要考虑的一个问题是,一个节点如何知道其他节点呢(要从其他节点之间互相同步数据)

基于文件方式的意思是,一个节点 从一个文件 中得到集群中其他节点。

也就是说,我们要在文件中填写集群全部节点地址。

在 nacos 中,这个配置文件的模板在 distributetion 下的 nacos-2.2.0\distribution\conf\cluster.conf.example

观察内容:cluster.conf.example 列出了全部节点的地址信息。

该文件配置的内容为 其他节点的地址。

现在我们在本机搭建一个三节点的集群开发环境。首先我们需要准备好cluster.conf文件。

首先我们创建三个文件夹,每个文件夹为每个节点使用的文件目录。

注意端口不能连续

Nacos 2.x 开始增加了GRpc 通信,集群之间通过 GRpc 传递消息。

GRpc 需要两个端口,分别是当前 Nacos 节点作为 服务端和客户端通信的端口

这两个端口怎么来的呢,就是使用 Nacos 端口 + 偏移量计算得出。

对于服务端 偏移量 offset 为 1001

对于客户端 偏移量 offset 为 1000

假设当前节点端口为 8848,则 GRpc 服务端 端口为 9849 (8848 + 1001),GRpc 客户端端口为 9848 (8848 + 1000)

现在说说为什么端口不能连续

如果定义第二个集群节点端口为 8849

则其 GRpc 服务端为 9850 (8849 + 1001),GRpc 客户端为 9849 (8849 + 1000)

也就是说第二个节点的 GRpc 客户端端口将会和 第一个节点的 GRpc服务端 一样,这样就会造成端口冲突。

现在来继续配置集群

准备三个文件夹

这里的文件夹即配置我已经准备好了,您可以继续跟着教程手动创建,也可以直接使用我准备好的。

网盘链接: 百度网盘 请输入提取码

在每个文件夹下 创建 /conf/cluster.conf 文件,文件内容为全部节点的地址。

然后将conf 文件夹复制到其他节点下。

最终如下。

现在开始创建三个新的启动项目

打开 IDEA 的 Run/Debug Configurations,点击 + 号 选择 SpringBoot

选好模块,JDK,启动主类

然后开始配置参数

启动端口:按 Alt + R 快捷键,在随后光标定位到的输入框中输入 --server.port=8848

NacosHome :虚拟机参数 -Dnacos.home=D:\NacosClusterHome\NacosHome8848,这里的地址填写你刚才创建的地址。

按快捷键 Alt + V ,在随后光标定位到的输入框输入该配置。

为什么要配置 nacos.home 呢?

这个参数代表 nacos 的工作目录,nacos 产生的数据都会以文件方式存放到 该目录下。

cluster.conf 文件的读取也是使用 ${nacos.home}/conf/cluster.conf 规则读取的。

nacos.home 默认值是 C:\Users\xxx\nacos

如果当前的机器只运行一个nacos节点,这当然没有问题。

但现在我们搭建的是本地三个节点的集群,如果使用默认的配置,就会导致本地这三个节点都使用了同一目录,这会导致冲突。

所以我们需要手动指定每个节点的 nacos.home 目录。所以在启动的时候配置系统环境变量 nacos.home。以至于每个节点的home目录都不一样。

对于这个过程中,如果配置了参数,但未出现预期的行为,可能是你的参数配置错了,可参考此篇博文来排查问题。

Java 中的不同参数类型_阿里巴巴首席技术官的博客-CSDN博客

好 8848 创建好后,再复制 8848 然后创建其他节点。

然后依次启动这三个节点

当控制台输出 Nacos started successfully in cluster mode 日志时代表已启动成功。

随便点击一个节点的控制台链接,即可进入 Nacos 管理页面。

默认账号是 用户名 nacos 密码 nacos

点击 集群管理 -> 节点管理 可查看当前集群节点信息。

4、Nacos源码模块介绍

  • nacos-address:地址服务

  • nacos-api:对外提供的api接口

  • nacos-auth:Nacos鉴权功能

  • nacos-client:Nacos客户端,完成服务注册发现、由SpringBoot、SpringCloud调用。

  • nacos-cmdb:与其他数据库厂商打通

  • nacos-common:公共工具类

  • nacos-config:Nacos配置中心模块

  • nacos-consistency:Nacos一致性模块

  • nacos-console:Nacos入口程序

  • console-ui:Nacos后台管理的前端代码

  • nacos-core:插件机制、事件机制、日志模块、回调机制、寻址机制、传输通道、容量管理、流量管控、缓存机制、启动模式

  • nacos-distribution:集群方式的启动、停止Nacos脚本,配置文件。

  • nacos-example:各种功能的demo

  • nacos-istio:对istio的支持、如k8s等

  • nacos-naming:Nacos服务管理模块/服务注册与发现

  • nacos-plugin:Nacos插件模块

  • nacos-plugin-default-impl:Nacos插件模块 实现的一个示例

  • nacos-sys:提供操作系统相关的类、工具类

  • nacos-test:nacos的单元测试

5. 约定说明

本专栏贴出的 Nacos 部分源码都会标有 省略非关键代码 说明,此时代码只贴出了部分关键代码,类的继承实现、成员变量、方法内容都有可能省略一些代码,目的就是为了展示当前要讲解的 关键代码,所以您会发现本专栏贴出来的代码会与源码不一致甚至少了许多代码。

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

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

相关文章

PyTorch入门

开发环境 ANACONDA 官网:Anaconda | The World’s Most Popular Data Science Platform cmd窗口验证安装成功 CUDA 官网:CUDA Toolkit Archive | NVIDIA Developer 选择匹配pytorch的版本下载安装 命令窗口验证安装成功 PyTorch 官网:…

【JavaSE】泛型

目录 一、泛型概念 二、泛型的语法 1、语法 2、实例化 4、泛型如何编译 5、泛型的上界 6、泛型方法 三、通配符 1、使用场景 2、使用 3、通配符的上下界 一、泛型概念 泛型就是适用于许多许多类型,是在jdk1.5引入的 二、泛型的语法 1、语法 class 类名&l…

Apache Hudi Table Query Types

目录 Table Types​ Query types​​​​​​​ Copy On Write Table Merge On Read ​​​​​​​Table & Query Types | Apache Hudi Hudi表类型定义了如何在DFS上对数据进行索引和布局,以及如何在这样的组织之上实现上述原语和时间线活动&#…

区块链入门的几个基本问题

目录前言比特币区块链区块链大揭秘抛砖引玉故事一故事二总结引人入胜侃侃而谈去中心化开放性不可篡改性相关技术共识机制共识机制的两大核心达成共识的主要过程(产生新区块的过程)工作量如何理解?Hash计算Bits和目标Hash值Merkle Root双花问题…

新手python学什么最吃香?

前言 今天跟大家聊聊Python的几个主要发展和就业方向,给准备学习Python的小伙伴解惑。 “ 我想学Python,但是学完Python后都能干啥?” “ 现在学Python,哪个方向最简单?哪个方向最吃香?” “ …… ” …

LeetCode题解 二叉树(五):226 翻转二叉树;101 对称二叉树;100 相同的树;572 另一个树的子树

226 翻转二叉树 easy 这道题有一段广为人知的传说:曾有人说Homebrew(适用于macOS和Linux的开源软件包管理器)的作者Max Howell,没有在白板上写出这道题目,被Google拒绝了。 至于是不是真的因为没做出来这道题就被拒绝…

深入浅出JVM之执行引擎的解释执行与编译执行

本篇文章围绕执行引擎,深入浅出的解析执行引擎中解释器与编译器的解释执行和编译执行、执行引擎的执行方式、逃逸分析带来的栈上分配、锁消除、标量替换等优化以及即时编译器编译对热点代码的探测 执行引擎 hotspot执行引擎结构图 执行引擎分为解释器、JIT即时编译…

大数据框架Hadoop篇之Hadoop入门

1. 写在前面 今天开始,想开启大数据框架学习的一个新系列,之前在学校的时候就会大数据相关技术很是好奇,但苦于没有实践场景,对这些东西并没有什么体会,到公司之后,我越发觉得大数据的相关知识很重要&…

Jmeter(二十二):硬件性能监控指标

硬件性能监控指标 一、性能监控初步介绍 性能测试的主要目标 1.在当前的服务器配置情况,最大的用户数 2.平均响应时间ART,找出时间较长的业务 3.每秒事务数TPS,服务器的处理能力 性能测试涉及的内容 1.客户端性能测试:web前…

洛谷——【入门2】分支结构

文章目录题单简介【深基1-2】小学数学 N 合一题目描述问题 1问题 2问题 3问题 4问题 5问题 6问题 7问题 8问题 9问题 10问题 11问题 12问题 13问题 14输入格式输出格式样例 #1样例输入 #1样例输出 #1提示AC代码【深基2.习6】Apples Prologue / 苹果和虫子题目描述输入格式输出格…

尝鲜:SpreadJS-en已出 16.0 SpreadJS-cn 16.0-23年1月出

此次版本更新将带来众多的增强功能,而其中新的文件结构尤为重要,是近几个版本中最重要的架构级更新! 其设计目标是 *减少 SSJSON 的体积,平均减小到原来 30% *提供按需加载(Lazyload)能力,相对…

【学习】https://gitee.com/DingJiaxiong

【学习】https://gitee.com/DingJiaxiong 文章目录【学习】<https://gitee.com/DingJiaxiong>0 前言1 Java SE2 Java Web3 Maven基础4 Git5 SSM框架6 MybatisPlus7 SpringBoot0 前言 事情是这样&#xff0c;我准备把之前所有的笔记都放到Gitee 上了 不用GitHub … 就别问…

Spring的AOP切面应用对【后台对接口增强】

目录&#x1f4da;简介&#xff1a;&#x1f4a8;切面表达式&#xff1a;&#x1f4ad;切面通知类型&#xff1a;&#x1f5fa;️创建项目演示&#xff1a;&#x1f3a2;创建项目&#xff1a;&#x1f383;添加依赖&#xff1a;&#x1f4a8;编写切面类&#xff1a;&#x1f68…

前端显示分页详解

我们在浏览页面的时候&#xff0c;是不是经常看到网页经常是以页面的形式给我们展现出来的&#xff0c;我们以淘宝的页面为例&#xff08;如下图&#xff09;&#xff0c;那这样按照页面呈现有什么好处呢&#xff1f;这篇文章让我们来深入探究了解这其中的奥秘。 优点&#xff…

泛型自动装箱

目录 前言 泛型 1.泛型的目的 2.泛型存在的意义和注意事项&#xff1a; 3.擦除机制 4.泛型的边界 5.泛型方法&#xff1a; 包装类&#xff1a; 前言 只要知道《》是啥意思&#xff0c;其他了解即可 泛型的上界 通配符简单知道就行 泛型 1.泛型的目的 指定当前的容器&am…

【JVM】浅析程序计数器与虚拟机栈

文章目录1. 程序计数器2. 虚拟机栈3. 栈内存溢出1. 程序计数器 Program Counter Register 程序计数器&#xff08;寄存器&#xff09; 程序计数器的作用是什么&#xff1f; 是记录下一条JVM指令的执行地址行号 程序计数器有什么特点&#xff1f; 线程私有的不会存在内存溢出 …

ADI Blackfin DSP处理器-BF533的开发详解59:DSP控制ADXL345三轴加速度传感器的应用2(含源码)

硬件准备 ADSP-EDU-BF533&#xff1a;BF533开发板 AD-HP530ICE&#xff1a;ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 MEMS三轴加速度传感器 我做了一个三轴加速度传感器的子卡&#xff0c;插在这个板子上&#xff0c;然后写了一些有意思的应用程序。 硬件实现原理…

Linux——定制Linux

Linux启动流程 首先&#xff0c;Linux要通过自检&#xff0c;检查硬件设备有没有故障如果有多块启动盘的话&#xff0c;需要在BIOS选择启动磁盘启动MBR中的bootloader引导程序加载内核文件执行所有进程的父进程、老祖宗systemd欢迎界面 加载内核文件的关键文件 kernel文件&a…

C#调用Python脚本训练并生成AI模型(以Paddle框架为例)

目录一. IronPython语言移植1.1 IronPython安装1.2 示例代码1.3 运行结果1.4 特点二. C#调用Python文件打包dll2.1 步骤2.2 限制三. C#命令行调用.py文件执行3.1 代码3.3 运行结果3.4 特点四. C#调用Python可执行exe4.1 步骤4.1.1 使用pyinstaller打包python程序4.1.2 在c#中调…

入门:手动构建镜像

前面我们已经了解了Docker镜像的结构&#xff0c;实际上所有常用的应用程序都有对应的镜像&#xff0c;我们只需要下载这些镜像然后就可以使用了&#xff0c;而不需要自己去手动安装&#xff0c;顶多需要进行一些特别的配置。当然要是遇到某些冷门的应用&#xff0c;可能没有提…