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与Eureka的区别

    • Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式

    • 临时实例心跳不正常会被剔除,非临时实例则不会被剔除

    • Nacos支持服务列表变更的消息推送模式,服务列表更新更及时

    • Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式

  

      

posted @ 2022-03-28 17:28  手可摘星陈1024  阅读(303)  评论(0)    收藏  举报