服务注册配置中心Nacos

news/2024/5/15 8:21:11/文章来源:https://blog.csdn.net/Siebert_Angers/article/details/128371124

文章目录

  • 一. 前言
  • 二. 下载安装
      • 1. 下载安装包
      • 2. Windows环境安装
      • 3. Linux环境安装
        • 1. 单击模式启动
        • 2. 集群模式启动
        • 3. 远程web控制
        • 4. 注册为系统服务
  • 三. 基本使用
      • 1. 添加依赖
      • 2. 服务注册
      • 3. 配置实例集群属性
      • 4. 实例权重负载均衡
      • 5. 环境隔离
      • 6. 临时实例与非临时实例
  • 四. Nacos配置管理
      • 1. Nacos实现配置热更新
      • 2. Nacos多环境配置共享
  • 五. Nacos集群搭建
      • 1. 搭建数据库
      • 2. 启动
      • 3. 安装Nginx


一. 前言

PS: 本篇博客为作者学习笔记实际技术参考意义不大,小编将持续更新完善本篇文章。
Nacos服务注册配置中心,一个更易于构建云原生应用的动态服务发现,配置管理和服务管理平台,属于Springcloud Alibaba 体系中的组件之一,也是目前企业开发中最流行的服务注册与配置中心。
在这里插入图片描述
更多详细信息各位小伙伴可以参照Springcloud Alibaba官网: 点击跳转官网
Nacos源码地址: 点击跳转源码地址
Nacos官网地址: 点击跳转官网
一些注册中心特性对比:
在这里插入图片描述

二. 下载安装

1. 下载安装包

Nacos既可以在Windows上使用,也可以在Linux上面使用,下面两种系统的Nacos安装小编都会介绍到,首先我们要准备好Nacos的安装包,点进入Nacos的仓库 点击跳转。
点击 【发行版】就可以看到Nacos的全部历史版本
在这里插入图片描述
点击 【标签】可以选择想要的版本下载
在这里插入图片描述
选择好版本点击最右边的【下载】后翻到最下面就可以看到对应的下载文件,【zip】则是windows版本 【tar.gz】就是Linux使用的版本。
在这里插入图片描述

2. Windows环境安装

准备好Windows环境下的安装包后,就可以开始Windows环境下Nacos的安装了。
将准备好的安装包解压到任意目录下(最好是全英文的路径)解压后文件夹内结构如下:
在这里插入图片描述
bin目录是存放启动脚本的目录 conf目录是存放Nacos配置文件的目录。
关于端口配置,Nacos的默认端口是8848,如果你电脑上的其它进程占用了8848端口,请先尝试关闭该进程。如果无法关闭占用8848端口的进程,也可以进入nacos的conf目录,修改配置文件中Nacos默认启动占用的端口:
在这里插入图片描述
在这里插入图片描述
确认端口没有问题后就可以进入bin目录启动cmd窗口,使用下面的命令启动Nacos:

startup.cmd -m standalone

也可以直接双击startup.cmd文件启动Nacos
在这里插入图片描述
看到上面这个样子就是启动成功了,也标明了启动占用的端口和后台的访问地址。
我们用浏览器直接访问 http://127.0.0.1:8848/nacos 即可,正常情况下会看到下面的内容:
在这里插入图片描述
默认的用户名和密码都是 nacos 直接登录即可,至此Windows环境下安装Nacos就完成了

3. Linux环境安装

对于Linux环境下Nacos安装相对于Windows环境下的安装要复杂一点,首先要准备好Linux版本的Nacos安装包,其次Nacos依赖于JDK运行,索引Linux上也需要安装JDK才行。
没有安装java环境的小伙伴可以参考小编这篇文章 点击跳转 配置好java环境后就可以开始我们的安装了。
首先将我们准备好的安装包上传到任意目录,列如 /usr/local/ 然后使用下面的命令进行解压:

tar -xvf nacos-server-1.4.1.tar.gz

然后执行下面的命令删除安装包:

rm -rf nacos-server-1.4.1.tar.gz

1. 单击模式启动

首先进入到已经解压好的Nacos目录的bin目录下:

cd /usr/local/nacos/bin

执行下面的命令启动Nacos:

sh startup.sh -m standalone

下面的情况是正常启动了
在这里插入图片描述
停止Nacos的命令:

sh shutdown.sh

2. 集群模式启动

集群模式的启动需要先创建数据库,脚本位置: /usr/local/nacos/conf/nacos-mysql.sql 利用该脚本创建数据库。
紧接着我们需要配置一下Nacos的配置文件:

cd /usr/local/nacos/conf
vim application.properties

修改下面的内容(将原来的注释放开,)

spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://10.114.12.177:3306/nacos?serverTimezone=GMT%2B8&characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=root

注意: 此处的ip地址、端口号、数据库名、账号和密码都需要按照自己的实际情况进行修改
启动:

cd /usr/local/nacos/bin
sh startup.sh

查看启动日志:

cd /usr/local/nacos/logs
vim start.out

3. 远程web控制

我们可以执行下面的命令放行当前主机的8848端口,以便我们访问远程的web控制台:

firewall-cmd --zone=public --add-port=8848/tcp --permanent

放行完端口再执行下面的命令重启一下当前主机的防火墙:

firewall-cmd --reload

紧接着我们就可以访问 http://当前主机地址:8848/nacos 就会出现下面的情况:
在这里插入图片描述
默认的用户名是: nacos 默认的密码也是: nacos

4. 注册为系统服务

为了更加方便的管理Nacos,最好是将其注册为系统服务
首先使用下面的命令修改 /usr/local/nacos/bin/startup.sh 启动文件

vim /usr/local/nacos/bin/startup.sh

在这里插入图片描述
将路径修改为当前系统中存放jdk的路径:
在这里插入图片描述
使用下面的命令创建并编辑nacos.service文件:

vim /lib/systemd/system/nacos.service

向文件中添加下面的内容:

[Unit]
Description=nacos
After=network.target[Service]
Type=forking
ExecStart=/usr/local/nacos/bin/startup.sh -m standalone
ExecReload=/usr/local/nacos/bin/shutdown.sh
ExecStop=/usr/local/nacos/bin/shutdown.sh
PrivateTmp=true[Install]  
WantedBy=multi-user.target

保存退出后执行下面的命令重载一下系统服务:

systemctl daemon-reload

就完成了Nacos的系统服务注册,服务名就叫nacos
之后我们就可以使用操作系统服务的命令对Nacos进行操作了,下面是一些常用命令:

systemctl start nacos.service // 启动nacos服务
systemctl stop nacos.service // 停止nacos服务
systemctl status nacos.service // 查看nacos服务状态
systemctl enable nacos.service // 设置为开机自启
systemctl restart nacos.service // 重启nacos服务
systemctl reload nacos.service // 重载nacos服务 (推荐使用)

三. 基本使用

1. 添加依赖

要想使用Nacos首先要在父工程的POM文件中添加下面的依赖:

<dependencyManagement><dependencies><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2.2.5.RELEASE</version><type>pom</type><scope>import</scope></dependency><dependencies>
<dependencyManagement>

在这里插入图片描述
然后修改子工程的POM文件,将下面的依赖加入其中:

<!-- nacos客户端依赖包 -->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

2. 服务注册

spring:application:name: orderservice  # 服务名cloud:nacos:server-addr: 127.0.0.1:8848 # 服务地址

再启动服务就可以在后台管理界面中的【服务列表】选项卡的子选项卡 【服务列表】中找到我们注册的服务。
在消费者进行服务调用的时候也就可以通过服务名进行调用了(orderservice代替id地址和端口),且Nacos自带了负载均衡。

3. 配置实例集群属性

配置当前服务的实例归属于哪个集群
修改模块的Yml配置文件:

spring:application:name: orderservice  # 服务名 可以通过相同的服务名部署多个实例cloud:nacos:server-addr: 127.0.0.1:8848 # 服务地址discovery:cluster-name: hangzhou # 集群名

在web控制台中可以看到集群的信息,再编辑Yml配置文件设置负载均衡的1Rule为NacosRule,这个规则优先会寻找与自己同集群的服务,本地集群找不到提供者,才去其它集群寻找,并且会报警告。
确定了可用实例列表后,再采用随机负载均衡挑选实例。

userservice:ribbon:# 优先请求同集群的实例NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule

4. 实例权重负载均衡

实际部署中会出现这样的场景:服务器设备性能有差异,部分实例所在机器性能较好,另一些较差,我们希望性能好的机器承担更多的用户请求。
Nacos提供了权重配置来控制访问频率,权重越大则访问频率越高。
在这里插入图片描述
默认权重都是1,在服务升级和优化时可以将该服务权重设置成0,该服务就不会再收到请求。

5. 环境隔离

Nacos中服务存储和数据存储的最外层都是一个名为namespacel的东西,用来做最外层隔离。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
修改实例的命名空间需要修改服务的配置文件,默认都是存储在public(保留空间中):

spring:application:name: orderservice  # 服务名 可以通过相同的服务名部署多个实例cloud:nacos:server-addr: 127.0.0.1:8848 # 服务地址discovery:cluster-name: hangzhou # 集群名namespace: 4d6ce343-9e1b-44df-a90f-2cf2b6b3d177 # dev环境 命名空间Id

在这里插入图片描述
注意: 只有相同命名空间的服务实例才可以相互调用

6. 临时实例与非临时实例

默认在Nacos中注册的实例都是临时实例,那么临时实例与非临时实例有什么区别呢?
临时实例: 采用心跳检测(服务每隔一段时间就会发送一次请求给注册中心Nacos确保实例的可用性)当长时间没有向Nacos发送心跳请求Nacos就会在服务列表中将该实例剔除。
非临时实例: 不会拥有心跳检测机制,而是由Nacos主动发送请求询问实例,如果检测到非临时实例Nacos不会将其剔除,而是标记为不健康状态除非手动删除,否则会一直等待其恢复健康状态。
对于配置实例是否为临时实例需要配置实例的YAM配置文件:

spring:application:name: orderservice  # 服务名 可以通过相同的服务名部署多个实例cloud:nacos:server-addr: 127.0.0.1:8848 # 服务地址discovery:cluster-name: hangzhou # 集群名namespace: 4d6ce343-9e1b-44df-a90f-2cf2b6b3d177 # dev环境 命名空间Idephemeral: false # 是否为临时实例 默认是true

四. Nacos配置管理

1. Nacos实现配置热更新

Nacos处理可以担任服务注册中心,还可以担任服务的配置中心,首先我们需要在模块的POM文件中添加Nacos的配置管理依赖:

<!--nacos的配置管理依赖-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

然后我们在后台管理界面中点击【配置管理】的【配置列表】模块右上角的加号先添加一个。
在这里插入图片描述
【Data ID】其实就是配置文件名 (必须唯一) 一般以“服务名-运行环境.后缀” 作为文件名
列如:userservice-dev.yaml
【Group】组ID 这个自定义
【配置格式】一般都是使用YAML,根据后缀自定义
【配置内容】根据选择的文件格式书写有热更新需求的配置
在这里插入图片描述
修改完成后点击右下角的【发布】即可,由于在读取Nacos中的配置文件之前我们实例就需要知道Nacos的服务地址等信息,所以我们一般将Naocs的配置放在加载优先级更高的bootstrap.yml文件中
在这里插入图片描述
: bootstrap.yml又叫引导文件,加载优先级比application.yml要高
可以在resources目录中添加一个bootstrap.yml,需要添加的配置如下:

spring:application:name: userservice # 服务名profiles:active: dev # 环境cloud:nacos:server-addr: 127.0.0.1:8848 # nacos地址config:file-extension: yaml # 文件后缀名

其中“服务名”、“环境”、“文件后缀名” 其实就是我们上面在后台创建的配置文件名,相应的就会读取后台相应配置文件内容,在项目中我们也可以使用value注解读取配置文件中的内容,列如:

 @Value("${pattern.dateformat}")private String dateformat;

要想实现配置热更新还差最后一步,Ncos中的配置文件变更后,微服务无需重启就可以感知。不过需要通过下面两种配置实现:
在这里插入图片描述
需要 prefix指定的前缀名跟变量名拼接和后台管理系统中的属性一致才可生效,一般第一种方式用的比较多。
在这里插入图片描述

2. Nacos多环境配置共享

假设一个业务场景,一个配置在开发环境,生产环境都需要用到,那么每份配置都配置一次显然是相当麻烦的。
在这里插入图片描述
这样无论是生产还是测试相同的配置都写在userservice.yaml中,这样给我们带来了极大的便利

spring:application:name: userservice # 服务名profiles:active: dev # 环境cloud:nacos:server-addr: 127.0.0.1:8848 # nacos地址config:file-extension: yaml # 文件后缀名

这样即可以读取到userservice-dev.yaml 配置文件的内容,也可以读取到userservice.yaml配置文件中的内容,即使环境为test环境也可以读取到userservice.yaml配置文件的内容。
如果两个文件中有一个相同的属性,或者说application.yml也有一个属性相同,那么文件的加载优先级是:

userservice-dev.yaml > userservice.yaml > application.yml

五. Nacos集群搭建

官方给出的Nacos集群图:
请添加图片描述
其中包含3个nacos节点,然后一个负载均衡器代理3个Nacos。这里负载均衡器可以使用nginx。
我们计划的集群结构:
请添加图片描述

三个nacos节点的地址:

节点ipport
nacos1192.168.150.18845
nacos2192.168.150.18846
nacos3192.168.150.18847

搭建集群的基本步骤:

  • 搭建数据库,初始化数据库表结构
  • 下载nacos安装包
  • 配置nacos
  • 启动nacos集群
  • nginx反向代理

1. 搭建数据库

Nacos默认数据存储在内嵌数据库Derby中,不属于生产可用的数据库,官方推荐的最佳实践是使用带有主从的高可用数据库集群
这里我们以单点的数据库为例来讲解。
将Nacos解压后,首先启动本机mysql,创建nacos数据库,并在nacos_config数据库下执行nacos-mysql.sql脚本 (脚本存放位置nacos/cont/nacos-mysql.sql):

mysql> source /opt/nacos/cont/nacos-mysql.sql;

进入nacos的conf目录,修改配置文件cluster.conf.example,重命名为cluster.conf:
然后添加内容:

127.0.0.1:8845
127.0.0.1.8846
127.0.0.1.8847

然后修改application.properties文件,添加数据库配置:

spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=123

2. 启动

将nacos文件夹复制三份,分别命名为:nacos1、nacos2、nacos3
然后分别修改三个文件夹中的application.properties,
nacos1:

server.port=8845

nacos2:

server.port=8846

nacos3:

server.port=8847

然后我们就可以分别将他们都启动起来

3. 安装Nginx

关于Nginx的安装小编的专栏里面有对应的文章。
修改conf/nginx.conf文件,配置如下:

upstream nacos-cluster {server 127.0.0.1:8845;server 127.0.0.1:8846;server 127.0.0.1:8847;
}
server {listen       80;server_name  localhost;location /nacos {proxy_pass http://nacos-cluster;}
}

而后在浏览器访问:http://localhost/nacos即可。
代码中application.yml文件配置如下:

spring:cloud:nacos:server-addr: localhost:80 # Nacos地址

实际部署时,需要给做反向代理的nginx服务器设置一个域名,这样后续如果有服务器迁移nacos的客户端也无需更改配置,Nacos的各个节点应该部署到多个不同服务器,做好容灾和隔离。

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

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

相关文章

python常用模块

time模块 常用操作 1.直接获取时间 time.time() #获取结果是秒数&#xff0c;即从1970年1月1日8:00起计#1671856010.9592516 2.获取结构化时间 time.localtime() #获取本地时间&#xff0c;中国为东八区&#xff0c;为上海时间 time.gmtime() …

3.2 Static Terrestrial Laser Scanners 静态地基激光扫描仪

本章节介绍的静态地基激光扫描系统指的是那些在一个固定位置的位置上对周边场景地物特征进行扫描的设备。该类型设备的扫描测量机制是&#xff0c;通过激光测距仪进行斜距测量&#xff0c;与此同时通过水平和竖直两个方向上同步运动的角度编码器来记录角度变化值&#xff08;如…

C#大型医院HIS系统源码 医院信息管理系统源码 C/S架构 VS2013+sql2012

了解更多源码内容&#xff0c;可私信我。 开发环境&#xff1a;VS2013sql2012 C/S架构 一、门诊系统&#xff1a; 1、挂号与预约系统:实现了医院门诊部挂号处所需的各种功能&#xff0c;包括门诊安排的管理&#xff0c;号表的生成及维护&#xff0c;门诊预约管理和挂号处理&…

一文带你深入理解【Java基础】· 网络编程(下)

写在前面 Hello大家好&#xff0c; 我是【麟-小白】&#xff0c;一位软件工程专业的学生&#xff0c;喜好计算机知识。希望大家能够一起学习进步呀&#xff01;本人是一名在读大学生&#xff0c;专业水平有限&#xff0c;如发现错误或不足之处&#xff0c;请多多指正&#xff0…

AQS学习

1.1 AQS 简单介绍 AQS 的全称为&#xff08;AbstractQueuedSynchronizer&#xff09;&#xff0c;这个类在 java.util.concurrent.locks 包下面。 AQS 是一个用来构建锁和同步器的框架&#xff0c;使用 AQS 能简单且高效地构造出应用广泛的大量的同步器&#xff0c; 比如我们提…

五、Arduino IDE开发esp8266环境搭建

1、安装驱动程序 (1)安装USB转串口驱动程序。 (2)根据板载的USB转串口驱动芯片选择合适驱动安装。USB转串口芯片负责和电脑之间进行数据通信。 (3)常见USB转串口驱动 CP210x驱动:CP210x USB 至 UART 桥 VCP 驱动器 - 芯科科技 CH340驱动 2、Arduino IDE环境搭建 要想使用Ar…

K8S-存储-Volume

问题 容器磁盘上的文件的生命周期是短暂的&#xff0c;这就使得在容器中运行重要应用时会出现一些问题。首先&#xff0c;当容器崩溃 时&#xff0c;kubelet 会重启它&#xff0c;但是容器中的文件将丢失——容器以干净的状态&#xff08;镜像最初的状态&#xff09;重新启动。…

【kafka】学习笔记(三)

学习笔记七、Kafka-Eagle 监控7.1 环境准备7.2 Eagle 安装7.3、修改配置文件7.4、添加环境变量7.5、启动Eagle八、Kafka-Kraft 模式8.1、Kafka-Kraft 集群部署8.2、初始化集群数据目录8.3、启动 kafka 集群8.4、测试8.5、集群启动脚本九、SpringBoot集成Kafka七、Kafka-Eagle 监…

支持设备的待机唤醒功能

系统待机唤醒功能 1 说明背景 1.1 需求 支持 GPU 进入低功耗模式&#xff0c;让用户选择降低设备的功耗 1.2 概念 上位词&#xff1a;APM, ACPI 同类词&#xff1a;睡眠模式, S0~S5 下位词&#xff1a;系统挂起, 系统唤醒, 运行时设备电源管理 1&#xff09;ACPI 在计算机…

第10章_索引优化与查询优化

第10章_索引优化与查询优化 都有哪些维度可以进行数据库调优?简言之: 索引失效、没有充分利用到索引——索引建立关联查询太多JOIN (设计缺陷或不得已的需求)——SQL优化服务器调优及各个参数设置(缓冲、线程数等)———调整my.cnf。数据过多――分库分表 关于数据库调优的…

net/http 库的客户端实现(下)

前言 上一篇文章我们讲了 net/http 库客户端 request 的构建&#xff0c;接下来继续讲构建HTTP请求之后的处理操作 net/http 库的客户端实现(上) net/http 库的客户端实现(下) net/http 库的服务端实现 启动事务 构建 HTTP 请求后&#xff0c;接着需要开启HTTP事务进行请…

Python——几个常用的数学函数

1. min()函数&#xff1a;取出给定参数的最小值 说明&#xff1a;获取指定数值或者指定序列中最小值。 print(min(1, 5)) print(min(1, 2, 3, 4, 5, 6)) print(min([2, 3, 4, 5])) 2.max()函数&#xff1a;取出给定参数的最大值 说明&#xff1a;获取指定数值或者指定序列中…

XDocReport使用入门

XDocReport 简介 XDocReport是GitHub上根据麻省理工学院许可证开源的Wrod导出框架。XDocReport可以根据ODT、Doc、Docx文档模板通过模板引擎语法&#xff08;Freemarker、Velocity&#xff09;转换为另外一种格式文档&#xff08;Doc、Docx、XHTML、PDF&#xff09;。 XDocR…

前端小知识:控制台打印(console)- 模拟Java日志打印、表格形式打印美化输出对象、代码运行时间统计

文章目录6. 控制台打印&#xff08;Console&#xff09;模拟Java日志打印格式美化对象打印&#xff08;表格形式打印输出&#xff09;日志等级输出&#xff08;让其在控制台显示时有颜色提示&#xff09;代码运行时间统计打印输出6. 控制台打印&#xff08;Console&#xff09;…

用树莓派4B安装gitlab,亲测可用~

最近成功在CentOS7上安装了gitlab&#xff0c;忽然想到是不是可以把吃灰的树莓派4B也装上gitlab&#xff0c;于是研究了一下&#xff0c;做个分享。 树莓派是4B 8G版本。本身装的是官方的64位系统。之前可能还装过一些乱七八糟的东西&#xff0c;这里就不提了。 上gitlab官网…

移动 IP(计算机网络-网络层)

目录 移动性对网络应用的影响 移动IP中数据报的转发过程 移动IP中数据报的转发过程 三角路由的低效性 解决三角路由的低效性 移动IP的标准 移动性对网络应用的影响 现在先考虑这样一种情况&#xff0c;一个用户拿着无线移动设备在一个Wi-Fi服务区内走动&#xff0c;并且边…

【python圣诞树的实现】

&#x1f935;‍♂️ 个人主页老虎也淘气 个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f44d;&#x1f3fb; 收藏…

http 库的服务端实现

前言 net/http 库的客户端实现(上) net/http 库的客户端实现(下) net/http 库的服务端实现 上两篇文章介绍了 http 客户端的实现&#xff0c;这篇文章看一下服务端的实现 服务端 使用 net/http 库可以快速搭建HTTP服务&#xff0c;HTTP服务端主要包含两部分&#xff1a; …

【圣诞特辑】码一个漂漂亮亮的圣诞树(Single Dog版)

目录 前言 一、C语言版圣诞树 1.代码实现 2.效果图 二、python版圣诞树 1.代码实现 2.效果图​ 三、html5版圣诞树 1.代码实现 2.效果图 总结 前言 圣诞节即将来临&#xff0c;圣诞树也是必不可少的装饰之一。圣诞树是一棵绿叶繁茂的树&#xff0c;上面挂满了彩色的灯…

Python pandas有好几百个库函数,你都用过吗(4)

上一篇链接&#xff1a; https://blog.csdn.net/boysoft2002/article/details/128428569 S~W&#xff1a; Function46~56 Types[Function][45:] [set_eng_float_format, show_versions, test, timedelta_range, to_datetime, to_numeric, to_pickle, to_timedelta, unique,…