• nacos


    介绍

    Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件。相比Eureka功能更加丰富,在国内受欢迎程度较高。
    nacos 使用教程:点击链接访问

    安装

    1. 解压nacos安装包 nacos-server-1.4.1.zip

      unzip nacos-server-$version.zip 或者 tar -xvf nacos-server-$version.tar.gz
      
      • 1
    2. 配置mysql步骤:

      • 新建数据库nacos_config, 执行sql脚本生成表单
      • 在application.properties下配置mysql相关属性
        spring.datasource.platform=mysql
         
        db.num=1
        db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&serverTimezone=UTC&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
        db.user=mysql用户名
        db.password=mysql密码
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
    3. 进入bin目录,执行启动命令

      #进入bin目录
      cd bin
      #Windows启动 单机模式运行
      startup.cmd -m standalone
      #Linux启动 单机模式运行
      sh startup.sh -m standalone
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
    4. 浏览器查看:http://127.0.0.1:8848/nacos

    导包

    maven

       
       <dependency>
            <groupId>com.alibaba.cloudgroupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
        dependency>
    
        
        <dependency>
            <groupId>com.alibaba.cloudgroupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
        dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    gradle

     implementation 'com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-config'
     implementation 'com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery'
    
    • 1
    • 2

    配置文件

    spring:
      cloud:
        nacos:
          discovery:
            server-addr: 121.36.90.180:8848
            namespace: dev
            group: dev
          config:
            server-addr: ${spring.cloud.nacos.discovery.server-addr}
            file-extension: yaml
            prefix: order_server
            namespace: dev
            group: dev
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    代码中获取nacos属性

    Nacos中的配置文件变更后,微服务无需重启就可以感知。不过需要通过下面两种配置实现:

    • 方式一:在@Value注入的变量所在类上添加注解@RefreshScope
      @Slf4j
      @Component
      @RefreshScope
      public class MyCommandLineRunner implements CommandLineRunner {
      
          /**
           * 微信商户号
           */
          @Value("${wechat.mchId}")
          private String wechatMchId;
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
    • 方式二:使用@ConfigurationProperties注解
      @Data
      @Component
      @ConfigurationProperties(prefix = "domain")
      public class DomainResource {
          /**
           * 微信商户号
           */
          private String wechatMchId;
          
          /**
           * 文案内容
           */
          private BidiMap<Long, String> contents = new DualHashBidiMap<>();
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14

    Nacos集群搭建

    集群部署架构图:
    在这里插入图片描述

    linux系统中

    1. mkdir nacos
    2. wget https://github.com/alibaba/nacos/release/download/1.4.1/nacos-server-1.4.1.tar.gz
    3. 创建多个nacos server
      重复三遍,部署3个nacos服务
      tar -zxvf nacos-server-1.4.1.tar.gz
      mv nacos nacos8849
    4. 单机搭建伪集群,赋值nacos安装包,修改为nacos8849,nacos8850,nacos8851
    5. 以nacos8849为例,进入nacos8849目录
      修改conf\application.properties的配置,使用外置数据源
    spring.datasource.platform=mysql
    
    ### Count of DB:
    db.num=1
    
    ### Connect URL of DB:
    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=123456
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    1. 将conf\cluster.conf.example 改为cluster.conf,添加节点信息
    #it is ip
    #example
    192.168.16.101:8849
    192.168.16.101:8850
    192.168.16.101:8851
    
    • 1
    • 2
    • 3
    • 4
    • 5
    1. 创建mysql数据库,sql文件位置: conf\nacos-mysql.sql
    2. 如果出现内存不足:修改启动脚本(bin\startup.sh)的jvm参数
    JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
    
    • 1
    1. nacos8850 ,nacos8851 按同样的方式配置
    cp ./nacos8849/conf/application.properties ./nacos8850/conf/application.properties
    cp ./nacos8849/conf/application.properties ./nacos8851/conf/application.properties
    
    cp ./nacos8849/conf/cluster.conf ./nacos8850/conf/cluster.conf
    cp ./nacos8849/conf/cluster.conf ./nacos8851/conf/cluster.conf
    
    cp ./nacos8849/bin/startup.sh./nacos8850/bin/startup.sh
    cp ./nacos8849/bin/startup.sh./nacos8851/bin/startup.sh
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    1. 启动nacos服务
    sh ./nacos8849/bin/startup.sh
    sh ./nacos8850/bin/startup.sh
    sh ./nacos8851/bin/startup.sh
    
    # 查看日志输出
    tail -f ../logs/start.out
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    常用的负载均衡软件Nginx

    1. 下载nginx
    # 1.添加官方源仓库
    yum install -y yum-utils
    yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo
    
    # 2.安装openresty
    yum install -y openresty
    
    cd /usr/local/openresty/
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    1. 官方推荐,nginx 反向代理
      192.168.16.101:8847/nacos/

    配置nginx

    vim conf/nginx.conf
    
    • 1
    	upstream nacoscluster{
    		server 192.168.90.95:8848; 
    	    server 192.168.90.109:8848; 
    	    server 192.168.90.115:8848; 
    	}
    	server{
    		listen		8847;
    		server_name	localhost;
    		
    		location /nacos/{
    			proxy_pass http://nacoscluster/nacos/;
    		}
    	}
    	
    stream {
        upstream nacosGrpc {
         # 这里配置的是偏移之后的端口
         server 192.168.90.95:9848; 
    	 server 192.168.90.109:9848; 
    	 server 192.168.90.115:9848; 
        }
        server {
            # nginx监听偏移1000的端口,因为nacos客户端会链接 8847+1000 这个端口,代理的是nacos服务端偏移后的端口
            listen 9847; 
            proxy_pass nacosGrpc;
        }
    } 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    注意:
    Nacos2.0增加了98489849端口来进行GRPC通信,这两个端口在Nacos2.0内部是通过8848+1000以及8848+1001这种偏移量方式计算出来的,不需要用户额外在配置文件中配置。但需要开发这2个端口

    启动nginx

    cd sbin/
    ./nginx
    
    • 1
    • 2

    其它

    在这里插入图片描述
    Nacos与Eureka自我保护机制对比:

    相同点:保护阈值都是个比例,0-1 范围,表示健康的 instance 占全部instance 的比例。

    不同点:

    1. 保护方式不同
      Eureka保护方式:当在短时间内,统计续约失败的比例,如果达到一定阈值,则会触发自我保护的机制,在该机制下,Eureka Server不会剔除任何的微服务,等到正常后,再退出自我保护机制。自我保护开关(eureka.server.enable-self-preservation: false)
      Nacos保护方式:当域名健康实例 (Instance) 占总服务实例(Instance) 的比例小于阈值时,无论实例 (Instance) 是否健康,都会将这个实例 (Instance) 返回给客户端。这样做虽然损失了一部分流量,但是保证了集群的剩余健康实例 (Instance) 能正常工作。
    2. 范围不同
      Nacos 的阈值是针对某个具体 Service 的,而不是针对所有服务的。但 Eureka的自我保护阈值是针对所有服务的。

    主流的注册中心

  • 相关阅读:
    引领数据领域AI工程化落地,为什么会是云测数据?
    Burpsuite安装教程,附Link
    C# Microsoft.Office.Interop.Word设置Word页脚之添加当前页数
    二叉搜索树的本质
    uni-app学习记录
    Frontiers | 北林邬荣领/何晓青-网络作图揭示拟南芥与叶际微生物组互作机制
    【SpringBoot框架篇】28.使用JdbcTemplate操作数据库
    破圈的《张朝阳的物理课》,开启“知识突围”的搜狐视频
    发送注册连接到 FreeSWITCH 服务器的客户端
    2024/4/22(分布式服务事务,CAP,BASE理论,Seata,微服务集成Seata,XA,AT,TCC.Saga,TC高可用,异地容灾)
  • 原文地址:https://blog.csdn.net/AliEnCheng/article/details/126485538