• SpringCloudAlibaba之Nacos


    Nacos简介

    Nacos(Dynamic Naming and Configuration Service)一个更易于构建云原生应用的动态服务发现,配置管理和服务管理平台。

    替代Eureka做服务注册中心
    替代Config做服务配置中心

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

    官方文档

    1. https://nacos.io/zh-cn/index.html
    2. https://spring-cloud-alibaba-group.github.io/github-pages/greenwich/spring-cloud-alibaba.html#_spring_cloud_alibaba_nacos_discovery

    Nacos支持三种部署模式

    1. 单机模式 - 用于测试和单机试用。
    2. 集群模式 - 用于生产环境,确保高可用。
    3. 多集群模式 - 用于多数据中心场景。

    注册中心对比

    Nacos Eureka Consul CoreDNS Zookeeper
    一致性协议 CP+AP AP CP CP
    健康检查 TCP/HTTP/MYSQL/Client Beat Client Beat TCP/HTTP/gRPC/Cmd Keep Alive
    负载均衡策略 权重/metadata/Selector Ribbon Fabio RoundRobin
    雪崩保护
    自动注销实例 支持 支持 不支持 不支持 支持
    访问协议 HTTP/DNS HTTP HTTP/DNS DNS TCP
    监听支持 支持 支持 支持 不支持 支持
    多数据中心 支持 支持 支持 不支持 不支持
    跨注册中心同步 支持 不支持 支持 不支持 不支持
    SpringCloud集成 支持 支持 支持 不支持 不支持
    Dubbo集成 支持 不支持 不支持 不支持 支持
    K8S集成 支持 不支持 支持 支持 不支持

    Nacos服务端

    nacos下载

    地址:https://github.com/alibaba/nacos/releases

    nacos单机

    1、环境准备

    Nacos 依赖 Java 环境来运行。如果您是从代码开始构建并运行Nacos,还需要为此配置 Maven环境,请确保是在以下版本环境中安装使用:

    • 64 bit JDK 1.8+
    • Maven 3.2.x+

    2、下载源码或者安装包

    # 下载稳定版
    wget https://github.com/alibaba/nacos/releases/download/1.3.0/nacos-server-1.3.0.tar.gz
    

    3、解压到指定目录

    tar -xvf nacos-server-1.3.0.tar -C /root/deploy/
    

    4、启动服务器

    cd /root/deploy/nacos/bin
    # 启动命令(standalone代表着单机模式运行,非集群模式)
    sh startup.sh -m standalone
    

    注意防火墙开放8848端口

    # 查看已经开放的端口
    firewall-cmd --list-ports
    # 开启端口
    firewall-cmd --zone=public --add-port=8848/tcp --permanent
    # 重启防火墙
    firewall-cmd --reload
    

    运行成功后直接访问http://localhost:8848/nacos
    账号:nacos
    密码:nacos

    5、关闭服务器

    cd /root/deploy/nacos/bin
    sh shutdown.sh
    

    6、持久化配置

    在0.7版本之前,在单机模式时nacos使用嵌入式数据库实现数据的存储,不方便观察数据存储的基本情况。0.7版本增加了支持mysql数据源能力。

    1、创建数据库

    创建数据库:nacos_config
    字符集: utf-8
    排序规则: utf8_general_ci

    2、初始化数据库

    在nacos/conf目录下有个nacos-mysql.sql文件,将sql导入mysql中

    3、修改配置文件

    修改nacos/conf/application.properties配置文件,添加数据源mysql数据源配置(目前只支持mysql),
    添加mysql数据源的url、用户名和密码。

    spring.datasource.platform=mysql
    db.num=1
    db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
    db.user=nacos
    db.password=nacos
    

    4、配置mysql8.0数据库

    1、在nacos目录下新建目录plugins/mysql
    mkdir -p plugins/mysql
    2、放入mysql8.0的驱动包,启动nacos
    alert nacos1

    Nacos集群

    默认Nacos使用嵌入式数据库derby实现数据存储,如果启动多个默认配置下的Nacos节点,数据存储存在一致性问题。为了解决这个问题,nacos采用集中式存储的方式支持集群化部署,目前只支持Mysql存储。

    官方文档:https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html

    官方架构图

    1. 预备环境准备

    1. 64 bit OS Linux/Unix/Mac,推荐使用Linux系统。
    2. 64 bit JDK 1.8+。
    3. Maven 3.2.x+。
    4. 3个或3个以上Nacos节点才能构成集群。

    2. 下载源码或者安装包

    # 下载稳定版
    wget https://github.com/alibaba/nacos/releases/download/1.3.0/nacos-server-1.3.0.tar.gz
    tar -xvf nacos-server-1.3.0.tar.gz
    cd nacos/bin
    

    3. 配置集群配置文件

    在nacos的解压目录nacos/的conf目录下,有配置文件cluster.conf,请每行配置成ip:port。(请配置3个或3个以上节点)

    # ip:port
    200.8.9.16:8848
    200.8.9.17:8848
    200.8.9.18:8848
    

    4. 确定数据源

    1. 初始化 MySQL 数据库

    在nacos/conf目录下有个nacos-mysql.sql文件,将sql导入mysql中

    1. 修改配置

    修改nacos/conf/application.properties配置文件,添加数据源mysql数据源配置(目前只支持mysql),
    添加mysql数据源的url、用户名和密码。

    spring.datasource.platform=mysql
    db.num=1
    db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
    db.user=nacos
    db.password=nacos
    
    1. 配置Nginx:
    http {
    
       upstream cluster {
           server 200.8.9.16:8848;
           server 200.8.9.17:8848;
           server 200.8.9.18:8848;
       }
    
       
    
       server {
           listen 80;
           location / {
               proxy_pass http://cluster;
           }
       }
    }
    
    1. 启动Nacos:
    sh startup.sh
    
    1. 启动nginx

    2. 测试

    访问192.168.159.121:1111
    如果可以进入nacos的web界面,就证明安装成功了

    Nacos客户端

    Nacos作为注册中心

    1. pom中添加依赖
    <!-- spring cloud Alibaba 注册中心 -->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    
    1. yaml中添加配置
    spring:
      cloud:
          nacos:
              discovery:
                  #nacos服务中心地址
                  server-addr: 192.168.0.103:8848
    
    1. 添加注解
      在启动类上添加@EnableDiscoveryClient注解,注册到Nacos中心。
      alert "nacos客户端注解"

    在springcloud E版本的时候,对服务注册进行了优化,在依赖了spring-cloud-starter-alibaba-nacos-discovery之后,不用添加@EnableDiscoveryClient注解,默认会将服务注册到注册中心。

    1. 查看服务

    启动应用,打开nacos控制台,我们可以在服务列表中发现我们的服务。
    alert "nacos服务列表"

    1. 服务的端点检查
      spring-cloud-starter-alibaba-nacos-discovery 在实现的时候提供了一个 EndPoint, EndPoint 的访问地址为 http://ip:port/actuator/nacos-discovery。 EndPoint 的信息主要提供了两类:
    1、subscribe: 显示了当前有哪些服务订阅者
    2、NacosDiscoveryProperties: 显示了当前服务实例关于 Nacos 的基础配置
    

    通过浏览器访问 http://localhost:8080/actuator/nacos-discovery 结果如下:
    alert '服务的端点检查'

    Nacos作为配置中心

    Nacos同springcloud-config一样,在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置之后才能保证项目的正常启动。

    服务端配置

    客户端读取按照命名规则的配置文件。

    1. Data Id的配置规则
    ${prefix}.${file-extension}
    ${prefix}-${spring.profiles.active}.${file-extension}
    
    

    prefix 默认当前服务的服务名称
    spring.profiles.active 环境配置
    file-extension 就是当前文件的格式(后缀),目前只支持yaml和properties

    1. nacos配置和springboot配置对应关系

    1. NameSpace、Group、Data Id三者关系

    类似包、类、方法之间的关系

    Nacos默认命名空间是public,Namespace主要用来实现隔离

    Group默认是DEFAULT_GROUP,Group可以将不同的配置进行分组。

    Service就是微服务,一个service可以包含多个Cluster(集群),nacos默认Cluster是DEFAULT,cluster是对指定的微服务的一个虚拟划分。比方说为了容灾,将服务分别部署在广州机房和成都机房。这时广州机房所有的服务是一个集群,成都机房所有的服务是一个集群。

    客户端配置

    Spring Boot 配置文件的加载顺序,依次为 bootstrap.properties -> bootstrap.yml -> application.properties -> application.yml ,其中 bootstrap.properties 配置为最高优先级。

    1. pom中添加依赖
    <!-- spring cloud Alibaba 配置中心 -->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>
    
    1. yml中添加配置
      将配置文件的名字改为bootstrap.yml,指定配置中心的地址
    spring:
      cloud:
          nacos:
              config:
                  #nacos配置中心地址
                  server-addr: 192.168.0.103:8848
                  #指定配置文件的格式为yaml
                  file-extension: yaml
                  #指定命名空间
                  namespace: fbf8c164-4646-454a-b58b-3131b939fbcc
                  #指定分组
                  group: DEV_GROUP
      profiles:
        active: dev            
    
    1. 配置的动态更新
      默认开启了动态更新,配置
      spring.cloud.nacos.config.enabled = false来关闭动态刷新。

    测试:

    @RestController
    public class TestController {
    	@Autowired
    	private ConfigurableApplicationContext applicationContext;
    
    	/**
    	 * 配置的动态更新测试
    	 * @return
    	 */
    	@GetMapping(value = "/test")
    	public String test() {
    		return "port:" +applicationContext.getEnvironment().getProperty("server.port");
    	}
    }
    

    打开浏览器,访问http://localhost:8080/test,可观察修改值前后的变化

  • 相关阅读:
    sqlalchemy 使用pymysql连接mysql 1366错误
    mysql之数据导出
    Go常见语句
    huffman code
    后缀数组,目前比较赶进度,而且有点难,所以放到以后再来看
    hash
    bipartite matching
    spanning tree
    拓扑排序
    Union Find
  • 原文地址:https://www.cnblogs.com/bigfairy/p/13996905.html
Copyright © 2020-2023  润新知