Nacos - 配置管理
目录教学目标
1)能够说出配置中心的概念以及使用场景
2)了解主流配置中心
3)理解Nacos的功能特性
4)掌握Nacos的快速入门方法
5)掌握Nacos安装方式
6)理解Nacos配置管理的核心概念及数据模型
7)掌握使用Nacos控制台进行配置管理的操作方法
8)掌握Nacos分布式系统应用的方法
9)掌握Nacos集群部署方式
1. 什么是配置中心
1.1 什么是配置
应用程序在启动和运行的时候往往需要读取一些配置信息,配置基本上伴随着应用程序的整个生命周期,比如:数据库连接参数、启动参数等。
配置主要有以下几个特点:
- 配置是独立于程序的只读变量
配置对于程序是只读的,程序通过读取配置来改变自己的行为,但是程序不应该去改变配置
- 配置伴随应用的整个生命周期
配置贯穿于应用的整个生命周期,应用在启动时通过读取配置来初始化,在运行时根据配置调整行为。
比如:启动时需要读取服务的端口号、系统在运行过程中需要读取定时策略执行定时任务等。
- 配置可以有多种加载方式
常见的有程序内部hard code,配置文件,环境变量,启动参数,基于数据库等
- 配置需要治理
同一份程序在不同的环境(开发,测试,生产)、不同的集群(如不同的数据中心)经常需要有不同的配置,所以需要有完善的环境、集群配置管理
1.2 什么是配置中心
在微服务架构中,当系统从一个单体应用,被拆分成分布式系统上一个个服务节点后,配置文件也必须跟着迁移(分割),这样配置就分散了,不仅如此,分散中还包含着冗余,如下图:
下图显示了配置中心的功能,配置中心将配置从各应用中剥离出来,对配置进行统一管理,应用自身不需要自己去管理配置。
配置中心的服务流程如下:
1、用户在配置中心更新配置信息。
2、服务A和服务B及时得到配置更新通知,从配置中心获取配置。
总得来说,配置中心就是一种统一管理各种应用配置的基础服务组件。
在系统架构中,配置中心是整个微服务基础架构体系中的一个组件,如下图,它的功能看上去并不起眼,无非就是
配置的管理和存取,但它是整个微服务架构中不可或缺的一环。
总结一下,在传统巨型单体应用纷纷转向细粒度微服务架构的历史进程中,配置中心是微服务化不可缺少的一个系统组件,在这种背景下中心化的配置服务即配置中心应运而生,一个合格的配置中心需要满足如下特性:
配置项容易读取和修改
分布式环境下应用配置的可管理性,即提供远程管理配置的能力
支持对配置的修改的检视以把控风险
可以查看配置修改的历史记录
不同部署环境下应用配置的隔离性
2 Nacos****简介
2.1 主流配置中心对比
目前市面上用的比较多的配置中心有:Spring Cloud Confifig、Apollo、Nacos和Disconf等。由于Disconf不再维护,下面主要对比一下Spring Cloud Confifig、Apollo和Nacos。
从配置中心角度来看,性能方面Nacos的读写性能最高,Apollo次之,Spring Cloud Confifig依赖Git场景不适合开
放的大规模自动化运维API。功能方面Apollo最为完善,nacos具有Apollo大部分配置管理功能,而Spring Cloud
Confifig不带运维管理界面,需要自行开发。Nacos的一大优势是整合了注册中心、配置中心功能,部署和操作相比
Apollo都要直观简单,因此它简化了架构复杂度,并减轻运维及部署工作。
综合来看,Nacos的特点和优势还是比较明显的,下面我们一起进入Nacos的世界。
2.2 Nacos****简介
Nacos是阿里的一个开源产品,它是针对微服务架构中的服务发现、配置管理、服务治理的综合型解决方案。官方介绍是这样的:
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您实现动态服务发现、服务配置管理、服务及流量管理。 Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。Nacos 是构建以“服务”为中心的现代应用架构的服务基础设施。
2.3 Nacos****特性
Nacos主要提供以下四大功能:
\1. 服务发现与服务健康检查
Nacos使服务更容易注册,并通过DNS或HTTP接口发现其他服务,Nacos还提供服务的实时健康检查,以防止向不健康的主机或服务实例发送请求。
\2. 动态配置管理
动态配置服务允许您在所有环境中以集中和动态的方式管理所有服务的配置。Nacos消除了在更新配置时重新部署应用程序,这使配置的更改更加高效和灵活。
\3. 动态 DNS 服务
Nacos提供基于DNS 协议的服务发现能力,旨在支持异构语言的服务发现,支持将注册在Nacos上的服务以域名的方式暴露端点,让三方应用方便的查阅及发现。
\4. 服务和元数据管理
Nacos 能让您从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略。这里动态配置管理的特性说明了Naocs的配置管理能力。
3 Nacos 快速入
3.1 安装 Nacos Server
3.1.1 预备环境准备
Nacos 依赖 Java 环境来运行。如果您是从代码开始构建并运行Nacos,还需要为此配置 Maven环境,请确保是在
以下版本环境中安装使用:
\1. 64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac。
\2. 64 bit JDK 1.8+;下载 & 配置。
\3. Maven 3.2.x+;下载 & 配置。
3.1.2 下载源码或者安装包
你可以通过源码和发行包两种方式来获取 Nacos。
从 Github 上下载源码方式
3.1.3 启动服务器
nacos的默认端口是8848,需要保证8848默认端口没有被其他进程占用。
进入安装程序的bin目录:
Linux/Unix/Mac 启动方式:
启动命令(standalone代表着单机模式运行,非集群模式):
sh startup.sh -m standalone
如果您使用的是ubuntu系统,或者运行脚本报错提示[[符号找不到,可尝试如下运行:
bash startup.sh -m standalone
Windows 启动方式:
启动命令:
cmd startup.cmd
或者双击startup.cmd运行文件。
启动成功,可通过浏览器访问 http://127.0.0.1:8848/nacos ,打开如下nacos控制台登录页面:
使用默认用户名:nacos,默认密码:nacos 登录即可打开主页面。
3.1.4 OPEN API 配置管理测试
启动nacos成功后,可通过nacos提供的http api验证nacos服务运行是否正常。
下边我们通过 curl工具来测试nacos的open api:
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是否正常工作:
发布配置
curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?
dataId=nacos.cfg.dataId&group=test&content=HelloWorld"
上边的命令表示向nacos发布一个配置:
获取配置
向nacos发布配置成功,就可以通过客户端从nacos获取配置信息,执行下边的命令:
curl -X GET "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test"
通过测试发现,可以从nacos获取前边发布的配置:HelloWorld
3.1.5.****关闭服务器
关闭nacos服务的方式如下:
Linux/Unix/Mac 方式:
sh shutdown.sh
Windows 方式:
cmd shutdown.cmd
或者双击shutdown.cmd运行文件。
3.1.6. 外部 mysql 数据库支持
单机模式时nacos默认使用嵌入式数据库实现数据的存储,若想使用外部mysql存储nacos数据,需要进行以下步
骤:
1.安装数据库,版本要求:5.6.5+ ,mysql 8 以下
2.初始化mysql数据库,新建数据库nacos_config,数据库初始化文件: ${nacoshome}/conf/nacosmysql.sql
3.修改${nacoshome}/conf/application.properties文件,增加支持mysql数据源配置(目前只支持mysql),添加mysql数据源的url、用户名和密码。
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://11.162.196.16:3306/nacos_config?
characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=nacos_devtest
db.password=youdontknow
3.2 Nacos 配置入门
3.3.1 发布配置
首先在nacos发布配置。
浏览器访问 http://127.0.0.1:8848/nacos ,打开nacos控制台,并点击菜单配置管理 -> 配置列表:
在Nacos添加如下的配置:
Data ID: nacos‐simple‐demo.yaml
Group : DEFAULT_GROUP
配置格式: YAML
配置内容: common:
config1: something
Note:
注意dataid是以 properties(默认的文件扩展名方式)为扩展名,这里使用yaml。
- 第一步:点击新增配置
- 第二步:配置信息
- 第三步:发布配置
- 第四步:查询配置
3.3.2 nacos****客户端获取配置
我们需要新增一个名为nacos-simple-demo的项目,坐标如下:
<groupId>com.itheima.nacos</groupId>
<artifactId>nacos‐simple‐demo</artifactId>
<version>1.0‐SNAPSHOT</version>
添加group ID 为 com.alibaba.nacos 和 artifact ID 为 nacos-client 的 starter。用于实现项目中使用 Nacos 来实现应用的外部化配置。
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos‐client</artifactId>
<version>1.1.3</version>
</dependency>
-
( 1 )完整的 pom.xml 配置如下
<?xml version="1.0" encoding="UTF‐8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema‐instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven‐4.0.0.xsd"> <groupId>com.itheima.nacos</groupId> <version>1.0‐SNAPSHOT</version> <artifactId>nacos‐simple‐demo</artifactId> <modelVersion>4.0.0</modelVersion> <dependencies> <dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos‐client</artifactId> <version>1.1.3</version> </dependency> </dependencies> </project>
-
( 2 )获取外部化配置 新增java执行类,并在执行过程中获取配置信息:
package com.itheima.nacos; import com.alibaba.nacos.api.NacosFactory; import com.alibaba.nacos.api.config.ConfigService; import com.alibaba.nacos.api.config.listener.Listener; import com.alibaba.nacos.api.exception.NacosException; import java.util.Properties; import java.util.concurrent.Executor; /** * @author Administrator * @version 1.0 **/ public class SimpleDemoMain { public static void main(String[] args) throws NacosException { //使用nacos client远程获取nacos服务上的配置信息 //nacos server地址 String serverAddr = "127.0.0.1:8848"; //data id String dataId = "test.yaml"; //group String group = "DEFAULT_GROUP"; //namespace String namespace = "b2cde753-89fe-4ada-af63-f7eab06e98da"; Properties properties =new Properties(); properties.put("serverAddr",serverAddr); properties.put("namespace",namespace); //获取配置 ConfigService configService = NacosFactory.createConfigService(properties); // String dataId, String group, long timeoutMs String config = configService.getConfig(dataId, group, 5000); System.out.println(config); //String dataId, String group, Listener listener configService.addListener(dataId, group, new Listener() { public Executor getExecutor() { return null; } //当配置有变化 时候获取通知 public void receiveConfigInfo(String s) { System.out.println(s); } }); while (true){ try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } } } }
启动程序如下: