• 【Nacos】A1.搭建Nacos


    前期调研

    Nacos 是一个 Alibaba 开源的、易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
    使用 Spring Cloud Alibaba Nacos Config,可基于 Spring Cloud 的编程模型快速接入 Nacos 配置管理功能。
    
    英文全称Dynamic Naming and Configuration Service,即注册发现服务(注册中心)、配置服务(配置中心),在Nacos中服务(Service)是核心。
    
    Nacos是Dubbo体系、Spring Cloud Alibaba体系中重要的注册中心实现。
    Nacos = Spring Cloud eurake + Spring Cloud Config。
    与同类注册中心产品相对比,存在一定优势,支持CP+AP。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    特点NacosEurakeZookeeperConsul
    一致性协议CP+APAPCPCP
    健康检查TCP/HTTP/MYSQL/Client BeatClient BeatKeep AliveTCP/Http/gRPC/Cmd
    负载均衡权重/metadata/SelectorRibbon-RoundRobin
    雪崩保护
    自动注销实例支持支持支持不支持
    访问协议HTTP/DNSHTTPTCPHTTP/DNS
    多数据中心支持支持不支持支持
    跨注册中心同步支持不支持不支持支持
    SpringCloud支持支持-支持
    Dubbo支持-支持-
    K8S支持--支持

    服务发现和服务健康监控:
    支持基于DNS和基于RPC的服务发现,对服务健康的实时检查,阻止像不健康的主机或服务实例发送请求。
    动态配置服务:
    以中心化、外部化、动态化的方式管理所有环境的应用配置和服务配置。
    动态DNS服务:
    支持权重路由,更容易的实现中间层的负载均衡、路由策略、流量控制。
    服务以及元数据管理:
    从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务的 SLA 以及最首要的 metrics 统计数据。

    概念说明

    地域

    物理的数据中心,资源创建成功后不能更换。

    可用区

    同一地域内,电力和网络互相独立的物理区域。同一可用区内,实例的网络延迟较低。

    接入点

    地域的某个服务的入口域名。

    命名空间

    用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。

    配置

    在系统开发过程中,开发者通常会将一些需要变更的参数、变量等从代码中分离出来独立管理,以独立的配置文件的形式存在。目的是让静态的系统工件或者交付物(如 WAR,JAR 包等)更好地和实际的物理运行环境进行适配。配置管理一般包含在系统部署的过程中,由系统管理员或者运维人员完成。配置变更是调整系统运行时的行为的有效手段。

    配置管理

    系统配置的编辑、存储、分发、变更管理、历史版本管理、变更审计等所有与配置相关的活动。

    配置项

    一个具体的可配置的参数与其值域,通常以 param-key=param-value 的形式存在。例如我们常配置系统的日志输出级别(logLevel=INFO|WARN|ERROR) 就是一个配置项。

    配置集

    一组相关或者不相关的配置项的集合称为配置集。在系统中,一个配置文件通常就是一个配置集,包含了系统各个方面的配置。例如,一个配置集可能包含了数据源、线程池、日志级别等配置项。

    配置集 ID

    Nacos 中的某个配置集的 ID。配置集 ID 是组织划分配置的维度之一。Data ID 通常用于组织划分系统的配置集。一个系统或者应用可以包含多个配置集,每个配置集都可以被一个有意义的名称标识。Data ID 通常采用类 Java 包(如 com.taobao.tc.refund.log.level)的命名规则保证全局唯一性。此命名规则非强制。

    配置分组

    Nacos 中的一组配置集,是组织配置的维度之一。通过一个有意义的字符串(如 Buy 或 Trade )对配置集进行分组,从而区分 Data ID 相同的配置集。当您在 Nacos 上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULT_GROUP 。配置分组的常见场景:不同的应用或组件使用了相同的配置类型,如 database_url 配置和 MQ_topic 配置。

    配置快照

    Nacos 的客户端 SDK 会在本地生成配置的快照。当客户端无法连接到 Nacos Server 时,可以使用配置快照显示系统的整体容灾能力。配置快照类似于 Git 中的本地 commit,也类似于缓存,会在适当的时机更新,但是并没有缓存过期(expiration)的概念。

    服务

    通过预定义接口网络访问的提供给客户端的软件功能。

    服务名

    服务提供的标识,通过该标识可以唯一确定其指代的服务。

    服务注册中心

    存储服务实例和服务负载均衡策略的数据库。

    服务发现

    在计算机网络上,(通常使用服务名)对服务下的实例的地址和元数据进行探测,并以预先定义的接口提供给客户端进行查询。

    元信息

    Nacos数据(如配置和服务)描述信息,如服务版本、权重、容灾策略、负载均衡策略、鉴权配置、各种自定义标签 (label),从作用范围来看,分为服务级别的元信息、集群的元信息及实例的元信息。

    应用

    用于标识服务提供方的服务的属性。

    服务分组

    不同的服务可以归类到同一分组。

    虚拟集群

    同一个服务下的所有服务实例组成一个默认集群, 集群可以被进一步按需求划分,划分的单位可以是虚拟集群。

    实例

    提供一个或多个服务的具有可访问网络地址(IP:Port)的进程。

    权重

    实例级别的配置。权重为浮点数。权重越大,分配给该实例的流量越大。

    健康检查

    以指定方式检查服务下挂载的实例 (Instance) 的健康度,从而确认该实例 (Instance) 是否能提供服务。根据检查结果,实例 (Instance) 会被判断为健康或不健康。对服务发起解析请求时,不健康的实例 (Instance) 不会返回给客户端。

    健康保护阈值

    为了防止因过多实例 (Instance) 不健康导致流量全部流向健康实例 (Instance) ,继而造成流量压力把健康实例 (Instance) 压垮并形成雪崩效应,应将健康保护阈值定义为一个 0 到 1 之间的浮点数。当域名健康实例数 (Instance) 占总服务实例数 (Instance) 的比例小于该值时,无论实例 (Instance) 是否健康,都会将这个实例 (Instance) 返回给客户端。这样做虽然损失了一部分流量,但是保证了集群中剩余健康实例 (Instance) 能正常工作。

    搭建过程

    服务注册与发现

    Nacos Discovery 适配了 Netflix Ribbon,可以使用 RestTemplate 或 OpenFeign 进行服务的调用。

    1.预备环境准备

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

    • 64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac。
    • 64 bit JDK 1.8+;下载 & 配置
    • Maven 3.2.x+;下载 & 配置

    2.下载源码或者安装包

    你可以通过源码和发行包两种方式来获取 Nacos。

    nacos server 版本

    目前最新版是 2.0.3

    • application.properties是nacos单机启动配置文件。
    • application.properties.example单机默认配置文件。
    • cluster.conf.example是nacos集群默认配置文件。
    • nacos-logback.xml是日志配置文件。
    • nacos-mysql.sql是mysql数据库初始化脚本。
    • schema.sql是Derby 数据库初始化脚本。

    注意

    • 在0.7版本之前,在单机模式时nacos使用嵌入式数据库(Derby)实现数据的存储,不方便观察数据存储的基本情况。0.7版本增加了支持mysql数据源能力,所以只要使用0.7及以上版本的nacos,便可以配置mysql数据库,可视化的查看数据的存储情况了。
    • 使用mysql数据库时,需要使用mysql5.7以上版本。

    由此可见,要想使用nacos就必须提供一个数据库,要么使用内置的Derby,要么使用外置的mysql,在本文使用外置的mysql。

    从 Github 上下载源码方式

    下载2.0.3

    git clone https://github.com/alibaba/nacos.git
    cd nacos/
    mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U  
    ls -al distribution/target/
    
    // change the $version to your actual path
    cd distribution/target/nacos-server-$version/nacos/bin
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    下载编译后压缩包方式

    您可以从 最新稳定版本 下载 nacos-server-$version.zip 包。

    unzip nacos-server-$version.zip 或者 tar -xvf nacos-server-$version.tar.gz
    cd nacos/bin
    
    • 1
    • 2

    3.持久化配置修改

    初始化数据库表

    • 在/nacos/conf下找到文件nacos-mysql.sql,在数据库执行该文件内容,完成库表初始化工作。
    • 根据nacos-mysql.sql,创建数据库nacos_config

    Nacos配置

    在/nacos/conf下找到文件application.properties,定位到 Config Module Related Configurations
    将原本注释的部分放开并修改为自己的数据库连接信息。

    #*************** Config Module Related Configurations ***************#
    ### If use MySQL as datasource:
    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_config?characterEncoding=utf8mb4&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
    db.user.0=nacos
    db.password.0=nacosPW=123456
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    Mysql数据库添加用户

    mysql> `create user nacos@'localhost' identified by 'nacosPW=123456';`
    mysql> `grant all privileges on nacos_config.* to nacos@'localhost' with grant option;`
    mysql> `flush privileges;`
    mysql> `alter user nacos@'localhost' identified with mysql_native_password by 'nacosPW=123456';`
    
    • 1
    • 2
    • 3
    • 4

    开启防火墙

    firewall-cmd --zone=public --add-port=8848/tcp --permanent
    firewall-cmd --reload
    firewall-cmd --zone=public --add-port=10245/tcp --permanent
    firewall-cmd --reload
    
    • 1
    • 2
    • 3
    • 4

    4.启动服务器

    Linux/Unix/Mac

    启动命令(standalone代表着单机模式运行,非集群模式):

    sh startup.sh -m standalone

    如果您使用的是ubuntu系统,或者运行脚本报错提示[[符号找不到,可尝试如下运行:

    bash startup.sh -m standalone

    Windows

    启动命令(standalone代表着单机模式运行,非集群模式):

    startup.cmd -m standalone

    5.服务注册&发现和配置管理

    访问nacos

    访问 http://ip:8848/nacos 出现以下页面,代表启动成功,初始密码为 nacos/nacos
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZYCvluVu-1660918621208)(…/resource/nacos.png)]

    服务注册

    curl -X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.10&port=8080'

    服务发现

    curl -X GET 'http://127.0.0.1:8848/nacos/v1/ns/instance/list?serviceName=nacos.naming.serviceName'

    发布配置

    curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=HelloWorld"

    获取配置

    curl -X GET "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test"

    6.关闭服务器

    Linux/Unix/Mac

    sh shutdown.sh

    Windows

    shutdown.cmd 或者双击shutdown.cmd运行文件。

    7.设置开机启动

    Linux/Unix/Mac

    • 进入目录 cd /usr/lib/systemd/system
    • nacos.service拷贝到对应的服务器上
    • 重新加载服务 systemctl daemon-reload
    • 设置为开机启动 systemctl enable nacos.service
    • 查看是否已开机启动 systemctl is-enabled nacos.service
    • 查看服务状态 systemctl status nacos.service
    • 启用服务 systemctl enable nacos.service
    • 启动服务 systemctl start nacos.service
    • 停止服务 systemctl stop nacos.service

    Windows

    环境要求

    默认情况下Nacos会将配置信息存储在内嵌存储器中,但通常我们希望在数据库中存储或管理这些配置信息,那么就需要进行持久化修改,目前Nacos仅支持MYSQL5.6以上数据库。

    配置说明

    Nacos Discovery Starter

    配置项Key默认值说明
    服务端地址spring.cloud.nacos.discovery.server-addrNacos Server 启动监听的ip地址和端口
    服务名spring.cloud.nacos.discovery.service${spring.application.name}注册的服务名
    权重spring.cloud.nacos.discovery.weight1取值范围 1 到 100,数值越大,权重越大
    网卡名spring.cloud.nacos.discovery.network-interface当IP未配置时,注册的IP为此网卡所对应的IP地址,如果此项也未配置,则默认取第一块网卡的地址
    注册的IP地址spring.cloud.nacos.discovery.ip优先级最高
    注册的端口spring.cloud.nacos.discovery.port-1默认情况下不用配置,会自动探测
    命名空间spring.cloud.nacos.discovery.namespace常用场景之一是不同环境的注册的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等
    AccessKeyspring.cloud.nacos.discovery.access-key当要上阿里云时,阿里云上面的一个云账号名
    SecretKeyspring.cloud.nacos.discovery.secret-key当要上阿里云时,阿里云上面的一个云账号密码
    Metadataspring.cloud.nacos.discovery.metadata使用Map格式配置,用户可以根据自己的需要自定义一些和服务相关的元数据信息
    日志文件名spring.cloud.nacos.discovery.log-name
    集群spring.cloud.nacos.discovery.cluster-nameDEFAULTNacos集群名称
    接入点spring.cloud.nacos.discovery.endpoint地域的某个服务的入口域名,通过此域名可以动态地拿到服务端地址
    是否集成Ribbonribbon.nacos.enabledtrue一般都设置成true即可
    是否开启Nacos Watchspring.cloud.nacos.discovery.watch.enabledtrue可以设置成false来关闭 watch

    dataId

    ${prefix}-${spring.profiles.active}.${file-extension}
    ${prefix} 默认值是 spring.application.name。也可以配置spring.cloud.nacos.config.prefix。spring.profiles.active
    ${spring.profiles.active} 默认当前环境对应的 profile。注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}
    ${file-extension} 配置内容的数据格式。目前只支持 properties 和 yaml 类型。 
    
    • 1
    • 2
    • 3
    • 4

    ext-config

    # 自定义 Data Id 的配置
    
    # config external configuration
    # 1、Data Id 在默认的组 DEFAULT_GROUP,不支持配置的动态刷新
    spring.cloud.nacos.config.ext-config[0].data-id=ext-config-common01.properties
    
    # 2、Data Id 不在默认的组,不支持动态刷新
    spring.cloud.nacos.config.ext-config[1].data-id=ext-config-common02.properties
    spring.cloud.nacos.config.ext-config[1].group=GLOBALE_GROUP
    
    # 3、Data Id 既不在默认的组,也支持动态刷新
    spring.cloud.nacos.config.ext-config[2].data-id=ext-config-common03.properties
    spring.cloud.nacos.config.ext-config[2].group=REFRESH_GROUP
    spring.cloud.nacos.config.ext-config[2].refresh=true
    
    # 多个 Data Id 同时配置时,他的优先级关系是 spring.cloud.nacos.config.ext-config[n].data-id 其中 n 的值越大,优先级越高。
    # spring.cloud.nacos.config.ext-config[n].data-id 的值必须带文件扩展名,文件扩展名既可支持 properties,又可以支持 yaml/yml。 此时 spring.cloud.nacos.config.file-extension 的配置对自定义扩展配置的 Data Id 文件扩展名没有影响。
    # 通过自定义扩展的 Data Id 配置,既可以解决多个应用间配置共享的问题,又可以支持一个应用有多个配置文件。
    # 为了更加清晰的在多个应用间配置共享的 Data Id ,你可以通过以下的方式来配置:[参考shared-configshe和extension-configs](../config-model/bootstrap.yml)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    pom插件说明

    • 通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-config 实现配置的动态变更。
    • 通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-discovery 实现服务的注册与发现。

    参考

    nacos.service

    #
    # systemd service file for Nacos Server forking server
    #
    [Unit]
    Description=Nacos Server
    Documentation=nacos 2.0.3
    Documentation=https://nacos.io/zh-cn/
    Documentation=https://spring-cloud-alibaba-group.github.io/github-pages/hoxton/zh-cn/index.html
    After=network.target
    
    [Service]
    User=root
    Type=forking
    Environment="JAVA_HOME=/opt/openjdk/jdk1.8.0_311" #改成自己的jdk路径,因为服务脚本的环境和系统环境变量不能共享,所以还得设置才能生效。
    ExecStart=/opt/nacos/bin/startup.sh -m standalone #standalone 是单机,默认是集群cluster
    ExecReload=/opt/nacos/bin/shutdown.sh
    ExecStop=/opt/nacos/bin/shutdown.sh
    PrivateTmp=true
    
    [Install]
    WantedBy=multi-user.target
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    nacos-metadata.service

    #
    # /usr/lib/systemd/system
    # systemd service file for Nacos Server forking server
    #
    [Unit]
    Description=Nacos Metadata Server
    Documentation=Nacos Dubbo Metadata Center
    Documentation=nacos 2.0.3
    Documentation=https://nacos.io/zh-cn/
    Documentation=https://spring-cloud-alibaba-group.github.io/github-pages/hoxton/zh-cn/index.html
    Documentation=dubbo 2.7.8
    Documentation=https://dubbo.apache.org/zh/
    Documentation=dubbo-admin 0.3.0
    Documentation=https://github.com/apache/dubbo-admin
    
    After=network.target
    
    [Service]
    User=root
    Type=forking
    Environment="JAVA_HOME=/opt/openjdk/jdk1.8.0_311" #改成自己的jdk路径,因为服务脚本的环境和系统环境变量不能共享,所以还得设置才能生效。
    ExecStart=/opt/nacos-metadata/bin/startup.sh -m standalone #standalone 是单机,默认是集群cluster
    ExecReload=/opt/nacos-metadata/bin/shutdown.sh
    ExecStop=/opt/nacos-metadata/bin/shutdown.sh
    PrivateTmp=true
    
    [Install]
    WantedBy=multi-user.target
    
    • 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
    • 28
  • 相关阅读:
    四、值类型 和 引用类型
    【算法】排序——选择排序和交换排序(快速排序)
    专题七:PV操作
    5-if语句(选择结构)
    从神一到神十三,探索中国航天背后“神秘”力量
    赴日IT必备!日本技术人文签证怎么拿?
    Docker部署Elasticsearch和Head
    数字乡村包括哪些方面?数字乡村应用介绍
    SpringBoot日志文件
    SpringBoot中如何实现业务校验,这种方式才叫优雅!
  • 原文地址:https://blog.csdn.net/u012549626/article/details/126432712