zoukankan      html  css  js  c++  java
  • SpringCloud Nacos

    1.Nacos简介

    SpringCloud Alibaba 由来: 因为原先Spring Cloud 的许多组件都是对Netflix 公司的各种框架进行封装, 然后因为Netflix公司对后续更新的各种跳票,甚至停更, 导致 Spring Cloud也受到巨大影响,
    于此同时,由Alibaba 开发的 微服务框架, nacos, sentinel 等在此时蓬勃发展,并趋于稳定,
    于是SpringCloud 将其纳入,组建新的子项目, SpringCloud Alibaba ,提供全新的微服务整体解决方案

    Nacos,全称Dynamic Naming and Configuration Service,主要提供 注册中心和配置中心的工作, 替代原先Eureka 和 Config配置中心, 一体多用,并自带了明了的可视化界面,使开发运维工作更加简单

    安装运行

    下载地址:https://github.com/alibaba/nacos/tags

    官方文档:https://nacos.io/zh-cn/docs/quick-start.html

    下载对应操作系统版本的压缩包,解压后执行对应的脚本即可

    如下Linux, 默认启动方式为集群,所以可以手动指定启动方式为单机

    startup.sh -m standalone
    

    启动成功,访问地址,端口默8848:http://127.0.0.1:8848/nacos

    会进入登录页面, 数据默认的账号密码nacos/nacos

    即可进入后台页面

    image-20210224172813906

    2. Nacos注册中心入门

    2.1:服务提供方搭建

    pom依赖:

      <dependencies>
            <!--  SpringCloud alibaba nacos    -->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            </dependency>
            <!--  web组件      -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
            </dependency>
        </dependencies>
    

    yaml配置:

    server:
      port: 9001
    spring:
      application:
        name: nacos-payment-provider
      cloud:
        nacos:
          discovery:
            server-addr: 192.168.100.44:8848 #指定nacos地址
    

    启动类:

    @SpringBootApplication
    @EnableDiscoveryClient // 代表此服务注册到注册中心,在Edgware版本后,可以不写
    public class PaymentMain9001 {
        public static void main(String[] args) {
            SpringApplication.run(PaymentMain9001.class, args);
        }
    }
    

    测试controller,返回传入的ID号和本服务的端口

    @RestController
    public class PaymentController {
    
        @Value("${server.port}")
        private String serverPort;
    
        @GetMapping(value = "/payment/nacos/{id}")
        public String getPayment(@PathVariable("id") Integer id) {
            return "nacos registry, serverPort: " + serverPort + "	 id" + id;
        }
    
    }
    

    启动项目, 查看Nacos后台控制中心

    image-20210225164711043

    可以看出,此服务已经成功注册到nacos中

    使用浏览器测试此服务是否可以正常提供服务:http://127.0.0.1:9001/payment/nacos/10

    打印信息:nacos registry, serverPort: 9001 id10

    2.3 服务消费方搭建

    pom依赖和提供方一致

    yaml配置:

    server:
      port: 83
    spring:
      application:
        name: nacos-order-consumer
      cloud:
        nacos:
          discovery:
            server-addr: 192.168.100.174:8848
    service-url:
      nacos-user-service: http://nacos-payment-provider
    

    启动类:

    @SpringBootApplication
    public class OrderNacosMain83 {
        public static void main(String[] args) {
            SpringApplication.run(OrderNacosMain83.class, args);
        }
    }
    

    如果本服务只用做消费,不做任何服务提供,那么只需获取服务即可,不用将自身注册到注册中心,可以添加如下配置

    yaml文件中配置: spring.cloud.nacos.discovery.register-enabled=false

    或者启动类中添加注解: @EnableDiscoveryClient(autoRegister = false)

    即可禁用注册

    RestTemplate配置:

    @Configuration
    public class ApplicationContextConfig {
    
        @Bean
        @LoadBalanced
        public RestTemplate getRestTemplate(){
            return new RestTemplate();
        }
    
    }
    

    测试controller

    @RestController
    public class OrderNacosController {
    
    
        @Resource
        private RestTemplate restTemplate;
    
        @Value("${service-url.nacos-user-service}")
        private String serverURL;
    
        @GetMapping("/consumer/payment/nacos/{id}")
        public String paymentInfo(@PathVariable("id") Long id) {
            return restTemplate.getForObject(serverURL + "/payment/nacos/" + id, String.class);
        }
    }
    

    启动项目,查看nacos后台,发现消费方也注册了进来(本例注册)

    image-20210225174428207

    调用消费方测试接口:http://127.0.0.1:83/consumer/payment/nacos/10

    打印结果:nacos registry, serverPort: 9001 id10

    说明消费方成功调用了服务提供方

    注: nacos的依赖中自带了 Ribbon依赖,所以如果服务提供方若有多个,也可以进行负载均衡,同样适用Feign也是同理

    3. Nacos config服务

    在上面说到,nacos本身还提供了配置中心的功能,下面进行简单的演示入门

    pom依赖:

        <dependencies>
            <!--   nacos config     -->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            </dependency>
            <!--  SpringCloud alibaba nacos    -->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            </dependency>
            <!--  web组件      -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
            </dependency>
        </dependencies>
    

    bootstrap.yml:

    server:
        port: 3377
    spring:
        application:
            name: nacos-config-client
        cloud:
            nacos:
                discovery:
                    server-addr: 192.168.100.174:8848 # 注册到nacos中
                config:
                    server-addr: 192.168.100.174:8848 #配置中心的地址
                    file-extension: yml #后缀名
        profiles:
         active: dev
    

    因为和SpringCloud-config 一样,在项目启动前,就需要从配置中心拉取信息,所以需要提前知道一些信息,这些信息可以配置在bootstrap.yml文件中

    启动类

    @SpringBootApplication
    public class NacosConfigClientMain3377 {
        public static void main(String[] args) {
            SpringApplication.run(NacosConfigClientMain3377.class, args);
        }
    }
    

    测试controller类

    @RestController
    @RefreshScope //当配置中心的文件修改时,自动刷新
    public class ConfigClientController {
        @Value("${config.info}")
        private String configInfo;
    
        @GetMapping("/config/info")
        public String getConfigInfo(){
            return configInfo;
        }
    }
    

    在nacos控制台中新增配置文件
    在nacos中,文件的dataId的格式如下:

    ${prefix}-${spring.profile.active}.${file-extension}
    

    根据官网文档:

    • prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
    • spring.profile.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profile.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}
    • file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。

    所以本例的格式为:

    ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
    

    即:nacos-config-client-dev.yml

    如图新增配置文件:

    image-20210226150731152

    可以使用此链接进行直接获取测试:http://192.168.100.174:8848/nacos/v1/cs/configs?dataId=nacos-config-client-dev.yml&group=DEFAULT_GROUP,将dataId修改即可

    若获取不到新增的配置的信息,可以尝试启动nacos服务

    测试

    启动服务, 调用测试接口:http://127.0.0.1:3377/config/info

    打印信息:nacos config

    说明项目启动时,成功获取到了nacos中配置的信息

    修改此配置文件信息,服务自动刷新,重新获取后为修改后的数据,测试成功

    4. 领域模型

    若配置文件过多,或者环境较多,那么在处理各个服务的各个环境的配置关系时,将变的很复杂,所以 Nacos 为我们提供了领域模式进行解决

    (Namespace/Group/DataId)

    如下结构概念图:

    image-20210226154625758

    NameSpace
    Nacos提供的粗粒度的,可以进行完全资源隔离的 命令空间, 比如说定义三个命名空间, 开发,测试,生产,我们就可以创建三个NameSpace,不同的NameSpace是完全隔离的, 服务之间也不可相互感应

    image-20210226155211728
    如上图所示, Nacos默认的NameSpace为 public,不可以删除,也可以新增自己的NameSpace

    Group
    我们可以将同一个NameSpace 下同类型的微服务纳入到同一个组,配置文件也可以分组,默认为DEFAULT_GROUP

    image-20210226155444997

    image-20210226155458740

    如上两图所示, 服务注册和配置文件,都为默认分组

    Service/DataId

    对于微服务而言就是 Service, 对于配置文件就是DataId,具体的实例(Service还可以有集群)

    image-20210226161737968

    如上图示例所示:

    • NameSpace为Dev,环境为开发环境
    • 订单服务和支付服务归纳为交易分组,库存和物流归纳为仓储分组
    • 对于每个微服务实例,又有其不同的集群, 如图所示, 分为北京的集群和南京的集群

    5.Nacos 集群

    5.1 集成Mysql

    在0.7版本之前,在单机模式时nacos使用嵌入式数据库实现数据的存储,不方便观察数据存储的基本情况。0.7版本增加了支持mysql数据源能力,

    所以为了集群数据Nacos服务的数据上限问题,和便于各个节点之间的数据互通, 需要将数据库切换为Mysql

    具体的操作步骤:

    • 1.安装数据库,版本要求:5.6.5+
    • 2.初始化mysql数据库,数据库初始化文件:nacos-mysql.sql
    • 3.修改conf/application.properties文件,增加支持mysql数据源配置(目前只支持mysql),添加mysql数据源的url、用户名和密码。

    applicatio.properties中加入如下配置(修改ip,数据库名,用户名密码):

    spring.datasource.platform=mysql
    
    db.num=1
    db.url.0=jdbc:mysql://11.162.196.16:3306/nacos_devtest?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
    db.user=nacos_devtest
    db.password=youdontknow
    

    数据库初始化脚本:

    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(20) 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(20) 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(20) 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(20) 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');
    
    

    重新启动Nacos服务, 可以查看后台日志, logs/nacos.log ,有打印INFO Use MySql as the driver ,

    启动成功后,重新访问管理页面,发现之前录入的 配置文件都不在了,说明数据源成功切换为Mysql,不再使用内置数据源

    5.2 集群搭建

    官网集群架构图:

    image-20210227134451381

    推荐架构如下:

    image-20210227141105636

    • 一个nginx服务(高可用)
    • 三个或以上Nacos 服务集群
    • 高可用Mysql集群

    下面模拟搭建

    • 首先将Nacos准备好的例子conf/cluster.conf.example 复制到当前目录,并命令为cluster.conf, 修改内容为

      192.168.100.174:8849
      192.168.100.174:8850
      192.168.100.174:8851
      

      代表着包括自己在内的三个服务的地址,本例使用同一台服务器,用不同的端口区分不同Nacos服务(不能使用127.0.0.1)

    • 将本服务启动三次,并依次修改application.properties中的端口

      server.port=8848 #修改端口
      

      或者可以修改启动的脚本start.sh,启动时携带端口启动:

      接受参数:

      image-20210227145514111

      携带端口启动

      image-20210227145732156

    • 配置Nginx,隐藏三个Nacos的服务,并对其负载均衡

      upstream nacos{     
         server 192.168.100.174:8849;
         server 192.168.100.174:8850;
         server 192.168.100.174:8851;
      }
      
          server {
          		listen       8800;
             		server_name  localhost;
      			location / {
          			proxy_pass http://nacos/;
      			}
      		}
      

      对外暴露地址:http://127.0.0.1:8800/nacos,则可访问Nacos集群

    此时查看后台,可以发现,在节点列表菜单中,已经显示了三个节点信息:

    image-20210227152904641

    并且此时这三个节点的数据源相同

    修改客户端 连接集群Nacos服务

    其他不动,只需将 配置文件中的spring.cloud.nacos.discovery.server-addr修改为暴露的nginx端口即可:

    即为127.0.0.1:8800

    修改后将消费方,提供方重启, 可以查看Nacos后台,成功注册

    image-20210227153549163

    访问消费方接口,也可以顺利调用: http://127.0.0.1:83/consumer/payment/nacos/10

  • 相关阅读:
    Vue让水平滚动条(scroll bar)固定在浏览器的底部,并且同轴联动
    vue横向滚动条,初始化位置
    VUE父子组件传值,以及子组件调用父组件方法
    获取shell脚本所在路径而非执行路径
    免重装完整迁移ubuntu18.04系统方法
    auth.log大量出现pam_unix(cron:session): session opened for user root by (uid=0)解决办法
    禁用vim的visual模式方便拖选
    ssh端口反向代理与内网穿透
    mysql查询时将时间戳转换为时间格式
    浏览器打印控件分享
  • 原文地址:https://www.cnblogs.com/xjwhaha/p/14452772.html
Copyright © 2011-2022 走看看