Nacos注册中心

不念不忘少年蓝@ 2023-09-26 11:08 136阅读 0赞

一、认识和安装Nacos

1.1、认识Nacos(那扣丝)

1.2、Nacos安装(Windows版安装)

1.2.1、下载安装包

1.2.2、解压安装包

1.2.3、端口配置

1.2.4、启动Nacos注册中心

1.2.5、访问

1.3、Nacos安装(Linux版安装)

1.3.1、安装JDK

1.3.2、上传Nacos安装包

1.3.3、解压Nacos安装包

1.3.4、端口配置

1.3.5、启动Nacos注册中心

1.4、Nacos的依赖

二、Nacos快速入门

三、Nacos服务分级存储模型

四、NacosRule负载均衡

五、Nacos服务实例的权重设置

六、Nacos和Eureka的区别

补充:如何成为非临时实例


562c61b2671c42cfa3ef76bff822dace.png

477d66be002c46adbc9d2888719c5902.png

一、认识和安装Nacos

1.1、认识Nacos(那扣丝)

也就是说Nacos是Eureka的升级版,相比着Eureka功能更加丰富。

294ac77218934c378130dbce428db161.png

1.2、Nacos安装(Windows版安装)

1.2.1、下载安装包

GitHub - alibaba/nacos: an easy-to-use dynamic service discovery, configuration and service management platform for building cloud native applications.an easy-to-use dynamic service discovery, configuration and service management platform for building cloud native applications. - GitHub - alibaba/nacos: an easy-to-use dynamic service discovery, configuration and service management platform for building cloud native applications.fluidicon.pnghttps://github.com/alibaba/nacos dc1f95dca3434a7cab2fda850a7f4e9f.png

a05035561fb6414cad43cd7763bbefa7.png

29c578b800ee417f855643dd0f162d8a.png

1.2.2、解压安装包

8a686cc85c25418197c56c15ff043bee.png

3ede5fb254e7460b8a7ff3615bc889c9.png

目录说明:

  • bin:启动脚本
  • conf:配置文件

1.2.3、端口配置

Nacos的默认端口是8848,如果你电脑上的其它进程占用了8848端口,请先尝试关闭该进程。

如果无法关闭占用8848端口的进程,也可以进入nacos的conf目录,修改配置文件中的端口:

d868c6a530134116b3476640e230acbf.png

02941727e0834cd09cc666270958eca9.png

1.2.4、启动Nacos注册中心

启动非常简单,进入bin目录,打开cmd结构如下:

b21ec97ce06f4319b8b3a31b30f177fc.png

然后执行命令即可:

  • windows命令:

startup.cmd -m standalone

执行后的效果如图:

d3e48dfc001b4be68dd5642e5d87d618.png

1.2.5、访问

在浏览器输入地址:http://127.0.0.1:8848/nacos即可:(注意:端口号可以不是8848)

aa12d1fa3981442889595cbce2672f2f.png

默认的账号和密码都是nacos,进入后:

241a33f794a64e0fbe01d37e92918e0c.png

1.3、Nacos安装(Linux版安装)

Linux或者Mac安装方式与Windows类似。

1.3.1、安装JDK

Nacos依赖于JDK运行,所以Linux上首先也需要安装JDK才行。

上传jdk安装包到Linux系统中(前面Linux笔记中有安装步骤):

2c0514d437454399b24f4cc5fb10c9e1.png

上传到Linux系统中某个目录,例如:/usr/local/ 目录下

然后解压缩:

tar -xvf jdk-8u144-linux-x64.tar.gz

然后重命名为java

配置环境变量:

  1. export JAVA_HOME=/usr/local/java
  2. export PATH=$PATH:$JAVA_HOME/bin

设置环境变量:

source /etc/profile

1.3.2、上传Nacos安装包

还是和安装windows版的Nacos一样,先去官方找安装包,找到tar.gz的版本即可:

9fe37d5dbcd04549b33525076063f3c2.png

然后将安装包保存到我们盘中之后上传到Linux服务器的某个目录,例如/usr/local/src目录下:

803c6a9d839d41789436b8ba5ea87c4d.png

1.3.3、解压Nacos安装包

命令解压缩安装包:

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

然后删除安装包:

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

目录中最终样式:

838cc84e63ba42f6bf85628617f3f549.png

目录内部:

a409c2971ef643a4a500c4b35ffa6909.png

1.3.4、端口配置

与windows版中类似

1.3.5、启动Nacos注册中心

在nacos/bin目录中,输入命令启动Nacos:

  1. sh startup.sh -m standalone

#

1.4、Nacos的依赖

父工程:

  1. <dependency>
  2. <groupId>com.alibaba.cloud</groupId>
  3. <artifactId>spring-cloud-alibaba-dependencies</artifactId>
  4. <version>2.2.5.RELEASE</version>
  5. <type>pom</type>
  6. <scope>import</scope>
  7. </dependency>

客户端:

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

#

二、Nacos快速入门

快速入门: 也就是说把每个微服务模块都注册到nacos注册中心中去。

注意: 要先保证开启上面的nacos服务端。

注意1:如果使用Nacos注册中心的话,记得看一下项目中是否配了eureka注册中心,并且也要先把nacos配置中心的坐标先给删掉(因为Nacos注册中心和eureka注册中心的意义是一样的,总不能配置两个注册中心吧)

注意2: 注册nacos的时候,必须要在yml配置文件中配置服务名字(也就是application.name配置下的内容,必须配置,要不然就注册不到nacos上)

023bef5d45d94303b775d3baf4d474b2.png

注意:这里我们刚才上面直到Nacos注册中心启动时服务器的端口号为8848,因此在服务消费者和服务提供者的yml配置文件中配置时注意端口号也要写8848相对应。

7a878a51ac1c4669bfe641ba8594bf96.png

代码演示如下所示:

1、

  1. <dependency>
  2. <groupId>com.alibaba.cloud</groupId>
  3. <artifactId>spring-cloud-alibaba-dependencies</artifactId>
  4. <version>2.2.5.RELEASE</version>
  5. <type>pom</type>
  6. <scope>import</scope>
  7. </dependency>

96f3cf92e43349c9a011783235d27e15.png

如果刷新坐标时出现下面的错误的话,可以多刷新几下maven坐标即可:

3658c947a2514a04aeafbb77562bf5d7.png

2、把服务消费者接口模块项目和服务提供者接口模块项目pom.xml文件中的以前eureka坐标删除掉,添加导入Nacos注册中心的依赖坐标

注:服务消费者和服务提供者两个项目中都要添加此坐标,并且要保证以前的eureka服务注册中心的依赖坐标删除了(因为nacos注册中心和eureka注册中心意义是一样的,但是不能搞两个注册中心吧,所以我们现在用nacos注册中心那么就要把eureka的删除掉)

a1e13170a41e4f858aa92c4a47917e26.png

3

4b5623e8b3a54fee9db89838731a455d.png

最终导完坐标并且修改好yml配置之后,启动服务消费者和服务提供者服务器,那么服务消费者和服务提供者的服务器访问地址就成功的存放到Nacos注册中心上了:

a67b1487b4fd4957899bb4cff51382c7.png

6b5f0132e65a4ca2a9d39d960d49d4f0.png

会发现nacos注册中心确实比下面的eureka注册中心清晰多了:

e9fd4cc7a1e64a069324f065ad51b6ab.png

最终我们把服务消费者和服务提供者的服务器访问地址注册存放到nacos注册中心后,就可以注册发现了:

也就是说我们现在nacos服务注册中心中已经存放了服务提供者的服务器访问地址了,那么我们服务消费者就可以在这个nacos服务注册中心中拉取这些存放的服务提供者的服务器访问地址了,拉取到后我们服务消费者就可以通过负载均衡轮循服务提供者的访问地址(多个)然后调用其服务提供者的开放接口了,最终就能拿到该服务提供者模块(如支付模块)的功能了,(这样也解决了硬编码问题),这就叫做服务发现。

cbb155eb6f8c464c8ffa5efd8f5c60c6.png

补充:谷粒项目的注册方式

坐标的话还是一样的,一个放在父工程pom坐标中,一个放在子工程中,唯一不同的区别就是yml的写法稍微变了一点,并且在启动类当中加了一个注解:

ddc3899d69b3453c909892a9fd3b9709.png

df1e7d64c6004395be270f5e082251b2.png

启动服务后会发现注册成功:

1eae667b0d8e4f06830a3282021c5539.png

三、Nacos服务分级存储模型

注:要知道服务对应的是谁、实例对应的是谁、集群对应的是谁。

没有Nacos分级储存时的缺点:

eee0e772f18d4e498e7700e31330eb5b.png

Nacos分级储存后:48295ae7314f4d6f90e0c25e00f09d9d.png

代码演示Nacos服务分级储存:

8f31dafc339048d5903e061ecee4f9e4.png

演示如下所示:

c72ffde3e5b14af8bf31704a839da842.png

24b3fae1efba419e9d5546f624b6130e.png

e5f58fd01c2844cca106315f3b226787.png

7fe0a424a74e46009027ba5b715c32a6.png

四、NacosRule负载均衡

也就是说上面我们知道了用户功能模块服务(也就是服务提供者)的几个服务器访问地址已经分别放入到了ZZ机房和SH机房当中了,那么如果现在有一个服务消费者想要调用获取这个用户功能模块服务(服务提供者)的数据资源,那么这个服务消费者到底访问调用这个服务提供者的ZZ机房服务器访问地址呢还是访问SH机房中的服务器访问地址呢:

演示如下所示:

首先我们也先把服务消费者的服务器访问地址也先放到ZZ机房当中去:

91e8b4b4487c4801a24b6e28568c2b65.png

feb96c4fb8844d34b53677f203e53ccc.png

c9a747d9257c434ba6210f82575ed898.png

那么我们想,服务消费者的服务器访问地址也在ZZ机房当中,服务提供者的ZZ机房中也有两个服务器访问地址,那么如果这个服务消费者调用请求这个服务提供者的数据资源的时候,是不是就直接调用访问的是服务提供者ZZ机房(集群)当中的服务器访问地址呢(毕竟都在一个机房当中):

be3846097f0f40f4b79883d3e9f6909c.png

会发现并不会因为服务消费者和服务提供者的服务器访问地址(实例)都在ZZ机房,服务消费者就只访问服务提供者所在ZZ机房的服务器访问地址(实例),会发现这个服务消费者也访问了这个服务提供者不在ZZ机房的服务器访问地址(实例)【也就是说也访问了服务提供者在SH的实例】,那么就有点不太好了,毕竟服务提供者在SH机房的实例和服务消费者在ZZ机房的实例太远了,那么再访问SH机房的实例的话就太浪费时间了,那么我们能不能就只让服务消费者的实例在ZZ机房时只访问服务提供者的实例也是只在ZZ机房的实例(服务器)呢,这样的话都在同一个机房内进行访问调用那么就不会在耗费时间了:

c65014ad9ec84e2fa5d1b15e84f1439b.png

1d537c84b1f046249211fe5a365f075f.png

解决当服务消费者的实例(也就是服务器访问地址)在ZZ机房时,先只让这个服务消费者调用访问服务提供者也在ZZ机房中的实例(也就是服务器访问地址):

做法:只需要在服务消费者的配置文件中加上下面的负载均衡规则配置即可。

1bc134529461467bbdd9fcad8437765c.png

b7222910309042cb812af9cb677a5b09.png

配置好之后:服务消费者再进行访问测试:

efa2b3538e9547f3a9b779e60df41de4.png

就会发现就不会再访问调用服务提供者SH机房中的实例了(服务器访问地址了):

56eb3d37c66f4968a0af49aec6140ef9.png

会发现因为服务消费者的实例(服务器访问地址)在ZZ机房,配置好属性之后那么当访问调用的服务提供者的时候,就只调用访问服务提供者对应在ZZ机房中的几个实例了:

e5a413e8b4134b2a980ef5a643065f1f.png

16bf62623a2d466dad58790a2be99048.png

注意:上面访问服务提供者ZZ机房(集群)的实例(服务器)的时候,是**通过随机分配的形式进行访问的,不是轮循**。

五、Nacos服务实例的权重设置

注: 如果权重调为0的话,那么该服务器就不会再被访问到了(当我们维护系统的时候就可以调为0,也就是说不停机维护)

也就是说我们上面知道,当服务消费者访问服务提供者ZZ集群中的实例(服务器)的时候,是通过随机的方式进行请求访问实例的:

c94a7ca7dd4f431f9373171429b84096.png

怎么修改权重呢:比如说现在上面两个服务器当中,有一个服务器老化了不能被访问请求很多次,那么我们怎么降低那个服务器被访问的权重呢:

5acb2c0e766e4d5d97e37fc89a300efc.png

bd7fb21588e8471d86e9e3a3a45f34e4.png

60e33f3e6570496fa1ffdefaeb73e497.png

访问测试:

3f20d3ef56ee4d43b058f727c1c9c485.png

736534abee9b44b295a84d7a10befc70.png

六、Nacos和Eureka的区别

bf2e0706e5084843aa094c295f37554b.png

1、Nacos与eureka的共同点分析:

也就是说这些是相同的,注意服务器访问地址可以叫做实例。

d69dff78923c4f179743b1719baf57f9.png

2、Nacos与eureka的不同点分析:

首先要先知道什么是临时实例和非临时实例(下面的服务器就是临时的):

0c7c25ae0d014dddbce2e15097c9f6da.png

7cce91b00a4a409492df9903446a72ed.png

补充:如何成为非临时实例

f2a47883f65f438b9e3fba1a0d0e5ebe.png

发表评论

表情:
评论列表 (有 0 条评论,136人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Nacos 注册中心

    现如今市面上注册中心的轮子很多,我实际使用过的就有三款:Eureka、Gsched、Nacos,由于当前参与 Nacos 集群的维护和开发工作,期间也参与了 Nacos 社区的