nacos注册中心
一、nacos安装 (alibaba出品,现在是springcloud中的一个组件)
1、在nacos的github页面。提供下载链接
github主页:https://github.com/alibaba/nacos
github的Release下载页:https://github.com/alibaba/nacos/releases
有windows和linux版本的,按需要下载
2、解压(解压到非中文目录下,最好不要有空格等特殊字符)
3、nacos默认使用8848端口,可以自行到conf下的application.properties配置文件中进行修改
4、到bin目录下启动 startup.cmd -m standalone (单例启动,还有集群启动),也可配置一下环境变量启动更加方便
5、启动完成之后,访问命令行页面提示的地址即可(账号和密码默认都是nacos)
1)linux系统下的安装
1、nacos依赖JDK运行,安装nacos前先保证有JDK环境
上传jdk的安装包(.tar.gz后缀的)到某个目录(例如 /user/local/)
解压缩 tar -xvf jdk-8u144-linux-x64.tar.gz
重命名为java
配置环境变量
export JAVA_HOME=/user/local/java
export PATH=$PATH:$JAVA_HOME/bin
设置环境变量 source /etc/profil
2、安装nacos
上传nacos安装包(.tar.gz后缀的)到某个目录(例如 /user/local/)
解压 tar -xvf nacos-server-1.4.1.tar.gz
删除安装包 rm -rf nacos-server-1.4.1.tar.gz
可以先择配置一下环境变量,也可以不配置
配置端口,和windows中一样,进入conf下的application.properties文件中,编辑端口的配置
启动:没配置环境变量的话需要在bin目录下输入命令 sh startup.sh -m standalone
二、nacos的依赖包(两个)
<!-- 父工程中需要的依赖 -->
<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>
<!-- nacos客户端依赖包 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
三、将服务注册到nacos中
1、在各微服务工程的父工程中的pom文件中的<dependencyManagement></dependencyManagement>引入依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.6.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
2、在各个微服务的pom文件中引入nacos-discovery依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
3、配置nacos地址后,重启服务
spring:
cloud:
nacos:
server-addr: 127.0.0.0:8848
4、到nacos面板中可以看到服务注册的信息
四、服务分级存储模型
1、一个服务可以有多个实例,这些实例通常分布在不同的机房:
127.0.0.1:8080 ------ 上海机房
127.0.0.1:8081 ------ 武汉机房
127.0.0.1:8082 ------ 深圳机房
2、nacos将同一机房内的实例划分为一个集群。也就是说,一个服务(比如用户服务),可以包含多个集群(如上海集群、深圳集群、武汉集群),每个集群中有多个实例,形成分级模型:
3、微服务之间在相互调用时,应该尽可能的访问同集群下的实例,因为本地访问速度快。只有在本集群内的服务不可用时才会去访问其他集群。
给服务添加所属集群的配置:
spring:
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: HZ #集群名称(自定义的)
4、重启服务后可以在nacos面板中看到服务所在集群就是自己所配置的
5、同集群优先的负载均衡
ribbon默认的ZoneAvoidanceRule并不能根据同集群优先来实现负载均衡,nacos中提供了一个nacosRule的实现,可以优先从同集群中挑选实例
在服务消费者的配置文件中编写配置:
userservice:
ribbon:
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule #负载均衡规则
五、权重配置
实际部署中可能存在以下场景:服务器性能有差异,但是NacosRule的负载均衡规则只会随机挑选服务进行访问,但是我们希望性能好的机器多接受用户请求,性能差的机器少接受请求,这时我们就可以进行权重的配置实现,权重越大,访问的频率就越高,配置方式如下:
进入nacos面板中,选择实例进行编辑
注意:如果权重配置为0,则该实例将永远不会被访问,可以应用在服务更新的时候,这样整体服务无需中断,可以优雅的更新服务
六、环境隔离
1、nacos提供了namespace来实现环境隔离的功能:(鸡蛋的模型)
· nacos中可以有多个namespace
· namespace(鸡蛋壳)下可以有group(蛋白)、service(蛋黄)等
· 不同的namespace之间相互隔离、例如不同的namespace的服务互相不可见
· 默认情况下,所有的service、data、group都在同一个namespace,名为public
2、我们可以在nacos面板中点击新建命名空间来创建一个namespace
3、给微服务配置namespace(通过修改application.yml配置文件来修改)
spring:
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: HZ
namespace: 492a7d5d-237b-46a1-a99a-fa8e98e4b0f9 #指定命名空间,填命名空间ID
4、重启服务可以发现配置的命名空间出现了,配置在命名空间里的服务也出现在了相应的命名空间里,此时如果访问别的命名空间里的服务会报错
七、nacos与eureka的区别
1、nacos的服务实例分为两种类型:
临时实例:如果实例宕机超过一定时间,nacos会从服务列表中将服务剔除,这也是实例默认的类型
非临时实例:如果实例宕机,不会从服务列表中剔除,会一直等待它重新启动,也叫做永久实例
spring:
cloud:
nacos:
discovery:
ephemeral: false #设置为非临时变量,默认是true
2、nacos与eureka整体结构类似,服务注册、服务拉取、心跳等待,但也存在一些差异
-
-
都支持服务注册和服务拉取
-
都支持服务提供者心跳方式做健康检测
-
-
Nacos与Eureka的区别
-
Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式
-
临时实例心跳不正常会被剔除,非临时实例则不会被剔除
-
Nacos支持服务列表变更的消息推送模式,服务列表更新更及时
-
-