资料来源:02-Nacos配置管理-什么是配置中心_哔哩哔哩_bilibili
nacos记得下载2.x版本的,负责以后新建配置的时候会出现“发布错误,请检查参数是否正确”错误!!!!
目录
一、Nacos简介
1.1 四大功能:
1.2 对比
二、配置中心
2.1 什么是配置
2.1.1 特点
2.2 什么是配置中心
三、Nacos Server安装
3.1 文件下载
3.2 启动服务器(Windos方式)
3.3 OPEN API 配置管理测试
3.3.1 curl工具安装
3.3.2 发布配置
3.3.3 获取配置
3.3.4 关闭服务器(windows方式)
3.3.5 外部MySQL数据库支持
一、Nacos简介
Nacos事阿里的一个开源产品,针对微服务架构中的服务发现、配置管理、服务治理的综合型解决方案。
1.1四大功能:
①服务发现与服务健康检查
Nacos使服务更容易注册,并通过DNS或HTTP接口发现其他服务,Nacos还提供服务的实时健康检查,以防止向不健康的主机或服务实例发送请求。
②动态配置管理
动态配置服务允许您在所有环境中以集中和动态的方式管理所有服务的配置。Nacos消除了在更新配置时重新部署应用程序,这使配置的更改更加高效和灵活。
③动态DNS服务
Nacos提供基于DNS协议的服务发现能力(Nacos不光基于HTTP进行服务发现,也可以通过DNS协议进行服务发现),旨在支持异构语言的服务发现,支持将注册在Nacos上的服务以域名的方式暴露端点,让三方应用方便的查阅及发现。④服务和元数据管理Nacos 能让您从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略。 这里动态配置管理的特性说明了Naocs的配置管理能力。
1.2 对比
从配置中心角度来看,性能方面Nacos的读写性能最高,Apollo次之,SpringCloudConfig依赖Git场景不适合开放的大规模自动化运维API。功能方面Apollo最为完善,nacos具有Apollo大部分配置管理功能,而SpringCloud Config不带运维管理界面,需要自行开发。Nacos的一大优势是整合了注册中心、配置中心功能,部署和操作相比
Apollo 都要直观简单,因此它简化了架构复杂度,并减轻运维及部署工作。
二、配置中心
总得来说,配置中心就是一种统一管理各种应用配置的基础服务组件
2.1 什么是配置
应用程序在启动和运行的时候往往需要读取一些配置信息,配置基本上伴随着应用程序的整个生命周期,比如:数据库连接参数、启动参数等。
2.1.1 特点
配置是独立于程序的 只读 变量 配置对于程序是只读的,程序通过读取配置来改变自己的行为,但是程序不应该去改变配置 配置伴随应用的整个生命周期 配置贯穿于应用的整个生命周期,应用在启动时通过读取配置来初始化,在运行时根据配置调整行为。 比如:启动时需要读取服务的端口号、系统在运行过程中需要读取定时策略执行定时任务等。 配置可以有多种加载方式 常见的有程序内部hardcode,配置文件,环境变量,启动参数,基于数据库等配置需要治理同一份程序在不同的环境(开发,测试,生产)、不同的集群(如不同的数据中心)经常需要有不同的配置,所以需要有完善的环境、集群配置管理
2.2 什么是配置中心
在微服务架构中,当系统从一个单体应用,被拆分成分布式系统上一个个服务节点后,配置文件也必须跟着迁移(分割),这样配置就分散了,不仅如此,分散中还包含着冗余,如下图:为了避免冗余,我们可以创建一个配置中心,让所有的服务都从配置中心读取配置文件。也就是说 将配置从各个应用中剥离出来,由配置中心对配置进行统一管理,应用自身不需要自己去管理配置
流程如下图所示:整个过程很智能
那怎么获取最新的配置呢?比如说通过一些网络协议,远程网络协议读取出来。 为什么要通过远程网络协议读取出来?配置中心是一个独立部署的一个服务,可能在一个独立的服务器上,服务A和服务B都是再一个独立的服务器上,那这访问的话只能通过远程网络协议读取出来。
三、Nacos Server安装
Nacos依赖Java环境来运行。如果您是从代码开始构建并运行Nacos,还需要为此配置Maven环境。 推荐nacos 2.xjdk 1.8+Maven 3.2.x+ mysql 5.6.5+
3.1 文件下载
Releases · alibaba/nacos (github.com)
下载下面的文件并解压,注意路径中不要有中文”.gz” 结尾的文件是Linux版本的,我们需要下载zip结尾的
下面是解压之后的文件目录
3.2 启动服务器(Windos方式)
Nacos默认端口8848,所以我们要保证这个端口并没有被其他进程占用。
启动命令:
cmd startup.cmd
或者直接双击startup.cmd文件
不论哪种方式,运行成功后会出现下面这个页面,然后复制下面这个标红的地方,这个地方可能每个人都不一样 http://10.203.41.25:8848/nacos/index.html或者 http://10.203.41.25:8848/nacos 或者 http://127.0.0.1:8848/nacos
假如我们双击之后出现cmd运行窗口闪退,可以参考下面这个人的文章,真的很棒
(34条消息) NACOS启动闪退的情况_日出前的千夜的博客-CSDN博客_nacos启动闪退
输入地址回车后会出现下面这个网页
默认用户名:nacos默认密码:nacos
输入密码便可以进入到主界面
3.3 OPEN API 配置管理测试
3.3.1 curl工具安装
启动 nacos 成功后,可通过 nacos 提供的 httpapi 验证 nacos 服务运行是否正常。 下边我们通过curl工具来测试nacos的openapi: curl是开发中常用的命令行工具,可以用作HTTP协议测试。 下载 curl 的 windows 版本: curl-7.66.0_2-win64-mingw ,下载地址: https://curl.haxx.se/windows/ 也可以从上面分享的百度网盘中提取资料
下载完成进入 curl-7.66.0_2-win64-mingw 的 bin 目录,进行下边的测试,通过测试可判断 nacos 是否正常工作
3.3.2 发布配置
仔细看,这是一个POST请求
curl -XPOST"http://127.0.0.1:8848/nacos/v1/cs/configs" />
将上面的命令再cmd窗口进行运行,如果成功的话会出现“true”字样
此时出现true之后,我们再打开Nacos页面,配置列表->查询->就会出现下面这个配置,这个就是我们的配置信息
点击右侧详情
下面这个页面就会出现配置的内容 这个配置的内容,和我们刚刚所运行的指令相对应
与“content=”之后的内容对应
3.3.3 获取配置
我们的电脑就是一个客户端,我们要从nacos中获取数据
向 nacos 发布配置成功,就可以通过客户端从 nacos 获取配置信息,执行下边的命令: GET请求就可以获取到
curl-XGET"http://127.0.0.1:8848/nacos/v1/cs/configs" />
我们发布配置的时候指定了一个dataId、group、content
所以我们在获取配置的时候要指定dataId、group,此时我们便可以获取到content的内容,如下图所示
3.3.4 关闭服务器(windows方式)
cmdshutdown.cmd
或者有个更直接的方式就是把窗口直接关掉
或者双击shutdown.cmd运行文件
3.3.5 改成外部MySQL数据库支持
如下图所示,nacos中会有一些数据,单机模式时nacos默认使用嵌入式数据库实现数据的存储,
MySQL和SQL Server这些数据库属于数据库服务器
SQLite、Berkeley DB等属于嵌入式数据库
嵌入式数据库跟数据库服务器最大的区别在于它们运行的地址空间不同。
通常,数据库服务器独立地运行一个守护进程(daemon),而嵌入式数据库与应用程序运行在同一个进程。
若想使用外部 mysql存储nacos 数据,需要进行以下步骤: 1. 安装数据库,版本要求: 5.6.5+ , mysql8 以下 2.初始化mysql 数据库,新建数据库 nacos_config ,数据库初始化文件: ${nacoshome}/conf/nacos- mysql.sql 将下面的这个文件导入数据库
下面就是nacos所需要的表
3.修改${nacoshome}/conf/application.properties 文件,增加支持 mysql 数据源配置(目前只支持mysql),添加 mysql 数据源的 url 、用户名和密码。
将下段语句复制到上面的文件当中
spring.datasource.platform=mysqldb.num=1db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config" />如果上面这个语句不行的话,我们可以使用下面这个,比上面的配置多了一个时区serverTimezone=UTC,除此之外我也把数据库名改成nacos了,这个文件和MySQL中的数据库都改,因为我是用上面的那个时候一直给我报错“com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown database 'nacos_config'”,但是我修改之后发现没有了这个问题,至于什么原因我也不太清楚
spring.datasource.platform=mysqldb.num=1db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&serverTimezone=UTC&socketTimeout=3000&autoReconnect=truedb.user=rootdb.password=root
127.0.0.1:3306 因为在我本机上,所以是127.0.0.1,MySQL的端口号3306
nacos_config表示数据库名(我后来改成了 nacos)
db.user 、db.password表示数据库的用户名和密码
重新启动nacos
重新进入到网页,发现没有数据,因为我们数据库中是一个空表,所示没有数据,这是正常的