Nacos配置中心

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: Nacos配置中心

1.引言

上一节我们借助于Nacos实现注册中心,完美替换了Eureka在项目之初的功能,开始本章节之前我们一起回忆下Nacos实现注册中心的关键步骤

  1. 引入springcloud-alibaba/nacos-discovery依赖
  2. 去除原eureka依赖、去除配置文件中eureka注册信息
  3. 新增nacos注册信息:spring.cloud.nacos.server-addr:localhost:8848
  4. 重启项目并验证

在此基础之上我们验证了Nacos的负载均衡策略、权重控制、环境隔离等信息,希望大家还能有点印象。

2.为什么需要配置中心

试想最初的单体应用到如今的微服务部署(服务可能上百个),配置文件从修改到重启完成,服务中断可以按分钟计。以笔者负责应用为例,当数十数百个应用都需要修改配置,每个都重启部署的时候,服务中断将不再是可估算的现象。

因此我们需要一个类似注册中心的中间件,将配置中心从应用中解耦,应用不再是完全读取本地配置(部分不会频繁热更新的参数仍应用自身维护),而是直接拉取配置中心的信息作为应用参数,后续执行自己的业务流程。

下图为Nacos实现原理图:

但是引入配置中心的同时,我们不免思考一些Nacos已经遇到过、并成功解决的问题:

  • 配置中心挂了怎么办?
  • 谁负责将配置变更同步给应用?pull?push?
  • 配置中心本身多节点部署,自身数据不同步又该如何解决呢?

Nacos是如何解决这些问题的,读者们可以参见上一节:Nacos白皮书或等笔者后续给出分析,基于上述背景,我们本章节将借助Nacos带领大家实现一个配置中心。

3.Nacos实现配置中心

3.1 新增配置信息

Nacos实现配置中心较为简单,首先在服务端新增一个配置信息(profile指项目运行环节:dev/test/pro)

注意:此处笔者新增在public空间下,如有部分读者是dev添加,则对应需要追加namespace(参见上节)

3.2 微服务拉取配置信息

配置完成之后,下一步就是在应用中拉取到刚才的配置信息。回顾我们原来的应用启动过程,应用启动时会读取本地配置文件application.yml,nacos也不例外他会将nacos配置信息同application.yml中的信息合并输出。那么问题来了:如果应用不能先读取到nacos配置信息(nacos地址-->配置信息)又怎么合并到一起呢?因此Spring引入一个新的配置文件:bootstarp.yaml文件,其读取顺序要优先于application.yml文件,如下:

1.引入nacos-config依赖

在user-service中新增nacos-config依赖

<!--nacos配置管理依赖-->
<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

2.新增bootstrap.yaml文件

在user-service中新增配置文件:bootstrap.yaml,内容如下:

spring:
  application:
    name: userservice # 服务名称
  profiles:
    active: dev # 当前使用dev环境
  cloud:
    nacos:
      server-addr: localhost:8848
      config:
        file-extension: yaml # 文件后缀名

此时应用就会使用以下规则作为文件的DataId匹配对应的配置文件:{spring.application.name}-${spring.procile.active}.${spring.cloud.nacos.config.file-extension}

以本例为准读取的即为:userservice-dev.yaml

3.应用读取nacos配置

对于nacos的配置其使用也做到了开箱即用,只需借助@Value注解即可,我们做如下添加

访问应用发现即生效

4.Nacos配置热更新

如果只是做到了配置中心,显然对于Nacos的配置中心的能力是有所低估的,nacos可以做到毫秒级配置热更新,其实现也有多种方式。

1.@RefreshScope

在@Value注入变量所在类上增加@RefreshScope即可,代码如下:

修改后我们重启应用并发完一次,发现访问效果没变,此时我们修改配置文件如下,并点击发布:

注意:此时我们做了两件事情:①修改配置 ②发布配置,但是没有重启应用

再次访问,发现配置已及时生效,如下所示,感兴趣的也可以做更多格式的尝试,会发现都是及时生效

实际当用户修改配置文件时,nacos会通知客户端此时配置更新,日志如下:

如果有读者对@RefreshScope的热更新感兴趣,可移步至:@RefreshScope热更新原理

2.@ConfigurationProperties注解替代@Value

我们在user-service工程中新增一个配置类,用于读取此例中配置信息,代码如下:

package cn.itcast.user.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
 * 配置读取类
 *
 * @author 
 * @date 2023-01-01 21:53
 */
@Data
@Component
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
    private String dateformat;
}

需注意,此配置类我们约定死了配置的前缀,即默认:约定大于配置,后续此配置类将只获取pattern开头的配置信息,通过拼接属性值得到完整的配置信息,此例中即:前缀(pattern)+ 属性(dateformat),通过此唯一key去nacos获取配置信息。重启应用后发现同样生效。

5.Nacos配置共享

对于微服务部署情况下,每个应用都会配置多个环境的配置文件,通过不同环境的active标识获取指定环境的配置信息,但也存在部分配置文件没有profile信息,例如:

  • [spring.application.name]-[spring.profiles.active].yaml,例如:userservice-dev.yaml
  • [spring.application.name].yaml,例如:userservice.yaml

此时[spring.application.name].yaml 因不包含环境信息,将被多个环境所共享。下面我们实例展示

1.添加共享文件配置

在nacos服务端新增一个:userservice.yaml文件,此文件没标识任何环境信息

2.服务读取共享配置

首先在配置文件类中增加新增配置内容

接着我们新增一个http接口,用来访问整个配置信息

此时我们修改8081、8082两个启动类环境配置信息如下:

因我们目前只有dev、公共两部分配置信息,所以profile=dev可以读取到dev + 共享,而profile=test的因没有test配置信息,因此只能读取共享信息。验证生效,效果如下:

6.Nacos配置共享优先级

对于本地配置、共享配置、服务名-profile配置优先级有如下规则关系:

为了验证效果,我们同时在三个文件中增加一组配置信息,并进行验证:

  • 本地新增

  • userservice.yaml新增并发布

  • userservice-dev.yaml新增

  • 在代码中新增属性值,重启服务

  • 验证效果如下

7.搭建Nacos集群

虽然前面我们对Nacos的功能和特性做了详细的论述和实战,然而对于Nacos本身的架构部署,我们却一直采用单点,对于一个新引入的中间件来说,如果它自身就不能保证高可用,那么对于整体架构而言它就是有待商榷的。因此在Nacos功能学习的最后一章节,我们将会搭建一个Nacos集群,模拟真实的生产Nacos情况。

1.架构模型

对于Nacos集群的部署情况,Nacos官方给出如下架构图:

即部署nacos对应三个节点,同时借助负载均衡代理3个nacos节点,实现整体高可用。本节中我们将借助于Nginx实现负载均衡,架构模型如下(MySQL此案例中采用单实例模拟):

3个节点对应ip、端口如下

节点

IP

端口

nacos1

本地ip

8845

nacos2

本地ip

8846

nacos3

本地ip

8847

2.集群搭建

搭建整体步骤如下,我们将依次展开

  • 初始化nacos数据库表结构
  • 下载nacos安装包并配置启动参数(IP/端口)
  • 启动nacos集群
  • nginx实现反向代理

2.1 初始化数据库表

Nacos官方默认数据存储采用内嵌数据库Derby,不属于生产可用的数据库。官方推荐最佳实践是使用支持主从的高可用数据库集群,如有兴趣可以进一步学习:黑马程序员-MySQL高阶教程,此例中为方便实践采用单点模式,我们新建一个nacos数据库,导入下面的DDL、DML语句

CREATE TABLE `config_info` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(255) DEFAULT NULL,
  `content` longtext NOT NULL COMMENT 'content',
  `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  `src_user` text COMMENT 'source user',
  `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
  `app_name` varchar(128) DEFAULT NULL,
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  `c_desc` varchar(256) DEFAULT NULL,
  `c_use` varchar(64) DEFAULT NULL,
  `effect` varchar(64) DEFAULT NULL,
  `type` varchar(64) DEFAULT NULL,
  `c_schema` text,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info';
/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info_aggr   */
/******************************************/
CREATE TABLE `config_info_aggr` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(255) NOT NULL COMMENT 'group_id',
  `datum_id` varchar(255) NOT NULL COMMENT 'datum_id',
  `content` longtext NOT NULL COMMENT '内容',
  `gmt_modified` datetime NOT NULL COMMENT '修改时间',
  `app_name` varchar(128) DEFAULT NULL,
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfoaggr_datagrouptenantdatum` (`data_id`,`group_id`,`tenant_id`,`datum_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='增加租户字段';
/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info_beta   */
/******************************************/
CREATE TABLE `config_info_beta` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  `content` longtext NOT NULL COMMENT 'content',
  `beta_ips` varchar(1024) DEFAULT NULL COMMENT 'betaIps',
  `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  `src_user` text COMMENT 'source user',
  `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfobeta_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_beta';
/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info_tag   */
/******************************************/
CREATE TABLE `config_info_tag` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
  `tag_id` varchar(128) NOT NULL COMMENT 'tag_id',
  `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  `content` longtext NOT NULL COMMENT 'content',
  `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  `src_user` text COMMENT 'source user',
  `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfotag_datagrouptenanttag` (`data_id`,`group_id`,`tenant_id`,`tag_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_tag';
/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_tags_relation   */
/******************************************/
CREATE TABLE `config_tags_relation` (
  `id` bigint(20) NOT NULL COMMENT 'id',
  `tag_name` varchar(128) NOT NULL COMMENT 'tag_name',
  `tag_type` varchar(64) DEFAULT NULL COMMENT 'tag_type',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
  `nid` bigint(20) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`nid`),
  UNIQUE KEY `uk_configtagrelation_configidtag` (`id`,`tag_name`,`tag_type`),
  KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_tag_relation';
/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = group_capacity   */
/******************************************/
CREATE TABLE `group_capacity` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `group_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Group ID,空字符表示整个集群',
  `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
  `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
  `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
  `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数,,0表示使用默认值',
  `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
  `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_group_id` (`group_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='集群、各Group容量信息表';
/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = his_config_info   */
/******************************************/
CREATE TABLE `his_config_info` (
  `id` bigint(64) unsigned NOT NULL,
  `nid` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `data_id` varchar(255) NOT NULL,
  `group_id` varchar(128) NOT NULL,
  `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  `content` longtext NOT NULL,
  `md5` varchar(32) DEFAULT NULL,
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `src_user` text,
  `src_ip` varchar(50) DEFAULT NULL,
  `op_type` char(10) DEFAULT NULL,
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  PRIMARY KEY (`nid`),
  KEY `idx_gmt_create` (`gmt_create`),
  KEY `idx_gmt_modified` (`gmt_modified`),
  KEY `idx_did` (`data_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='多租户改造';
/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = tenant_capacity   */
/******************************************/
CREATE TABLE `tenant_capacity` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `tenant_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Tenant ID',
  `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
  `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
  `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
  `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数',
  `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
  `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='租户容量信息表';
CREATE TABLE `tenant_info` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `kp` varchar(128) NOT NULL COMMENT 'kp',
  `tenant_id` varchar(128) default '' COMMENT 'tenant_id',
  `tenant_name` varchar(128) default '' COMMENT 'tenant_name',
  `tenant_desc` varchar(256) DEFAULT NULL COMMENT 'tenant_desc',
  `create_source` varchar(32) DEFAULT NULL COMMENT 'create_source',
  `gmt_create` bigint(20) NOT NULL COMMENT '创建时间',
  `gmt_modified` bigint(20) NOT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_tenant_info_kptenantid` (`kp`,`tenant_id`),
  KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='tenant_info';
CREATE TABLE `users` (
  `username` varchar(50) NOT NULL PRIMARY KEY,
  `password` varchar(500) NOT NULL,
  `enabled` boolean NOT NULL
);
CREATE TABLE `roles` (
  `username` varchar(50) NOT NULL,
  `role` varchar(50) NOT NULL,
  UNIQUE INDEX `idx_user_role` (`username` ASC, `role` ASC) USING BTREE
);
CREATE TABLE `permissions` (
    `role` varchar(50) NOT NULL,
    `resource` varchar(255) NOT NULL,
    `action` varchar(8) NOT NULL,
    UNIQUE INDEX `uk_role_permission` (`role`,`resource`,`action`) USING BTREE
);
INSERT INTO users (username, password, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE);
INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');

2.2 下载安装包并配置启动参数

nacos下载安装,可以参照前面课程:Nacos下载安装,如不想下载可直接采用本教程安装包:📎nacos-server-1.4.1.zip

1.解压安装包

注意:nacos文件夹路径不允许包含中文,否则运行异常

上述文件夹中bin主要包含:启动、停止脚本;config包含:配置文件

2.更改cluster.conf.example

  • 修改文件名称:cluster.conf.example --> cluster.conf

  • 编辑cluster.conf,新增以下配置,此处IP以自己本地ip为准(在cmd控制台可使用ipconfig指令查看对应IPv4地址)
192.168.125.121:8845
192.168.125.121:8846
192.168.125.121:8847

此时启动会发现会因数据库连接失败而启动失败,因此下一步我们需要配置nacos数据源

3.配置nacos数据源

在nacos-config文件夹中编辑:application.properties,会发现下面一段注释信息,因此我们接下来需要修改的就是此处

放开注释并修改为本地连接,以笔者为例,此处如下,读者们需以自己mysql本地端口、用户名、密码为准进行修改。修改后保存、重启nacos

#*************** 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?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=root

2.3 启动nacos集群

基于上述步骤,我们完成一个nacos节点的更改,但是细心的同学应该可以发现目前还存在两个问题:

  • nacos默认启动端口:8848,我们集群中3个节点没有此端口,并且我们尚未修改
  • 3个nacos节点,当前我们只完成了一个,还剩余两个尚未修改

因此接下来,我们重命名nacos文件夹为:nacos1,并基于nacos1复制出:nacos2、nacos3,然后修改每个文件夹中的启动端口,如下:

  • nacos1文件下,application.properties --> server.port=8845
  • nacos2文件下,application.properties --> server.port=8846
  • nacos3文件下,application.properties --> server.port=8847

最后我们分别启动3个nacos节点,启动方式同单个启动无差异

注意:前面我们启动nacos指令为:startup.cmd -m standalone,即为单机启动,此时启动直接启动startup.cmd即可,此时启动为集群启动,通过查看下面启动日志也可以看到是以集群方式启动。

此时我们访问任意端口的nacos均能发现3个节点信息

2.4 nginx反向代理

解压此安装包到任意非中文目录:📎nginx-1.18.0.zip,修改:nginx-1.18.0/conf/nginx.conf文件,在http模块中加入以下配置

upstream nacos-cluster {
    server 127.0.0.1:8845;
    server 127.0.0.1:8846;
    server 127.0.0.1:8847;
  }
server {
  listen       80;
  server_name  localhost;
  location /nacos {
    proxy_pass http://nacos-cluster;
  }
}

如下图所示:

其中upstream后nacos-cluster为配置项名称KEY,我们给三个ip+端口配置进去VALUE,当访问localhost:80端口 + /nacos后,就自动对访问路径http://key中key对应的value做负载均衡。

我们启动nginx(nginx目录下 start nginx.exe)后访问:http://localhost/nacos,会发现负载均衡配置成功。

3.应用接入

当访问入口从单个nacos应用变成Nginx后,我们对应的注册地址也将发生变化:

修改后重启应用,会发现服务依然注册成功,如下:

8.总结

本章节我们针对Nacos作为配置中心的功能特性做了实战性演练,同时针对Nacos实际部署情况做了一个集群搭建演示,但同时这个集群搭建也给我们预留了一些更多的思考

  • Nginx代理本身localhost这种IP应该变成域名,这样后续及时有服务迁移,nacos客户端也无需修改配置
  • Nacos的多节点部署应考虑异地容灾,同城备份,从而保证服务的高可用性

在本章节需要大家重点关注Nacos实现配置中心的步骤、热更新的实现方式,以及多配置文件的优先级顺序(后续生产发现配置信息读取不一致可借助此进行排查),集群搭建一般会运维团队搭建但也不排除大家自己上手的可能性。

截止本节,完整代码工程:📎cloud-demo.zip


思考问题

  • 为什么微服务架构下需要引入配置中心?
  • Nacos配置中心如何实现?共享特性?优先级?
  • Nacos集群搭建事项?解决了什么问题?

9.推荐阅读资料

  • 无,建议对于上节注册中心,本节Nacos配置使用、集群搭建做进一步练习和熟悉
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
5月前
|
Java Nacos 数据库
使用 nacos 搭建注册中心及配置中心
使用 nacos 搭建注册中心及配置中心
102 5
|
5月前
|
NoSQL Java Nacos
SpringCloud集成Seata并使用Nacos做注册中心与配置中心
SpringCloud集成Seata并使用Nacos做注册中心与配置中心
154 3
|
20天前
|
监控 Java 测试技术
Nacos 配置中心变更利器:自定义标签灰度
本文是对 MSE Nacos 应用自定义标签灰度的功能介绍,欢迎大家升级版本进行试用。
|
24天前
|
网络安全 Nacos 开发者
Nacos作为流行的微服务注册与配置中心,“节点提示暂时不可用”是常见的问题之一
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。然而,“节点提示暂时不可用”是常见的问题之一。本文将探讨该问题的原因及解决方案,帮助开发者快速定位并解决问题,确保服务的正常运行。通过检查服务实例状态、网络连接、Nacos配置、调整健康检查策略等步骤,可以有效解决这一问题。
34 4
|
24天前
|
Java 网络安全 Nacos
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。然而,实际使用中常遇到“客户端不发送心跳检测”的问题。本文深入探讨该问题的原因及解决方案,帮助开发者快速定位并解决问题,确保服务正常运行。通过检查客户端配置、网络连接、日志、版本兼容性、心跳策略、注册状态、重启应用和环境变量等步骤,系统地排查和解决这一问题。
45 3
|
24天前
|
安全 Nacos 数据库
Nacos是一款流行的微服务注册与配置中心,但直接暴露在公网中可能导致非法访问和数据库篡改
Nacos是一款流行的微服务注册与配置中心,但直接暴露在公网中可能导致非法访问和数据库篡改。本文详细探讨了这一问题的原因及解决方案,包括限制公网访问、使用HTTPS、强化数据库安全、启用访问控制、监控和审计等步骤,帮助开发者确保服务的安全运行。
31 3
|
1月前
|
SQL 关系型数据库 数据库连接
"Nacos 2.1.0版本数据库配置写入难题破解攻略:一步步教你排查连接、权限和配置问题,重启服务轻松解决!"
【10月更文挑战第23天】在使用Nacos 2.1.0版本时,可能会遇到无法将配置信息写入数据库的问题。本文将引导你逐步解决这一问题,包括检查数据库连接、用户权限、Nacos配置文件,并提供示例代码和详细步骤。通过这些方法,你可以有效解决配置写入失败的问题。
56 0
|
3月前
|
负载均衡 Java Nacos
SpringCloud基础2——Nacos配置、Feign、Gateway
nacos配置管理、Feign远程调用、Gateway服务网关
SpringCloud基础2——Nacos配置、Feign、Gateway
|
4月前
|
安全 Nacos 数据安全/隐私保护
升级指南:从Nacos 1.3.0 到 2.3.0,并兼容 Seata 的鉴权配置
本文详细介绍了如何在微服务环境下从 Nacos 1.3.0 升级到 2.3.0,并确保 Seata 各版本的兼容性。作者小米分享了升级过程中的关键步骤,包括备份配置、更新鉴权信息及验证测试等,并解答了常见问题。通过这些步骤,可以帮助读者顺利完成升级并提高系统的安全性与一致性。
129 8
升级指南:从Nacos 1.3.0 到 2.3.0,并兼容 Seata 的鉴权配置
|
4月前
|
运维 Java Nacos
Spring Cloud应用框架:Nacos作为服务注册中心和配置中心
Spring Cloud应用框架:Nacos作为服务注册中心和配置中心