当前位置: 首页>后端>正文

nacos使用详解

nacos详解

  1. 概念:动态服务发现,配置管理和服务管理平台,即注册中心+配置中心的结合

    官网文档:https://nacos.io/zh-cn/index.html
    github文档:https://spring-cloud-alibaba-group.github.io/github-pages/greenwich/spring-cloud-alibaba.html#_spring_cloud_alibaba_nacos_discovery

  2. 安装运行

    • 下载nacos https://github.com/alibaba/nacos/releases
    • windows启动 startup.cmd -m standalone
    • 默认密码都是nacos
  3. 实际应用

    • 导入pom文件

      主模块pom

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

      应用模块pom

      <dependency>
          <groupId>com.alibaba.cloud</groupId>
          <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
      </dependency>
      
    • 配置服务提供者/服务调用者yml文件

      spring:
        application:
          name: nacos-order-consumer
        cloud:
          nacos:
            discovery:
              server-addr: localhost:8848 # 指定nacos地址
              cluster-name: HZ # 集群名称,配置实例集群属性
              ephemeral: false # 设置为非临时实例 非临时实例nacos主动问询服务是否可用,服务不可用也不会被剔除
      
    • 启动类

      //添加注解
      @EnableDiscoveryClient
      
    • 服务消费者端添加调用负载均衡(注意2021版本后nacos放弃默认集成Ribbon)

      @Configuration
      public class ApplicationContextConfig
      {
          @Bean
          @LoadBalanced
          public RestTemplate getRestTemplate()
          {
              return new RestTemplate();
          }
      }
      
  4. nacos和cap

    • C是所有节点在同一时间看到的数据是一致的;而A的定义是所有的请求都会收到响应。
  5. nacos和eureka比较

    nacos使用详解,第1张
    img.png
  6. nacos服务分级存储模型

    服务-->集群-->实例

    nacos使用详解,第2张
  • 服务跨集群调用问题:服务调用尽可能选择本地集群服务,跨集群调用延迟较高,本地集群不可用情况下才去考虑其他集群

当服务提供者实例和服务调用者实例配置到同一个集群中,可以通过调用负载均衡规则优先选择本地集群(本地集群实例随机访问),如果调用的本地集群全部不可访问,会访问外部集群,并产生一个访问外部集群的警告

更改负载均衡规则(通过配置文件方式)

springcloud-nacos-provider: # nacos中的服务id
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule #设置负载均衡策略 优先选择本地集群
  • 服务实例权重设置:

    nacos控制台可以设置实例的权重值,0~1之间,同一集群的多个实例权重值越高被访问频率越高,权重设置为0则完全不会被访问

    设置为0的时候不会被调用访问,可以在系统升级的时候,把一个实例设置为0,这样用户就不会访问,调用者逐渐停止访问后可以重启升级,待升级完成后,先设置较小权重,放进少部分用户查看升级效果,后逐渐提高权重到正常,实现平滑用户无感知升级。

    nacos使用详解,第3张
  1. nacos作为服务配置中心应用

    • 目的:统一服务配置文件,做热更新

    • pom文件引入

      <!--nacos-config-->
      <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
      </dependency>
      
    • Nacos在项目初始化的时候,要保证先从配置中心进行配置拉取,springboot配置文件加载存在优先级,bootstrap优先级高于application,所以nacos信息配置在bootstrap.yml配置文件中

    • yml配置

      # nacos配置
      server:
        port: 3377
      
      spring:
        application:
          name: nacos-config-client
        cloud:
          nacos:
            discovery:
              server-addr: localhost:8848 #Nacos服务注册中心地址
            config:
              server-addr: localhost:8848 #Nacos作为配置中心地址
              file-extension: yaml #指定yaml格式的配置
              group: DEV_GROUP
              namespace: 7d8f0f5a-6a53-4785-9686-dd460158e5d4 # 不同命名空间服务访问不到,用来做环境隔离
      
      
      # ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
      # nacos-config-client-dev.yaml
      
    • nacos匹配公式nacos使用详解,{spring.application.name}-,第4张{spring.profile.active}.${spring.cloud.nacos.config.file-extension}

    • 配置中心分类配置

      • 需要解决的问题:在实际项目中通常一个设备会有dev开发环境,test测试环境,prod生产环境如何保证指定环境启动时服务能正确读取到nacos上相应的环境配置文件?

        而在上面各种环境中,一个微服务项目又会有许多微服务子项目,如何保证不同的微服务子系统在不同的环境下进行配置管理

      • 通过NameSpace+Group+DataId来区分

        最外层的NameSpace可以用来区分部署环境,Grop和DataID逻辑上区分两个目标对象

        默认情况下Namespace=public,Group=DEFAULT_GROUP, 默认Cluster是DEFAULT

        NameSpace:用来隔离开发、测试、生产等环境,默认是public

        Group:默认是DEFAULT_GROUP,Group可以把不同的微服务划分到同一个分组里面去

        Service:就是微服务;一个Service可以包含多个Cluster(集群),Nacos默认Cluster是DEFAULT,Cluster是对指定微服务的一个虚拟划分。

      nacos使用详解,第5张
      • 三种方案加载配置

        • DataId方案:利用spring.profile.active和配置文件的DataId来使不同环境下读取不同配置

          spring:
            profiles:
              active: dev # 表示开发环境
              #active: test # 表示测试环境
              #active: info
          
        • Group方案:通过Group实现环境区分

          nacos使用详解,第6张
        • NameSpace方案:通过新建不同的NameSpace根据命名空间id来区分

    • 多环境配置共享

      • 多环境配置读取
      nacos使用详解,第7张
      • 多环境配置如果共同配置了同一属性,则远端单一环境优先级大于多环境配置共享大于本地环境配置文件
        优先级排序:[服务名称]-[环境].yaml>服务名称.yaml>本地配置


        nacos使用详解,第8张
      • 自动刷新

      在业务类中使用@RefreshScope //支持Nacos的动态刷新功能,并根据@Value直接获取

      修改nacos中的yaml配置文件再次调用使用到配置文件的接口的时候发现已经刷新

      第二种方式 @ConfigurationProperties

      @Data
      @Component
      @ConfigurationProperties(prefix = "pattern")
      //通过prefix + 常量方式将配置文件中的值注入到常量中,当nacos配置更改的时候自动刷新
      public class PatternProperties {
          private String dataformat;
      }
      
      //通过@Component方式加入容器,用的时候通过@Autowired注入
      
    • nacos会记录历史配置文件30天,此外还有一键回滚功能,回滚操作时触发配置刷新

  2. Nacos集群和持久化配置

    • 官网说明文档:https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html

    • 架构图(非官网,官网架构图和三种集群方式可以去官网查看)

      nacos使用详解,第9张
    • 默认Nacos使用嵌入式数据库实现数据的存储。所以,如果启动多个默认配置下的Nacos节点,数据存储是存在一致性问题的,为了解决这个问题,Nacos采用了 集中式存储的方式来支持集群化部署。

    • Nacos默认的数据库切换到mysql(默认数据库是嵌入式数据库derby)

      • 官网中找到sql执行语句:https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html

        或者 https://github.com/alibaba/nacos/blob/master/distribution/conf/mysql-schema.sql

      • 在conf文件夹下找到application.properties 地址 https://github.com/alibaba/nacos/blob/master/distribution/conf/application.properties

        spring.datasource.platform=mysql
          
        db.num=1 
        db.url.0=jdbc:mysql:// 127.0.0.1:3306/nacos_configcharacterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true 
        db.user=root 
        db.password=123456
        
  3. Linux中Nacos+Mysql生产环境部署

    1.环境:一个nginx+三个nacos注册中心+mysql

    1. 下载:https://github.com/alibaba/nacos/releases/

    2. sql脚本在conf文件夹下nacos-mysql.sql在数据库中执行

    3. 修改conf下的application.properties文件,编写数据库连接信息

    4. 通过hostname -i 确定nacos所在环境ip

    5. 根据conf下的cluster.conf.example 拷贝出 cluster.conf ,编辑cluster.conf 注掉或者删掉原有的ip,编写nacos服务所在的ip和端口

    nacos使用详解,第10张
    1. 编辑bin目录下startup.sh使其接受不同启动端口(./startup.sh -p 3333 启动3333nacos服务端口)修改startup.sh文件(所有文件修改前一定要做基础备份)
    nacos使用详解,第11张
    1. 启动三个:./startup.sh -p 3333 ./startup.sh -p 4444 ./startup.sh -p 5555

    2. 修改nginx配置文件

    nacos使用详解,第12张
    1. 指定nginx配置文件启动

https://www.xamrdz.com/backend/3js1994666.html

相关文章: