Nacos配置管理和Nacos集群配置

news2024/11/24 6:38:56

目录

Nacos作为配置中心实现配置管理

统一配置管理 

如何在nocas添加配置文件

在微服务拉取nacos配置中心的配置 

1)引入nacos-config依赖

2)添加bootstrap.yaml

 3)测试,读取nacos配置中心中配置文件的内容

​编辑 总结:实现nacos配置管理的步骤

配置热更新 

方式一 

方式二

配置共享

 多种配置文件的优先级(优先加载哪个文件属性的内容)

服务多环境共享同一个配置文件 

使用dev环境启动user-service服务

使用test环境启动user-service服务

nacos搭建集群

单例nacos存在的问题

nacos客户端如何知道要nacos集群的哪一个地址呢?

搭建集群步骤:

 1.初始化数据库

2.创建一个nacos_cluster文件夹

 3.然后进入application.properties文件中配置当前nacos实例的ip端口和数据源连接信息

4.复制两份出来,然后在各自的application.properties文件中修改端口号为8846,8847

​编辑 5.分别在三个文件夹中的bin目录下输入

6.配置集群成功

使用nginx反向代理nacos集群 

在微服务中修改连接nacos的端口号,修改为nginx的80端口号,连接nacos默认会加上/nacos


Nacos作为配置中心实现配置管理

Nacos除了可以做注册中心,同样可以做配置管理来使用。

什么是配置中心,就是统一管理所有微服务实例的配置文件的文件 

统一配置管理 

当微服务部署的实例越来越多,达到数十、数百时,逐个修改微服务配置就会让人抓狂,而且很容易出错。我们需要一种统一配置管理方案,可以集中管理所有实例的配置。 

 Nacos一方面可以将配置集中管理,另一方可以在配置变更时,及时通知微服务,实现配置的热更新。

如何在nocas添加配置文件

 

Date ID写的是服务名字-[profile].yaml

这里的配置内容写了时间的格式 

注意:项目的核心配置,需要热更新的配置才有放到nacos管理的必要。基本不会变更的一些配置还是保存在微服务本地比较好。 

在微服务拉取nacos配置中心的配置 

微服务要拉取nacos中管理的配置,并且与本地的application.yml配置合并,才能完成项目启动。

但如果尚未读取application.yml,又如何得知nacos地址呢?

因此spring引入了一种新的配置文件:bootstrap.yaml文件(通过里面的配置内容得知nacos地址,并拉取配置文件的信息),会在application.yml之前被读取,流程如下:

1)引入nacos-config依赖

首先,在user-service服务中,引入nacos-config的客户端依赖:

一个是把nacos作为注册中心的客户端依赖,一个是把nacos作为配置中心的依赖

<!--        导入nacos的客户端依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--nacos配置管理依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

2)添加bootstrap.yaml

然后,在user-service中添加一个bootstrap.yaml文件,内容如下:

通过这个bootstrap.yml文件配置的内容可以知道要拉取nacos配置中心的哪一个配置文件(微服务名字,开发环境,文件后缀名)

根据spring.cloud.nacos.server-addr获取nacos地址,再根据

${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}作为文件id,来读取配置。

spring:
  application:
    name: user-service #微服务的名字
  profiles:
    active: dev #指定开发环境
  cloud:
    nacos:
      server-addr: localhost:8848 #指定要连接的nacos的地址
      config:
        file-extension: yaml #文件的后缀名

注意:原来的application.yml文件中的相同的配置可以注释掉

server:
  port: 8081
spring:
  datasource:
    url: jdbc:mysql://192.168.230.100:3306/cloud_user??useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false
    username: root
    password: 1234
    driver-class-name: com.mysql.jdbc.Driver
#  application:
#    name: user-service
#  cloud:
#    nacos:
#      server-addr: localhost:8848
#      discovery:
#        cluster-name: TJ #让这个user-service实例加入TJ集群
#        namespace: 7bd1f533-2ffc-4b86-96cf-c07383361a6d #命名空间id
#mybatis:
#  type-aliases-package: cn.itcast.user.pojo
#  configuration:
#    map-underscore-to-camel-case: true

 3)测试,读取nacos配置中心中配置文件的内容

在user-service中的UserController中添加业务逻辑,读取pattern.dateformat配置:

    @Value("${pattern.format}")
    private String dateformat;
    @GetMapping("/now")
    public String nowTime(){
        //获取当前时间并格式化成特定字符串形式返回
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));
    }

 启动之后访问成功

如果拉取nacos配置中心的配置文件失败时,就会报错,无法识别yml文件pattern.format的属性

 总结:实现nacos配置管理的步骤

1.在nacos中添加配置文件

2.在微服务中引入nacos的config依赖

3.在微服务中添加bootstrap.yml文件,配置nacos地址,当前环境,服务名称,文件后缀名,这些就可以决定这个程序去nacos配置中心读取哪一个配置文件的内容

配置热更新 

我们最终的目的,是修改nacos中的配置后,微服务中无需重启即可让配置生效,也就是配置热更新

要实现配置热更新,可以使用两种方式:

方式一 

在@Value注入的变量所在类上添加注解@RefreshScope:

@Slf4j
@RestController
@RequestMapping("/user")
@RefreshScope
public class UserController {
    @Value("${pattern.format}")
    private String dateformat;
    @GetMapping("/now")
    public String nowTime(){
        //获取当前时间并格式化成特定字符串形式返回
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));
    }
}

 修改nacos配置中心配置文件后重新发布

方式二

使用@ConfigurationProperties注解进行实体类与配置文件相互映射

代替@Value注解。

在user-service服务中,添加一个类,读取patterrn.dateformat属性:

/**
 * 与nacos配置中心的配置文件的pattern属性相互映射
 */
@Data
@ConfigurationProperties(prefix = "pattern")
@Component//把这个类交给spring管理,维护为bean
public class DateTimeFormatVO {
    private String format;
}
@Autowired
    private DateTimeFormatVO dateformat;
    @GetMapping("/now")
    public String nowTime(){
        //获取当前时间并格式化成特定字符串形式返回
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat.getFormat()));
    }

配置共享

其实微服务启动时,会去nacos读取多个配置文件,例如:

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

  • [spring.application.name].yaml,例如:userservice.yaml

[spring.application.name].yaml不包含环境

因此无论profile如何变化,服务名字.yaml文件的内容一定会被加载,因此可以被多个环境共享。

 多种配置文件的优先级(优先加载哪个文件属性的内容)

如果这些配置文件中有相同的key(如 pattern.format=XXX),则按照优先级决定使用哪个文件的key的内容 

服务名字-profile.yaml>服务名字.yaml>本地配置的yml文件

服务多环境共享同一个配置文件 

 

/**
 * 与nacos配置中心的配置文件的pattern属性相互映射
 */
@Data
@ConfigurationProperties(prefix = "pattern")
@Component//把这个类交给spring管理,维护为bean
public class DateTimeFormatVO {
    private String format;
    private String commonProperties;
}
   @Autowired
    private DateTimeFormatVO dateformat;
    @GetMapping("/now")
    public String nowTime(){
        System.out.println(dateformat.getCommonProperties());
        //获取当前时间并格式化成特定字符串形式返回
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat.getFormat()));
    }

使用dev环境启动user-service服务

可以访问user-service-dev.yaml配置文件的值

spring:
  application:
    name: user-service #微服务的名字
  profiles:
    active: test #指定开发环境
  cloud:
    nacos:
      server-addr: localhost:8848 #指定要连接的nacos的地址
      config:
        file-extension: yaml #文件的后缀名

 使用dev环境启动user-service服务,可以获取pattern属性中的format,commonProperties值

时间的格式是user-service-dev.yaml配置文件中的pattern.format的值,可以发现优先级高

使用test环境启动user-service服务

spring:
  application:
    name: user-service #微服务的名字
  profiles:
    active: test #指定开发环境
  cloud:
    nacos:
      server-addr: localhost:8848 #指定要连接的nacos的地址
      config:
        file-extension: yaml #文件的后缀名

 可以同时获取pattern属性中的commonProperties值,和获取format属性值

然后format属性值为user-service.ymal公共配置文件的值,因为test环境不能访问user-service-dev.yaml配置文件的值

nacos搭建集群

单例nacos存在的问题

 单例nacos存在的问题:一旦这个nacos服务端down掉,那么nacos就会失去作用,所以我们可以搭建nacos集群

还存在的问题:重启nacos服务后,配置中心中的配置文件都会消失,所以我们可以创建一个数据库,来存储nacos的配置中心和注册中心的信息,一但重启nacos就去数据库中读取之前存入的信息

nacos客户端如何知道要nacos集群的哪一个地址呢?
 

所以我们可以使用nginx实现反向代理 ,具体的图解如下:

 

搭建集群步骤:

  • 搭建数据库,初始化数据库表结构
  • 下载nacos安装包
  • 配置nacos
  • 启动nacos集群
  • nginx反向代理

 1.初始化数据库

Nacos默认数据存储在内嵌数据库Derby中,不属于生产可用的数据库。

首先新建一个数据库,命名为nacos,而后导入uwu下面的SQL:

/*
 Navicat Premium Data Transfer

 Source Server         : local
 Source Server Type    : MySQL
 Source Server Version : 50622
 Source Host           : localhost:3306
 Source Schema         : nacos

 Target Server Type    : MySQL
 Target Server Version : 50622
 File Encoding         : 65001

 Date: 09/07/2021 09:40:13
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for config_info
-- ----------------------------
DROP TABLE IF EXISTS `config_info`;
CREATE TABLE `config_info`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'data_id',
  `group_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
  `content` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'content',
  `md5` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NULL 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 CHARACTER SET utf8 COLLATE utf8_bin NULL COMMENT 'source user',
  `src_ip` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'source ip',
  `app_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
  `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT '租户字段',
  `c_desc` varchar(256) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
  `c_use` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
  `effect` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
  `type` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
  `c_schema` text CHARACTER SET utf8 COLLATE utf8_bin NULL,
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `uk_configinfo_datagrouptenant`(`data_id`, `group_id`, `tenant_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = 'config_info' ROW_FORMAT = Compact;

-- ----------------------------
-- Records of config_info
-- ----------------------------

-- ----------------------------
-- Table structure for config_info_aggr
-- ----------------------------
DROP TABLE IF EXISTS `config_info_aggr`;
CREATE TABLE `config_info_aggr`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'data_id',
  `group_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'group_id',
  `datum_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'datum_id',
  `content` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '内容',
  `gmt_modified` datetime NOT NULL COMMENT '修改时间',
  `app_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
  `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT '租户字段',
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `uk_configinfoaggr_datagrouptenantdatum`(`data_id`, `group_id`, `tenant_id`, `datum_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = '增加租户字段' ROW_FORMAT = Compact;

-- ----------------------------
-- Records of config_info_aggr
-- ----------------------------

-- ----------------------------
-- Table structure for config_info_beta
-- ----------------------------
DROP TABLE IF EXISTS `config_info_beta`;
CREATE TABLE `config_info_beta`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'group_id',
  `app_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'app_name',
  `content` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'content',
  `beta_ips` varchar(1024) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'betaIps',
  `md5` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NULL 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 CHARACTER SET utf8 COLLATE utf8_bin NULL COMMENT 'source user',
  `src_ip` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'source ip',
  `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT '租户字段',
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `uk_configinfobeta_datagrouptenant`(`data_id`, `group_id`, `tenant_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = 'config_info_beta' ROW_FORMAT = Compact;

-- ----------------------------
-- Records of config_info_beta
-- ----------------------------

-- ----------------------------
-- Table structure for config_info_tag
-- ----------------------------
DROP TABLE IF EXISTS `config_info_tag`;
CREATE TABLE `config_info_tag`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'group_id',
  `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT 'tenant_id',
  `tag_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'tag_id',
  `app_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'app_name',
  `content` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'content',
  `md5` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NULL 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 CHARACTER SET utf8 COLLATE utf8_bin NULL COMMENT 'source user',
  `src_ip` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'source ip',
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `uk_configinfotag_datagrouptenanttag`(`data_id`, `group_id`, `tenant_id`, `tag_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = 'config_info_tag' ROW_FORMAT = Compact;

-- ----------------------------
-- Records of config_info_tag
-- ----------------------------

-- ----------------------------
-- Table structure for config_tags_relation
-- ----------------------------
DROP TABLE IF EXISTS `config_tags_relation`;
CREATE TABLE `config_tags_relation`  (
  `id` bigint(20) NOT NULL COMMENT 'id',
  `tag_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'tag_name',
  `tag_type` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'tag_type',
  `data_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'group_id',
  `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT 'tenant_id',
  `nid` bigint(20) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`nid`) USING BTREE,
  UNIQUE INDEX `uk_configtagrelation_configidtag`(`id`, `tag_name`, `tag_type`) USING BTREE,
  INDEX `idx_tenant_id`(`tenant_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = 'config_tag_relation' ROW_FORMAT = Compact;

-- ----------------------------
-- Records of config_tags_relation
-- ----------------------------

-- ----------------------------
-- Table structure for group_capacity
-- ----------------------------
DROP TABLE IF EXISTS `group_capacity`;
CREATE TABLE `group_capacity`  (
  `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `group_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin 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`) USING BTREE,
  UNIQUE INDEX `uk_group_id`(`group_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = '集群、各Group容量信息表' ROW_FORMAT = Compact;

-- ----------------------------
-- Records of group_capacity
-- ----------------------------

-- ----------------------------
-- Table structure for his_config_info
-- ----------------------------
DROP TABLE IF EXISTS `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) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
  `group_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
  `app_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'app_name',
  `content` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
  `md5` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `src_user` text CHARACTER SET utf8 COLLATE utf8_bin NULL,
  `src_ip` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
  `op_type` char(10) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
  `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT '租户字段',
  PRIMARY KEY (`nid`) USING BTREE,
  INDEX `idx_gmt_create`(`gmt_create`) USING BTREE,
  INDEX `idx_gmt_modified`(`gmt_modified`) USING BTREE,
  INDEX `idx_did`(`data_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = '多租户改造' ROW_FORMAT = Compact;

-- ----------------------------
-- Records of his_config_info
-- ----------------------------

-- ----------------------------
-- Table structure for permissions
-- ----------------------------
DROP TABLE IF EXISTS `permissions`;
CREATE TABLE `permissions`  (
  `role` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `resource` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `action` varchar(8) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  UNIQUE INDEX `uk_role_permission`(`role`, `resource`, `action`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;

-- ----------------------------
-- Records of permissions
-- ----------------------------

-- ----------------------------
-- Table structure for roles
-- ----------------------------
DROP TABLE IF EXISTS `roles`;
CREATE TABLE `roles`  (
  `username` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `role` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  UNIQUE INDEX `idx_user_role`(`username`, `role`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;

-- ----------------------------
-- Records of roles
-- ----------------------------
INSERT INTO `roles` VALUES ('nacos', 'ROLE_ADMIN');

-- ----------------------------
-- Table structure for tenant_capacity
-- ----------------------------
DROP TABLE IF EXISTS `tenant_capacity`;
CREATE TABLE `tenant_capacity`  (
  `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin 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`) USING BTREE,
  UNIQUE INDEX `uk_tenant_id`(`tenant_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = '租户容量信息表' ROW_FORMAT = Compact;

-- ----------------------------
-- Records of tenant_capacity
-- ----------------------------

-- ----------------------------
-- Table structure for tenant_info
-- ----------------------------
DROP TABLE IF EXISTS `tenant_info`;
CREATE TABLE `tenant_info`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `kp` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'kp',
  `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT 'tenant_id',
  `tenant_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT 'tenant_name',
  `tenant_desc` varchar(256) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'tenant_desc',
  `create_source` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'create_source',
  `gmt_create` bigint(20) NOT NULL COMMENT '创建时间',
  `gmt_modified` bigint(20) NOT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `uk_tenant_info_kptenantid`(`kp`, `tenant_id`) USING BTREE,
  INDEX `idx_tenant_id`(`tenant_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = 'tenant_info' ROW_FORMAT = Compact;

-- ----------------------------
-- Records of tenant_info
-- ----------------------------

-- ----------------------------
-- Table structure for users
-- ----------------------------
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users`  (
  `username` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `password` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `enabled` tinyint(1) NOT NULL,
  PRIMARY KEY (`username`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;

-- ----------------------------
-- Records of users
-- ----------------------------
INSERT INTO `users` VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', 1);

SET FOREIGN_KEY_CHECKS = 1;

2.创建一个nacos_cluster文件夹

下载一个nacos压缩包https://github.com/alibaba/nacos/tags,可以选择任意版本下载。

解压到nacos_cluster文件夹中

进入nacos里面的conf文件夹,进入cluster.conf中,配置nacos集群中,各个nacos的地址端口

#
# Copyright 1999-2018 Alibaba Group Holding Ltd.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

#it is ip
#example
127.0.0.1:8845
127.0.0.1:8846
127.0.0.1:8847

 3.然后进入application.properties文件中配置当前nacos实例的ip端口和数据源连接信息

nacos.inetutils.ip-address=127.0.0.1
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://192.168.230.100:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=1234

4.复制两份出来,然后在各自的application.properties文件中修改端口号为8846,8847

 5.分别在三个文件夹中的bin目录下输入

startup.cmd命令启动

 

6.配置集群成功

 在8845端口的nacos服务下添加配置文件

 在8846,8847端口的服务下都会显示这个配置文件,因为这三个端口的nacos都是连接的同一个数据库

使用nginx反向代理nacos集群 

在nacos客户端如何连接这三个nacos服务器,所以我们需要使用nginx进行反向代理

修改conf/nginx.conf文件,配置如下: 

这个配置文件通常用于将 Nginx 设置为 Nacos 的反向代理,Nacos 是一个服务发现和管理平台。通过这个配置,所有发送到 Nginx 的 /nacos 路径的 HTTP 请求都会被转发到 Nacos 集群nacos-cluster中。

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
	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;
		}
	}
}

 测试改完后是否正确

window下nginx相关指令:

查看nginx的版本号:nginx.exe -v

启动nginx:start nginx.exe

快速停止或关闭nginx:nginx.exe -s stop

正常停止或关闭nginx:nginx.exe -s quit

配置文件nginx.conf修改重装载命令:nginx.exe -s reload

 输入localhost/nacos(默认是80端口),轮询访问nacos集群中的各个实例

在微服务中修改连接nacos的端口号,修改为nginx的80端口号,连接nacos默认会加上/nacos

这样一来微服务就会根据nginx给的nacos服务地址进行注册,和去nacos配置中心中拉取配置文件 

spring:
  application:
    name: user-service #微服务的名字
  profiles:
    active: dev #指定开发环境
  cloud:
    nacos:
      server-addr: localhost:80 #指定要连接的nacos的地址
      config:
        file-extension: yaml #文件的后缀名

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2209200.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在Spring Boot中具有多个实现的接口正确注入的六种方式

​ 博客主页: 南来_北往 系列专栏&#xff1a;Spring Boot实战 在Spring Boot中&#xff0c;当一个接口具有多个实现时&#xff0c;正确地将这些实现注入到需要使用它们的地方是一个常见的需求。以下是在Spring Boot中实现这一目标的六种方式&#xff1a; 1. 使用Autowir…

maven聚合ssm

如果没有写过ssm项目请移步SSM后端框架搭建&#xff08;有图有真相&#xff09;-CSDN博客 数据库准备 create table user (id int (11),uid varchar (60),name varchar (60),age int (11),sex varchar (12) ); insert into user (id, uid, name, age, sex) values(10,202409…

小米电机与STM32——CAN通信

背景介绍&#xff1a;为了利用小米电机&#xff0c;搭建机械臂的关节&#xff0c;需要学习小米电机的使用方法。计划采用STM32驱动小米电机&#xff0c;实现指定运动&#xff0c;为此需要了解他们之间的通信方式&#xff0c;指令写入方法等。花了很多时间学习&#xff0c;但网络…

LINUX网络编程:cookie和session

目录 1.cookie 1.2.cookie原理 1.3.cookie的格式以及字段 字段介绍&#xff1a; 完整的cookie 1.4.cookie的安全问题 2.session 2.2session的原理 1.cookie 在大家在浏览b站的时候&#xff0c;都会发现一个问题&#xff0c;当我们登录过一次之后&#xff0c;下次点开b站…

2024年最新Stable Diffusion模型资源合集!附整合安装包!

&#xff08;模型资源在ComfyUI、WebUI以及ForgeUI中都通用&#xff09; 之前的Stable Diffusion笔记受到了不少小伙伴的关注&#xff0c;很感谢大家的建议和支持。有很多小伙伴私信我问我一些AI绘画的模型资源在哪来下载&#xff0c;一般来说有两个网站比较常用&#xff0c;分…

位操作解决数组的花样遍历

文章目录 题目 一、思路&#xff1a; 二、代码 总结 题目 leetcodeT289 https://leetcode.cn/problems/game-of-life/description/ 一、思路&#xff1a; 这题思路很简单&#xff0c;对每个位置按照题目所给规则进行遍历&#xff0c;判断周围网格的活细胞数即可。但是题目要求…

【LVGL快速入门】SquareLine Studio安装教程(LVGL官方工具)

一.简介与导航&#xff1a; SquareLine Studio是由LVGL官方开发的一款UI设计工具&#xff0c;采用图形化进行界面UI设计&#xff0c;轻易上手。 SquareLine Studio官方网址&#xff1a;https://squareline.io/SquareLine Studio官方文档&#xff1a;https://docs.squareline.io…

太阳能电池特性及其应用

中南民族大学-通信工程2024-大学物理下实验 目录 代码实现结果显示 &#x1f6e0;工具使用 MarsCode&#xff08;插件&#xff0c;集成在PyCharm&#xff09;&#xff1b; python编程&#xff08;豆包AI智能体&#xff09; &#x1f4bb;编程改进 此处是用「Matplotlib」来作图…

Monkey测试工具大盘点!如何选怎么用全整明白了!

什么是Monkey测试&#xff1f; 以下是官方说法&#xff1a; Monkey 测试是通过向系统发送伪随机的用户事件流&#xff08;如按键输入、触摸屏输入、手势输入等&#xff09;&#xff0c;实现对应用程序客户端的稳定性测试&#xff1b;这种随机性可以模拟真实用户的行为&#x…

理解Web3的互操作性:不同区块链的连接

随着Web3的迅速发展&#xff0c;互操作性成为区块链技术中的一个核心概念。互操作性指的是不同区块链之间能够无缝地交流和共享数据&#xff0c;从而实现更加高效和灵活的生态系统。本文将探讨Web3中互操作性的意义、面临的挑战以及未来的发展趋势。 1. 互操作性的意义 在Web…

优达学城 Generative AI 课程3:Computer Vision and Generative AI

文章目录 1 官方课程内容自述第 1 课&#xff1a;图像生成简介第 2 课&#xff1a;计算机视觉基础第 3 课&#xff1a;图像生成与生成对抗网络&#xff08;GANs&#xff09;第 4 课&#xff1a;基于 Transformer 的计算机视觉模型第 5 课&#xff1a;扩散模型第 6 课&#xff0…

利用AI大模型,增强你的DevOps!

前言 自从去年春天ChatGPT问世之后&#xff0c;互联网也掀起了拥抱AI的浪潮&#xff0c;不仅是各大头部大厂相继发布大模型产品&#xff0c;在开发者的Coding过程中也紧跟时代&#xff0c;一些热门插件也纷纷受到了开发者的青睐&#xff0c;比如GitHub Copilot的智能代码生成。…

数据结构编程实践20讲(Python版)—05二叉树

本文目录 写在前面:大“树”下好乘凉定义主要术语基本特征主要应用领域:05 二叉树Binary treeS1 说明S2 示例S3 二叉树类型(1)满二叉树(Perfect Binary Tree)(2)完全二叉树(Complete Binary Tree)(3)二叉搜索树(Binary Search Tree)(4)平衡二叉树(Balanced Bin…

Windows环境NodeJS下载配置安装运行

Windows环境NodeJS下载配置安装运行 &#xff08;1&#xff09;下载 Node.js — Run JavaScript Everywhere 安装文件。 一路傻瓜式安装。 如果安装正常&#xff0c;输入命令可显示版本号&#xff1a; &#xff08;2&#xff09;可以查询nodejs默认的后续依赖安装包位置及缓存…

稻盛和夫认为,一个领导是否值得追随,看这几点就够了

一、真正的领导者有自信&#xff0c;但不自大&#xff0c;有坚定的信念和价值观。 稻盛和夫认为&#xff0c;领导者的真正强大之处在于他们能够坚定地做正确的事情。领导者必须具备勇气和决心&#xff0c;以及坚定的信念&#xff0c;以便在面对挑战和困难时能够坚持自己的信念…

Vert.x,Web - 静态资源/模板

静态资源 Vert.x-Web带有开箱即用的处理器(StaticHandler)&#xff0c;用于处理静态Web资源(.html, .css, .js, …)&#xff0c; 因此可以非常轻松地编写静态Web服务器。 默认静态文件目录为类路径下的webroot目录&#xff0c;对于maven的项目&#xff0c;按规范放在src/main/…

BIO与NIO学习

BIO&#xff1a;同步阻塞IO&#xff0c;客户端一个连接请求&#xff08;socket&#xff09;对应一个线程。阻塞体现在: 程序在执行I/O操作时会阻塞当前线程&#xff0c;直到I/O操作完成。在线程空闲的时候也无法释放用于别的服务只能等当前绑定的客户端的消息。 BIO的代码实现 …

郑光荣参加老年春节联欢晚会团长会议现场采访

郑光荣作为北京正明圣达叫卖团的业务团长&#xff0c;他不仅在多个春节联欢晚会中展现了 自己的才华&#xff0c;还在团长会议现场接受了采访。在2024年参加了多个电视台的 春节联欢晚会录制。 郑光荣曾经参与了包括北京广播电视台、海南卫视&#xff0c;中国国际教育电视台…

c++基础-去掉空格

#include <algorithm> #include <string> #include <cctype> // 用于std::isspace std::string removeSpaces(std::string str) {str.erase(std::remove_if(str.begin(), str.end(), ::isspace), str.end());return str; }int main() {string str &quo…

腾讯云视立方Flutter 相关

两台手机同时运行 Demo&#xff0c;为什么看不到彼此的画面&#xff1f; 请确保两台手机在运行 Demo 时使用的是不同的 UserID&#xff0c;TRTC 不支持同一个 UserID &#xff08;除非 SDKAppID 不同&#xff09;在两个终端同时使用。 防火墙有什么限制&#xff1f; 由于 SDK…