【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。
特点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

下载编译后压缩包方式

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

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

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

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';`

开启防火墙

firewall-cmd --zone=public --add-port=8848/tcp --permanent
firewall-cmd --reload
firewall-cmd --zone=public --add-port=10245/tcp --permanent
firewall-cmd --reload

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 类型。 

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)

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

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

琴 韵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值