ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

06-Nacos配置管理

2022-07-12 03:00:06  阅读:252  来源: 互联网

标签:COMMENT 06 DEFAULT 配置管理 Nacos nacos varchar NULL id


一、Nacos配置管理

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

1.1、统一配置管理

  • 当微服务部署的实例越来越多,达到数十上百的时候,诸葛修改微服务配置就会让人抓狂,而且很容易出错
  • 这时候就需要一种统一配置管理方案,可以几种管理所有实例的配置
  • Nacos一方面可以将配置集中管理,另一方面可以在配置变更的时候,及时通知微服务,实现配置的热更新

1.1.1、在Nacos中添加配置文件

  • ①、Nacos中添加统一配置

  • ②、在弹出的表单中,填写配置信息(这里扩展名使用yaml

    • 配置内容如下

      • pattern:
        	dateformat: yyyy-MM-dd HH:mm:ss
        

注意事项

  • 项目的核心配置,需要热更新的配置才有放到Nacos管理的必要。基本不会变更的一些配置还是保存在微服务本地比较好;通常是一些偶尔会变动的参数

1.1.2、从微服务拉取配置

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

  • 但是如果尚未读取application.yml文件,又如何得到Nacos地址呢?

  • 因此Spring引入了一种新的配置文件

    • bootstrap.yaml文件:会在application.yml之前被读取,流程如下所示
  • 拉取配置步骤

    • ①、在user-service服务中,引入nacos-config的客户端依赖

      • <!--nacos配置管理依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        
    • ②、添加bootstrap.yaml文件

      • 内容如下所示

        • 1)服务名为userservice(名字中间没有短横)
        • 2)指定激活的配置dev
        • 3)指定spring.cloud.nacos.server-addr的服务地址:localhost:8848
        • 4)指定spring.cloud.nacos.config.file-extension配置文件的扩展名为yaml
      • spring:
          application:
            name: userservice   # 服务名称,要与文件名一致
          profiles:
            active: dev   # 开发环境,这里是dev
          cloud:
            nacos:
              server-addr: localhost:8848   # Nacos地址
              config:
                file-extension: yaml  # 文件后缀名
                namespace: 88335441-8805-441a-9964-3628d17634ac
        
      • 注意事项

        • 这里配置bootstrap.yaml的文件的时候,如果此时在Nacos中发布的配置文件不在默认的public命名空间下,这里还需要添加namespace配置
      • 这里会根据spring.cloud.nacos.server-addr获取nacos地址

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

      • 在本例中,就是去读取userservice-dev.yaml文件

    • ③、去掉application.yml中相关重复的配置

      • # 指定服务的名称
        #  application:
        #    name: userservice
             # nacos 配置
          cloud:
            nacos:
        #      server-addr: localhost:8848
              discovery:
                cluster-name: GZ  # 集群名称
                namespace: 88335441-8805-441a-9964-3628d17634ac   # 命名空间的ID
        
    • ④、读取nacos配置

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

      •     @Value("${pattern.dateformat}")
            private String dateformat;
        
            @GetMapping("/now")
            public String getDate() {
                return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));
            }
        
    • ⑤、访问不同的服务页面,可以看到效果如下所示

注意事项

  • 有时启动的时候失败,提示${pattern.dateformat}注入失败,可以尝试重启Nacos服务器
  • 如果出现以下警告信息也可以忽略
    • Ignore the empty nacos configuration and get it based on dataId[userservice] & group[DEFAULT_GROUP]

1.2、配置热更新

  • Nacos配置管理的最终目的,是修改Nacos中的配置后,微服务无需重启即可让配置生效,也就是配置热更新
  • 要实现配置热更新,可以使用以下两种方式

1.2.1、方式一

  • 在@Value注入的变量所在类上添加@RefreshScope注解
  • 实现步骤
    • 1、在UserController上添加@RefreshScope注解,这个注解会重新加载实例对象,并且使用新的配置
    • 2、重新启动UserController让新的代码起作用
    • 3、这时再修改配置管理中的配置
    • 4、在浏览器输入访问地址,查看新的配置是否起作用

1.2.2、方式二

  • 使用@ConfigurationProperties注解代替@Value注解

    • 1、去掉UserController上的@RefreshScope注解和@Value注解

    • 2、在user-service服务的config包中添加一个类

      • ①、添加Component注解

      • ②、添加@ConfigurationProperties(prefix="pattern")注解

      • ③、添加String dateformat属性

      • package cn.coolman.user.config;
        
        
        import lombok.Data;
        import org.springframework.beans.factory.annotation.Autowired;
        import org.springframework.boot.context.properties.ConfigurationProperties;
        import org.springframework.stereotype.Component;
        
        @Data
        @Component
        @ConfigurationProperties(prefix = "pattern")
        public class PatternProperties {
        
            private String dateformat;
        }
        
    • PS:

      • 如果出现如下的红色警告

      • 在pom.xml文件中添加如下坐标即可

        • <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-configuration-processor</artifactId>
          </dependency>
          
    • 3、在UserController中使用这个类,并且使用@Autowired注入

    • 4、UserController完整代码如下所示

      • package cn.coolman.user.web;
        
        import cn.coolman.user.config.PatternProperties;
        import cn.coolman.user.pojo.User;
        import cn.coolman.user.service.UserService;
        import lombok.extern.slf4j.Slf4j;
        import org.springframework.beans.factory.annotation.Autowired;
        import org.springframework.beans.factory.annotation.Value;
        import org.springframework.cloud.context.config.annotation.RefreshScope;
        import org.springframework.web.bind.annotation.*;
        
        import java.time.LocalDateTime;
        import java.time.format.DateTimeFormatter;
        
        @Slf4j
        @RestController
        @RequestMapping("/user")
        //@RefreshScope
        public class UserController {
        
            @Autowired
            private UserService userService;
        
        //    @Value("${pattern.dateformat}")
        //    private String dateformat;
        
            @Autowired
            private PatternProperties patternProperties;
        
            @GetMapping("/now")
            public String getDate() {
                log.info("============" + patternProperties);
        //        return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));
                return LocalDateTime.now().format(DateTimeFormatter.ofPattern(patternProperties.getDateformat()));
        
            }
        }
        
    • 5、重启UserApplication微服务

    • 6、再修改Nacos的配置

    • 7、在浏览器查看效果

  • 小结

    • Nacos配置中心的作用
      • 统一管理配置
      • 支持配置热更新
      • 配置多环节的配置环境
    • 如何读取Nacos配置中心的内容
      • 创建一个bootstrap.yaml的配置文件,编写服务的名称,激活的环境,后缀名
      • 在Controller注入配置信息或者创建一个配置类专门读取配置文件
    • 如何才能支持热更新
      • 方式一
        • @RefreshScope
      • 方式二
        • 创建一个单独配置类读取,使用@ConfigurationProperties读取

1.3、配置共享

1.3.1、配置共享说明

  • 应用场景
    • 某个配置在开发、测试、生产环境中的配置是一样的,就可以使用共享配置
  • 其实在微服务启动的时,会去Nacos读取多个配置文件,例如:
    • [spring.application.name]-[spring.profiles.active].yaml:userservice-dev.yaml
    • [spring.application.name].yaml:userservice.yaml
  • [spring.application.name].yaml不包含环境,因此可以被多个环境共享

1.3.2、测试配置共享

①、添加一个环境共享配置

  • 在Nacos中添加一个userservice.yaml文件

    • pattern:
      	envSharedValue: 大家一起共享!
      
  • 这时候有两个配置文件存在

②、在user-service中读取共享配置

  • 1)在user-service服务中,修改PatternProperties类,读取新添加的属性
  • 2)在user-service服务中,修改UserController,添加一个方法,直接返回PatternProperties对象

③、运行两个UserApplication,使用不同的profile

  • 1)修改bootstrap.yaml文件
  • 2)修改UserApplication8082这个启动项,改变其profile值
    • PS:这个test的profiles是不存在的
    • 这样,UserApplication8081使用的profile是dev;UserApplication8082使用的profile是test

④、执行程序,查看运行结果

  • 1)启动UserApplication8081和UserApplication8082
  • 2)访问http://localhost:8081/user/prop
  • 3)访问http://localhost:8082/user/prop
  • 可以看出来,不管是dev,还是test环境,都读取到了envShareValue这个属性的值

1.3.3、配置共享的优先级

①、优先级说明

  • 当Nacos、服务本地同时出现相同属性的时候,优先级有高低之分,如下图所示

②、演示

  • 1)在PatternProperties中添加新的username属性

    • package cn.coolman.user.config;
      
      
      import lombok.Data;
      import org.springframework.boot.context.properties.ConfigurationProperties;
      import org.springframework.stereotype.Component;
      
      @Data
      @Component
      @ConfigurationProperties(prefix = "pattern")
      public class PatternProperties {
      
          private String dateformat;
      
          private String envSharedValue;
      
          private String username;
          
      }
      
  • 2)在application.yml中添加新的username属性,查看浏览器运行效果

  • 3)在Nacos配置管理中的userservice.yaml中添加新的username属性,查看浏览器运行效果

  • 4)在userservie-dev.yml中添加新的username属性,查看浏览器运行效果

1.3.4、小结

  • 如何才能共享信息给不同的环境去使用
    • 创建一个以服务为名称的yaml文件,不需要指定具体的环境
  • 配置文件的优先级
    • 指定具体环境 > 共享环境 > 本地配置

1.4、搭建Nacos集群

1.4.1、集群结构图

  • 官方给出的Nacos集群图如下所示

    • SLB:负载均衡器,负责将我们的请求分发到不同的nacos节点
    • 其中包含3个nacos节点,然后一个负载均衡器代理3个Nacos。这里负载均衡器可以使用Nginx
  • 测试计划的集群结构如下所示

  • 三个Nacos节点的地址

    • 节点 实际服务器的IP地址 port
      nacos1 localhost 8845
      nacos2 localhost 8846
      nacos localhost 8847

1.4.2、搭建集群

①、初始化数据库

  • Nacos默认数据存储在内嵌数据库Derby中,不属于生产可用的数据库
  • 官方推荐的最佳实践是使用带有主从的高可用数据库集群,主从模式的高可用数据库可以参考之前的Mysql进阶分类随笔
  • 在本次学习中,使用单点的数据库来学习
  • 首先新建一个数据库,命名为nacos_config,这个表结构已经由官方提供了

    • PS:要使用mysql5.7以上的版本,5.5是运行不了的
  • CREATE DATABASE IF NOT EXISTS nacos;
    USE nacos;
    
    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_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_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_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_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   */
    /*   表名称 = 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   */
    /*   表名称 = 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   */
    /*   表名称 = 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');
    

②、配置Nacos

  • 1)创建一个目录名为:nacos-cluster

  • 2)进入目录nacos-cluster目录,重新解压安装一份新的nacos

  • 3)进入nacos的conf目录,修改配置文件cluster.conf.example,重命名为cluster.conf

  • 4)添加内容

    • 127.0.0.1:8845
      127.0.0.1:8846
      127.0.0.1:8847
      
  • 5)修改application.properties文件,修改数据库配置

    • ### Default web server port:
      server.port=8845
      
      #*************** Network Related Configurations ***************#
      ### If prefer hostname over ip for Nacos server addresses in cluster.conf:
      # nacos.inetutils.prefer-hostname-over-ip=false
      
      ### Specify local server's IP:
      nacos.inetutils.ip-address=127.0.0.1
      
      
      #*************** 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?serverTimezone=UTC
      db.user.0=root
      db.password.0=123
      
    • 这里的数据库地址、用户名、密码根据自己的实际情况配置

③、启动

  • 1)将Nacos该名称nacos1,并复制两份,分别命名为:nacos2、nacos3

  • 2)然后分别修改三个文件夹中的application.properties(大约在21行)

    • nacos1

      • server.port=8845
        
    • nacos2

      • server.port=8846
        
    • nacos3

      • server.port=8847
        
  • 3)打开三个cmd窗口,分别启动三个nacos节点,不需要带参数(因为默认是集群启动的方式,也可以双击cmd程序运行)

    • 看到以下提示表示启动成功
    • INFO Nacos started successfully in cluster mode. use external storage

④、使用Nginx反向代理

  • 1)将Nginx安装包解压到任意非中文目录下(可以自行到官网下载)

  • 2)修改conf/nginx.conf文件,配置如下

    • 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;
          }
      }
      
    • 可以直接粘贴到http元素的内部位置,不用删除以前的server配置

  • 3)在命令行下输入:start nginx.exe启动nginx服务器,也可以双击运行,运行后查看任务管理器

  • 4)在浏览器访问:http://localhost/nacos即可

  • 5)查看集群管理->节点列表

⑤、Java代码修改

  • 1)修改userservice服务的bootstrap.yaml文件配置如下

    • spring:
        cloud:
          nacos:
            server-addr: localhost:80 # Nacos地址
      
  • 2)重新启动UserApplication微服务

  • 3)在nacos管理页面创建新的配置管理:userservice.yaml文件

  • 4)在浏览器上访问,获取username属性的值

  • 5)最后在mysql的nacos库的confi_info表中就会出现上面的配置信息

1.4.3、小结

  • Nacos集群的作用
    • 避免单机的nacos服务器宕机,导致服务注册与拉取都无法使用;集群也可以减轻单台nacos服务器的压力
  • 实现nacos集群的方式
    • ①、nacos集群数据共享是基于数据库实现的,需要先创建nacos数据库
    • ②、修改配置文件cluster.conf.example修改为cluster.conf
    • ③、同时配置cluster.conf文件中的集群的ip地址
    • ④、修改nacos.properties文件,修改端口,指定本地ip地址,指定nacos集群使用的数据库信息
    • ⑤、nginx集群nacos

标签:COMMENT,06,DEFAULT,配置管理,Nacos,nacos,varchar,NULL,id
来源: https://www.cnblogs.com/OnlyOnYourself-lzw/p/16458202.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有