Nacos 介绍
Nacos 是 Alibaba 公司推出的开源工具,用于实现分布式系统的服务发现与配置管理。英文全称 Dynamic Naming and Configuration Service,Na 为 Naming/NameServer 即注册中心,co 为 Configuration 即配置中心,Service 是指该注册/配置中心都是以服务为核心。服务(Service)是 Nacos 世界的一等公民。
❝官网是这样说的:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
❞
Nacos 致力于发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,可以快速实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos 可以更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构的服务基础设施。
使用 Nacos 简化服务发现、配置管理、服务治理及管理的解决方案,让微服务的发现、管理、共享、组合更加容易。
Nacos 官网:https://nacos.io/zh-cn/
Github:/alibaba/nacos
Nacos 安装
环境准备
Nacos 依赖 Java 环境来运行。如果您是从代码开始构建并运行 Nacos,还需要为此配置 Maven 环境,请确保是在以下版本环境中安装使用:
JDK 1.8+;Maven 3.2.x+。
下载源码或者安装包
可以通过源码和发行包两种方式来获取 Nacos。
源码方式
从 Github 上下载源码方式。
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/bingit clone /alibaba/nacos.git
发行包方式
您可以从 /alibaba/nacos/releases 下载最新稳定版本的nacos-server
包。
启动服务器
Linux/Unix/Mac
在 Nacos 的解压目录nacos/bin
目录下启动。
启动命令(standalone 代表着单机模式运行,非集群模式):
sh startup.sh -m standalone
如果您使用的是 ubuntu 系统,或者运行脚本报错提示符号找不到,可尝试如下运行:
bash startup.sh -m standalone
Windows
启动命令:
cmd startup.cmd
或者双击startup.cmd
运行文件。
访问
访问:http://localhost:8848/nacos/ ,默认用户名/密码是 nacos/nacos。
关闭服务器
Linux/Unix/Mac
sh shutdown.sh
Windows
cmd shutdown.cmd
或者双击shutdown.cmd
运行文件。
配置 MySQL 数据库
Nacos 在0.7
版本之前,默认使用的是嵌入式数据库Apache Derby
来存储数据(内嵌的数据库会随着 Nacos 一起启动,无需额外安装);0.7
版本及以后,增加了对MySQL
数据源的支持。
MySQL数据源
环境要求:MySQL 5.6.5+(生产使用建议至少主备模式,或者采用高可用数据库);
初始化 MySQL 数据库
创建数据库nacos_config
。
SQL源文件地址:/alibaba/nacos/blob/master/distribution/conf/nacos-mysql.sql ,或者在nacos-server
解压目录conf
下,找到nacos-mysql.sql
文件,运行该文件,结果如下:
application.properties 配置
修改nacos/conf/application.properties
文件的以下内容。
最终修改结果如下:
### If user MySQL as datasource: # 指定数据源为 MySQL spring.datasource.platform=mysql ### Count of DB: # 数据库实例数量 db.num=1 # 数据库连接信息,如果是 MySQL 8.0+ 版本需要添加 serverTimezone=Asia/Shanghai ### Connect URL of DB: db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&serverTimezone=Asia/Shanghai db.user=root db.password=1234#*************** Config Module Related Configurations ***************#
❝如果你和我一样使用的是 MySQL 8.0+ 版本,那么启动 Nacos 时肯定会报错。莫慌,在 Nacos 安装目录下新建
plugins/mysql
文件夹,并放入 8.0+ 版本的 mysql-connector-java-8.0.xx.jar,重启 Nacos 即可,启动时会提示更换了 MySQL 的 driver-class 类。❞
Nacos 配置入门
nacos-config-demo
聚合工程。SpringBoot 2.3.0.RELEASE
、Spring Cloud Hoxton.SR5
。
发布配置
选择配置管理
的配置列表
页面,点击最右侧+
按钮新建配置。
Nacos Config 使用Data ID
和Group
来确定配置。
下图显示Data Id
为product-service.yaml
,组使用默认组,并添加yaml
格式的配置信息。
name: SpringCloudAlibaba org: Aliababaproject:
获取配置
创建项目
我们创建聚合项目来讲解 Nacos,首先创建一个 pom 父工程。
添加依赖
pom.xml
<project xmlns="/POM/4.0.0"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0modelVersion> <groupId>org.examplegroupId> <artifactId>nacos-config-demoartifactId> <version>1.0-SNAPSHOTversion> <parent> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-parentartifactId> <version>2.3.0.RELEASEversion> parent> <properties> <spring-cloud.version>Hoxton.SR5spring-cloud.version> <spring-cloud-alibaba.version>2.1.0.RELEASEspring-cloud-alibaba.version> properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloudgroupId> <artifactId>spring-cloud-dependenciesartifactId> <version>${spring-cloud.version}version> <type>pomtype> <scope>importscope> dependency> <dependency> <groupId>com.alibaba.cloudgroupId> <artifactId>spring-cloud-alibaba-dependenciesartifactId> <version>${spring-cloud-alibaba.version}version> <type>pomtype> <scope>importscope> dependency> dependencies> dependencyManagement> project><?xml version="1.0" encoding="UTF-8"?>
商品服务 product-service
创建项目
在刚才的父工程下创建一个product-service
项目。
添加依赖
主要添加spring-cloud-starter-alibaba-nacos-config
依赖。
<dependency> <groupId>com.alibaba.cloudgroupId> <artifactId>spring-cloud-starter-alibaba-nacos-configartifactId> dependency>
完整依赖如下:
<project xmlns="/POM/4.0.0"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd"> <parent> <artifactId>nacos-config-demoartifactId> <groupId>org.examplegroupId> <version>1.0-SNAPSHOTversion> parent> <modelVersion>4.0.0modelVersion> <artifactId>product-serviceartifactId> <dependencies> <dependency> <groupId>com.alibaba.cloudgroupId> <artifactId>spring-cloud-starter-alibaba-nacos-configartifactId> dependency> <dependency> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-webartifactId> dependency> <dependency> <groupId>org.projectlombokgroupId> <artifactId>lombokartifactId> <scope>providedscope> dependency> <dependency> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-testartifactId> <scope>testscope> <exclusions> <exclusion> <groupId>org.junit.vintagegroupId> <artifactId>junit-vintage-engineartifactId> exclusion> exclusions> dependency> dependencies> project><?xml version="1.0" encoding="UTF-8"?>
配置文件
在bootstrap.yml
中配置 Nacos Server 的地址和应用名。
port: 7070 # 端口 spring: application: name: product-service # 应用名称 cloud: nacos: config: enabled: true # 如果不想使用 Nacos 进行配置管理,设置为 false 即可 server-addr: 127.0.0.1:8848 # Nacos Server 地址 group: DEFAULT_GROUP # 组,默认为 DEFAULT_GROUP file-extension: yaml # 配置内容的数据格式,默认为 propertiesserver:
❝说明:之所以需要配置
spring.application.name
,是因为它是构成 Nacos 配置管理dataId
字段的一部分。❞
在 Nacos Spring Cloud 中,dataId
的完整格式如下:
${prefix}-${spring.profile.active}.${file-extension}
prefix
默认为spring.application.name
的值,也可以通过配置项spring.cloud.nacos.config.prefix
来配置。spring.profile.active
即为当前环境对应的 profile。「注意:当spring.profile.active
为空时,对应的连接符-
也将不存在,dataId 的拼接格式将变成${prefix}.${file-extension}
」file-exetension
为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension
来配置。目前只支持properties
和yaml
类型,默认为properties
。
控制层
使用 Spring 的@Value
注解来获取配置信息,${}
中对应 Nacos 配置中心配置内容的 key,:
后跟默认值。
并且通过 Spring Cloud 原生注解@RefreshScope
实现配置自动更新。
import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import java.util.HashMap; import java.util.Map; @RefreshScope @RestController public class ConfigController { @Value("${project.name:}") private String projectName; @Value("${:}") private String projectOrg; @GetMapping("/config") public MapgetConfig() { Map configMap = new HashMap(); configMap.put("projectName", projectName); configMap.put("projectOrg", projectOrg);return configMap; } }package org.example.controller;
启动类
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class ProductServiceApplication { public static void main(String[] args) { SpringApplication.run(ProductServiceApplication.class, args); } }package org.example;
测试
访问:http://localhost:7070/config 结果如下:
修改配置为以下内容,重新发布:
name: SpringCloudAlibaba-Nacos org: Aliababaproject:
控制台打印信息如下:
b.c.PropertySourceBootstrapConfiguration : Located property source: [BootstrapPropertySource {name='bootstrapProperties-product-service.yaml'}] o.s.boot.SpringApplication: No active profile set, falling back to default profiles: default o.s.boot.SpringApplication: Started application in 3.356 seconds (JVM running for 50.676) o.s.c.e.event.RefreshEventListener : Refresh keys changed: [project.name]c.a.c.n.c.NacosPropertySourceBuilder: Loading nacos data, dataId: 'product-service.yaml', group: 'DEFAULT_GROUP'
访问:http://localhost:7070/config 结果如下:
Nacos 配置核心概念
配置
❝为什么需要配置?概念。
❞
在系统开发过程中,开发者通常会将一些需要变更的参数、变量等从代码中分离出来独立管理,以独立的配置文件的形式存在。目的是让静态的系统工件或者交付物(如 WAR,JAR 包等)更好地和实际的物理运行环境进行适配。配置管理一般包含在系统部署的过程中,由系统管理员或者运维人员完成。配置变更是调整系统运行时的行为的有效手段。
配置管理
❝对配置的多维度管理。
❞
系统配置的编辑、存储、分发、变更管理、历史版本管理、变更审计等所有与配置相关的活动。
配置项
❝一个键值对 Key = Value。
❞
一个具体的可配置的参数与其值域(一个键值对),通常以 param-key=param-value 的形式存在。例如我们常配置系统的日志输出级别(logLevel=INFO|WARN|ERROR) 就是一个配置项。
配置集
❝多个键值对,一般指一个配置文件。
❞
一组相关或者不相关的配置项的集合称为配置集(多个键值对/一个配置文件)。在系统中,一个配置文件通常就是一个配置集,包含了系统各个方面的配置。例如,一个配置集可能包含了数据源、线程池、日志级别等配置项。
配置集 ID
❝给这个配置文件起一个全局唯一的 ID。
❞
Nacos 中的某个配置集的 ID。配置集 ID 是组织划分配置的维度之一。Data ID 通常用于组织划分系统的配置集。一个系统或者应用可以包含多个配置集,每个配置集都可以被一个有意义的名称标识。Data ID 通常采用类 Java 包(如 com.taobao.tc.refund.log.level)的命名规则保证全局唯一性。此命名规则非强制。
配置分组
❝多个配置文件放在一起,形成组,一般用于区分项目。例如,某学校多应用之间的区分,教师应用 TEACHER_GROUP,学生应用 STUDENT_GROUP。
❞
Nacos 中的一组配置集,是组织配置的维度之一。通过一个有意义的字符串(如 Buy 或 Trade )对配置集进行分组,从而区分 Data ID 相同的配置集。当您在 Nacos 上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULT_GROUP 。配置分组的常见场景:不同的应用或组件使用了相同的配置类型,如 database_url 配置和 MQ_topic 配置。
配置快照
❝缓存配置信息。
❞
Nacos 的客户端 SDK 会在本地生成配置的快照。当客户端无法连接到 Nacos Server 时,可以使用配置快照显示系统的整体容灾能力。配置快照类似于 Git 中的本地 commit,也类似于缓存,会在适当的时机更新,但是并没有缓存过期(expiration)的概念。
命名空间
❝区分环境,比如:dev、test、prod 等等。
❞
用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。
最佳实践
通常我们可以这样定义 Namespace,Group,DataId:
Namespace
:代表不同的「环境」,如:开发、测试, 生产等;Group
:代表某个「项目」,如:XX物流项目,XX教育项目;DataId
:每个项目下往往有若干个「应用」,每个配置集(DataId)是一个应用的「主配置文件」
Namespace 命名空间
前面已经介绍过命名空间的概念,用于隔离多个环境,而每个应用在不同环境的同一个配置(如数据库数据源)的值是不一样的。因此,我们针对企业项目实际研发流程和环境进行规划。
如某软件公司拥有开发、测试、生产三套环境,那么我们应该建立三个 Namespace 进行区分。
创建命名空间
点击左侧菜单命名空间
,看到默认有一个public(保留空间)
,点击右侧新建命名空间
进行创建。
按下图的方式分别创建dev(开发环境)
、test(测试环境)
、prod(生产环境)
三个命名空间。
最终结果如下:
指定命名空间
如果spring.cloud.nacos.config.namespace
中没有指定名称空间,则使用 Nacos 的 public(保留空间)。还可以按以下方式指定自定义名称空间:
spring.cloud.nacos.config.namespace=b3404bc0-d7dc-4855-b519-570ed34b62d7
❝此配置必须在 bootstrap.yml 文件中。 spring.cloud.nacos.config.namespace 的值是命名空间的 ID,可以从 Nacos 控制台中检索 ID 的值。 添加配置时,请勿选择其他名称空间。 否则,将无法正确检索配置。
❞
发布配置
选择配置管理
的配置列表
页面,选择dev
环境,点击最右侧+
按钮新建配置。
Nacos Config 使用Data ID
和Group
来确定配置。
下图显示Data Id
为product-service.yaml
,组使用默认组,并添加yaml
格式的配置信息。
name: SpringCloudAlibaba-DEV org: Aliababaproject:
获取配置
配置文件
bootstrap.yml
port: 7070 # 端口 spring: application: name: product-service # 应用名称 cloud: nacos: config: enabled: true # 如果不想使用 Nacos 进行配置管理,设置为 false 即可 server-addr: 127.0.0.1:8848 # Nacos Server 地址 group: DEFAULT_GROUP # 组,默认为 DEFAULT_GROUP file-extension: yaml # 配置内容的数据格式,默认为 properties namespace: 450a3f07-08ee-49f6-8213-9b04b06cd3cc # 对应 dev 环境server:
控制层
使用 Spring 的@Value
注解来获取配置信息,${}
中对应 Nacos 配置中心配置内容的 key,:
后跟默认值。
并且通过 Spring Cloud 原生注解@RefreshScope
实现配置自动更新。
import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import java.util.HashMap; import java.util.Map; @RefreshScope @RestController public class ConfigController { @Value("${project.name:}") private String projectName; @Value("${:}") private String projectOrg; @GetMapping("/config") public MapgetConfig() { Map configMap = new HashMap(); configMap.put("projectName", projectName); configMap.put("projectOrg", projectOrg);return configMap; } }package org.example.controller;
测试
访问:http://localhost:7070/config 结果如下:
Group 组
Group 组信息可以在新建配置时进行指定,如下图:
配置管理
这一小节我们通过大量配图演示控制台的相关操作。
新建/编辑/删除/查询
右侧+
新建配置。单条编辑或删除选择操作栏中的编辑或删除。批量删除勾选以后选择左下角红色删除。
可以通过Data Id
和Group
查询配置,还可以将查询结果导出。
导入/导出/克隆
前文提到命名空间用于隔离多个环境,每个应用在不同环境的同一个配置(如数据库数据源)的值是不一样的。也就是说可能大量的配置项都是相同的,个别差异的配置项需要额外修改,在这种情况下,如果一条条重新添加肯定非常不友好,我们可以通过导入导出功能实现。
比如,我们将dev
环境下的配置先全选导出。
然后在test
环境中导入,文件上传后将直接导入配置,请务必谨慎操作!
通过克隆也可以达到相同的效果,不同的是克隆可以额外修改Data Id
和Group
信息。
历史/回滚
选择配置管理
的历史版本
页面,通过Data Id
和Group
查询历史,可以查看每个历史版本的详情,或选择回滚至该版本。
监听查询
Nacos 提供配置订阅者,也就是监听者查询能力,同时提供客户端当前配置的 MD5 校验值,以便帮助用户更好的检查配置变更以后是否推送到 Client 端。
选择配置管理
的监听查询
页面,通过配置或IP
、Data Id
和Group
查询。
权限控制
Nacos 提供了基于 RBAC 的权限控制,通过左侧权限控制
菜单的用户列表
、角色管理
、权限管理
实现,可以算是傻瓜式操作了,鼠标多点几下就会了。
公共配置
每个配置集对应一个应用,但是开发时我们可能会有一些公共配置被多个应用使用,这时候就需要扩展配置集或共享配置集来实现了。
扩展配置集
我们先创建三个配置集,如下:
Group: DEFAULT_GROUP Configuration format: YAML Configuration content: common.name: common-service Data ID: ext-config-common02.yaml Group: GLOBAL_GROUP Configuration format: YAML Configuration content: global.name: global-service Data ID: ext-config-common03.yaml Group: REFRESH_GROUP Configuration format: YAML Configuration content: refresh.name: refresh-serviceData ID: ext-config-common01.yaml
获取配置
配置文件
bootstrap.yml
port: 7070 # 端口 spring: application: name: product-service # 应用名称 cloud: nacos: config: enabled: true # 如果不想使用 Nacos 进行配置管理,设置为 false 即可 server-addr: 127.0.0.1:8848 # Nacos Server 地址 group: MALL_GROUP # 组,默认为 DEFAULT_GROUP file-extension: yaml # 配置内容的数据格式,默认为 properties namespace: 450a3f07-08ee-49f6-8213-9b04b06cd3cc # 对应 dev 环境 # 扩展配置集 ext-config[0]: data-id: ext-config-common01.yaml # 配置集 id ext-config[1]: data-id: ext-config-common02.yaml # 配置集 id group: GLOBAL_GROUP # 组,默认为 DEFAULT_GROUP ext-config[2]: data-id: ext-config-common03.yaml # 配置集 id group: REFRESH_GROUP # 组,默认为 DEFAULT_GROUP refresh: true # 是否支持动态刷新server:
总结:
通过配置spring.cloud.nacos.config.ext-config[n].data-id
来支持多个配置集。通过配置spring.cloud.nacos.config.ext-config[n].group
来定制配置组。如果未指定,则使用默认组。通过配置spring.cloud.nacos.config. config[n].refresh
来控制该配置集是否支持配置的动态刷新。默认情况下不支持。
控制层
使用 Spring 的@Value
注解来获取配置信息,${}
中对应 Nacos 配置中心配置内容的 key,:
后跟默认值。
并且通过 Spring Cloud 原生注解@RefreshScope
实现配置自动更新。
import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import java.util.HashMap; import java.util.Map; @RefreshScope @RestController public class ConfigController { @Value("${common.name:}") private String commonName; @Value("${global.name:}") private String globalName; @Value("${refresh.name:}") private String refreshName; @GetMapping("/extConfig") public MapgetExtConfig() { Map configMap = new HashMap(); configMap.put("commonName", commonName); configMap.put("globalName", globalName); configMap.put("refreshName", refreshName);return configMap; } }package org.example.controller;
测试
访问:http://localhost:7070/extConfig 结果如下:
共享配置集
通过共享配置集的方式也可以实现公共配置的功能,唯一的区别就是共享配置集无法设置组信息,只获取 DEFAULT_GROUP。具体实现方式如下:
port: 7070 # 端口 spring: application: name: product-service # 应用名称 cloud: nacos: config: enabled: true # 如果不想使用 Nacos 进行配置管理,设置为 false 即可 server-addr: 127.0.0.1:8848 # Nacos Server 地址 group: MALL_GROUP # 组,默认为 DEFAULT_GROUP file-extension: yaml # 配置内容的数据格式,默认为 properties namespace: 450a3f07-08ee-49f6-8213-9b04b06cd3cc # 对应 dev 环境 # 共享配置集 shared-dataids: ext-config-common01.yaml,ext-config-common02.yaml,ext-config-common03.yaml # 多个配置集逗号隔开 refreshable-dataids: ext-config-common01.yaml # 哪个配置集支持动态刷新server:
访问:http://localhost:7070/extConfig 结果如下:
配置优先级
Spring Cloud Alibaba Nacos Config 提供了三种从 Nacos 拉取配置的功能:
A:通过内部相关规则(应用名、配置内容的数据格式等)自动生成相关的 Data Id 配置;B:通过配置spring.cloud.nacos.config.ext-config[n].data-id
来支持多个配置集。同时配置多个配置集时,优先级关系根据n
的值决定,值越大,优先级越高;C:通过配置spring.cloud.nacos.config.shared-dataids
配置多个共享配置集;
当三种方式同时使用时,优先级关系为:A > B > C。
Nacos 集群环境搭建
集群模式跟我们平时进行扩容是一样的,可以通过 Nginx 转发到多个节点,如下图:
如果为了方便省事,可以使用直连 ip 模式,配置中按如下编写即可:
# 配置 Nacos 配置中心 cloud: nacos: config: enabled: true # 如果不想使用 Nacos 进行配置管理,设置为 false 即可 server-addr: 192.168.10.101:8848,192.168.10.102:8848,192.168.10.103:8848 # Nacos 服务器地址spring:
PS:如果只是为了学习的话直接在本地启动 3 个实例,通过修改端口的方式即可。本文使用三台服务器的方式带大家搭建环境,其实这种方式反而更简单。
环境准备
Nacos 单节点,也就是我们刚才使用的standalone
模式,默认使用嵌入式数据库实现数据的存储,不方便观察数据存储的基本情况,0.7 版本以后增加了支持 MySQL 数据源能力。集群搭建的时候我们需要将 Nacos 对接 Mysql 进行数据存储。如果要搭建高可用的集群环境,至少要满足以下条件:
JDK 1.8+;Maven 3.2.x+;MySQL 5.6.5+(生产使用建议至少主备模式,或者采用高可用数据库);3个或3个以上Nacos节点才能构成集群。
下载源码或者安装包
可以通过源码和发行包两种方式来获取 Nacos。
源码方式
从 Github 上下载源码方式。
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/bingit clone /alibaba/nacos.git
发行包方式
您可以从 /alibaba/nacos/releases 下载最新稳定版本的nacos-server
包。
配置集群配置文件
将安装包解压。
tar -zxvf nacos-server-1.3.0.tar.gz -C /usr/local/ # 解压文件至 local 目录
在 Nacos 的解压目录nacos/conf
目录下,复制配置文件cluster.conf.example
并重命名为cluster.conf
,每行配置成ip:port
。(请配置3个或3个以上节点)
192.168.10.102:8848 192.168.10.103:8848192.168.10.101:8848
配置 MySQL 数据库
Nacos 在0.7
版本之前,默认使用的是嵌入式数据库Apache Derby
来存储数据(内嵌的数据库会随着 Nacos 一起启动,无需额外安装);0.7
版本及以后,增加了对MySQL
数据源的支持。
MySQL数据源
环境要求:MySQL 5.6.5+(生产使用建议至少主备模式,或者采用高可用数据库);
初始化 MySQL 数据库
创建数据库nacos_config
。
SQL源文件地址:/alibaba/nacos/blob/master/distribution/conf/nacos-mysql.sql ,或者在nacos-server
解压目录conf
下,找到nacos-mysql.sql
文件,运行该文件,结果如下:
application.properties 配置
修改nacos/conf/application.properties
文件的以下内容。
最终修改结果如下:
### If user MySQL as datasource: # 指定数据源为 MySQL spring.datasource.platform=mysql ### Count of DB: # 数据库实例数量 db.num=1 # 数据库连接信息,如果是 MySQL 8.0+ 版本需要添加 serverTimezone=Asia/Shanghai ### Connect URL of DB: db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&serverTimezone=Asia/Shanghai db.user=root db.password=1234#*************** Config Module Related Configurations ***************#
❝如果你和我一样使用的是 MySQL 8.0+ 版本,那么启动 Nacos 时肯定会报错。莫慌,在 Nacos 安装目录下新建
plugins/mysql
文件夹,并放入 8.0+ 版本的 mysql-connector-java-8.0.xx.jar,重启 Nacos 即可,启动时会提示更换了 MySQL 的 driver-class 类。❞
启动服务器
Linux/Unix/Mac
在 Nacos 的解压目录nacos/bin
目录下启动。
启动命令(在没有参数模式,是集群模式):
sh startup.sh
查看启动记录
可通过/nacos/logs/nacos.log
(详细日志)或/nacos/conf/start.out
(启动记录)的输出内容查看是否启动成功。
查看命令:
tail -f /usr/local/nacos/logs/start.out
启动成功输出结果:
-04-29 22:47:56,556 INFO Nacos logs files: /usr/local/nacos/logs/ -04-29 22:47:56,556 INFO Nacos conf files: /usr/local/nacos/conf/ -04-29 22:47:56,556 INFO Nacos data files: /usr/local/nacos/data/ -04-29 22:47:56,556 INFO Nacos started successfully in cluster mode.-04-29 22:47:56,204 INFO Nacos is starting...
访问
访问以下链接,默认用户名/密码是 nacos/nacos :
http://192.168.10.101:8848/nacos/http://192.168.10.102:8848/nacos/http://192.168.10.103:8848/nacos/
从下图可以看到集群节点共有三个,其中192.168.10.101:8848
为leader
。
关闭服务器
Linux/Unix/Mac
sh shutdown.sh
测试
直连 ip 模式
发布配置
选择配置管理
的配置列表
页面,点击最右侧+
按钮新建配置。
Group: DEFAULT_GROUP Configuration format: YAML Configuration content: project.name: SpringCloudAlibaba : AliababaData ID: product-service.yaml
获取配置
bootstrap.yml
port: 7070 # 端口 spring: application: name: product-service # 应用名称 cloud: nacos: config: enabled: true # 如果不想使用 Nacos 进行配置管理,设置为 false 即可 server-addr: 192.168.10.101:8848,192.168.10.102:8848,192.168.10.103:8848 # Nacos 服务器地址,集群版直连 ip 模式 group: DEFAULT_GROUP # 组,默认为 DEFAULT_GROUP file-extension: yaml # 配置内容的数据格式,默认为 propertiesserver:
使用之前的控制层代码,访问:http://localhost:7070/config 结果如下:
Nginx 转发
再启动一台服务器192.168.10.100
,安装 Nginx,配置代理转发规则。
server 192.168.10.101:8848; server 192.168.10.102:8848; server 192.168.10.103:8848; }upstream nacos {
获取配置
bootstrap.yml
port: 7070 # 端口 spring: application: name: product-service # 应用名称 cloud: nacos: config: enabled: true # 如果不想使用 Nacos 进行配置管理,设置为 false 即可 server-addr: 192.168.10.100:80 # Nacos 服务器地址,集群版 Nginx 转发 group: DEFAULT_GROUP # 组,默认为 DEFAULT_GROUP file-extension: yaml # 配置内容的数据格式,默认为 propertiesserver:
使用之前的控制层代码,访问:http://localhost:7070/config 结果如下:
至此 Nacos 配置中心所有的知识点就讲解结束了。
微信扫描二维码(长按识别)关注我的公众号