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