zoukankan      html  css  js  c++  java
  • (二)SpringCloudAlibaba服务注册和配置中心-Nacos

    1.Nacos简介

    1.1为什么叫Nacos

    前四个字母分别为Naming和Configuration的前两个字母,最后的s为Service

    1.2Nacos是什么?

    一个更易于构建云原生应用的动态服务发现,配置管理和服务管理平台。
    Nacos:Dynamic Naming and Configuration Service
    Nacos就是注册中心+配置中心的组合
    Nacos=Eureka+Config+Bus

    能干吗?

    • 替代Eureka做服务注册中心
    • 替代COnfig做服务配置中心

    学习网址
    https://github.com/alibaba/Nacos
    http://nacos.io/zh-cn/index.html

    各种注册中心比较

    据说 Nacos 在阿里巴巴内部有超过 10 万的实例运行,已经过了类似双十一等各种大型流量的考验

    2.安装并运行Nacos

    2.1官网下载Nacos

    https://github.com/alibaba/nacos/releases

    2.2解压安装包,直接运行bin目录下的startup.cmd

    2.3命令运行成功后直接访问http://localhost:8848/nacos 默认账号密码都是nacos

    3.Nacos作为服务注册中心案例

    3.1基于Nacos的服务提供者

    • 新建工程
    cloud-alibaba-provider-payment-9001
    
    • pom
    ############父pom
             <dependency>
                 <groupId>com.alibaba.cloud</groupId>
                 <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                 <version>2.1.0.RELEASE</version>
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
    
    ###########本模块pom
            <!--SpringCloud ailibaba nacos -->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            </dependency>
    
    • yml
    server:
      port: 9001
    
    spring:
      application:
        name: nacos-payment-provider
      cloud:
        nacos:
          discovery:
            server-addr: localhost:8848 #配置Nacos地址
    
    management:
      endpoints:
        web:
          exposure:
            include: '*'
    
    • 主启动类
    @EnableDiscoveryClient
    @SpringBootApplication
    public class PaymentApplication9001 {
    
        public static void main(String[] args) {
            SpringApplication.run(PaymentApplication9001.class, args);
        }
    }
    
    • Controller
    @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;
        }
    }
    
    • 测试http://localhost:9001/payment/nacos/1

      nacos服务注册中心+服务提供者9001都OK了

    • 为了下一章演示nacos的负载均衡,参照9001新建9002 (步骤相同)

    cloud-alibaba-provider-payment-9002
    

    3.2基于Nacos的服务消费者

    • 新建工程
    cloud-alibaba-consumer-order-83
    
    • pom
            <!--SpringCloud ailibaba nacos -->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            </dependency>
    
    • 为什么nacos支持负载均衡
    • yml
    server:
      port: 83
    
    spring:
      application:
        name: nacos-order-consumer
      cloud:
        nacos:
          discovery:
            server-addr: localhost:8848
    
    
    #消费者将要去访问的微服务名称(注册成功进nacos的微服务提供者)
    service-url:
      nacos-user-service: http://nacos-payment-provider
    
    • 主启动类
    @EnableDiscoveryClient
    @SpringBootApplication
    public class OrderApplication83 {
        
        public static void main(String[] args) {
            SpringApplication.run(OrderApplication83.class, args);
        }
    
    }
    
    • Controller
    @RestController
    public class OrderController {
    
        @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);
        }
    
    }
    
    • 配置Bean
    @Configuration
    public class ApplicationContextBean {
    
        @Bean
        @LoadBalanced
        public RestTemplate getRestTemplate() {
            return new RestTemplate();
        }
    
    }
    

    3.3服务注册中心对比

    • Nacos全景图

    • Nacos和CAP

    • Nacos支持AP和CP模式的切换
      C是所有节点在同一时间看到的数据是一致的;而A的定义是所有的请求都会收到响应。
      何时选择使用何种模式?
      一般来说,如果不需要存储服务级别的信息且服务实例是通过nacos-client注册,并能够保持心跳上报,那么就可以选择AP模式。当前主流的服务如 Spring cloud 和 Dubbo 服务,都适用于AP模式,AP模式为了服务的可能性而减弱了一致性,因此AP模式下只支持注册临时实例。
      如果需要在服务级别编辑或者存储配置信息,那么 CP 是必须,K8S服务和DNS服务则适用于CP模式。
      CP模式下则支持注册持久化实例,此时则是以 Raft 协议为集群运行模式,该模式下注册实例之前必须先注册服务,如果服务不存在,则会返回错误。

    curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP'

    4.Nacos作为服务配置中心案例

    4.1Nacos作为配置中心-基础配置

    • 新建工程
    cloud-alibaba-nacos-config-client-3377
    
    • pom
            <!--nacos-config-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            </dependency>
            <!--nacos-discovery-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            </dependency>
    
    • yml
      Nacos同springcloud-config一样,在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置之后,才能保证项目的正常启动。
      springboot中配置文件的加载是存在优先级顺序的,bootstrap优先级高于application
    ###bootstrap
    # nacos配置
    server:
      port: 3377
    
    spring:
      application:
        name: nacos-config-client
      cloud:
        nacos:
          discovery:
            server-addr: localhost:8848 #Nacos服务注册中心地址
          config:
            server-addr: localhost:8848 #Nacos作为配置中心地址
            file-extension: yaml #指定yaml格式的配置
     
     
    # ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
    
    
    # ${spring.cloud.nacos.config.name}/${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
    
    ###application
    spring:
      profiles:
        active: dev # 表示开发环境
    
    
    • 主启动类
    @EnableDiscoveryClient
    @SpringBootApplication
    public class NacosConfigClientApplication3377 {
        
        public static void main(String[] args) {
            SpringApplication.run(NacosConfigClientApplication3377.class, args);
        }
    }
    
    • Controller
    @RestController
    @RefreshScope //在控制器类加入@RefreshScope注解使当前类下的配置支持Nacos的动态刷新功能。
    public class ConfigClientController {
        
        @Value("${config.info}")
        private String configInfo;
    
        @GetMapping("/config/info")
        public String getConfigInfo() {
            return configInfo;
        }
    }
    
    • Nacos中的匹配规则
      https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html

      最后公式:# ${spring.cloud.nacos.config.name}/${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}

    • 配置新增

    • Nacos界面配置对应

    • 历史配置
      Nacos会记录配置文件的历史版本默认保留30天,此外还有一键回滚功能,回滚操作将会出发配置更新

    • 测试 运行cloud-alibaba-nacos-config-client-3377 主启动类
      访问http://localhost:3377/config/info

    • 自带动态刷新
      修改Nacos中yaml配置文件,再次调用查看配置的接口,就会发现配置已经刷新

    4.2Nacos作为配置中心-分类配置

    • 多环境多项目管理

    问题1:
    实际开发中,通常一个系统会准备
    dev开发环境
    test测试环境
    prod生产环境。
    如何保证指定环境启动时服务能正确读取到Nacos上相应环境的配置文件呢?

    问题2:
    一个大型分布式微服务系统会有很多微服务子项目,
    每个微服务项目又都会有相应的开发环境、测试环境、预发环境、正式环境......
    那怎么对这些微服务配置进行管理呢?

    • Nacos的图形化管理界面
      配置管理

      命名空间

    • Namespace+Group+DataID 三者关系?为什么这么设计?
      是什么?
      类似Java里面的package名和类名
      最外层的namespace是可以用于区分部署环境的,Group和DataID逻辑上区分两个目标对象。
      三者情况

      默认情况:
      Namespace=public,Group=DEFAULT_GROUP, 默认Cluster是DEFAULT
      Nacos默认的命名空间是public,Namespace主要用来实现隔离。比方说我们现在有三个环境:开发、测试、生产环境,我们就可以创建三个Namespace,不同的Namespace之间是隔离的。
      Group默认是DEFAULT_GROUP,Group可以把不同的微服务划分到同一个分组里面去
      Service就是微服务;一个Service可以包含多个Cluster(集群),Nacos默认Cluster是DEFAULT,Cluster是对指定微服务的一个虚拟划分。
      比方说为了容灾,将Service微服务分别部署在了杭州机房和广州机房,这时就可以给杭州机房的Service微服务起一个集群名称(HZ),给广州机房的Service微服务起一个集群名称(GZ),还可以尽量让同一个机房的微服务互相调用,以提升性能。
      最后是Instance,就是微服务的实例。

    • 三种方案加载配置

    DataID方案
    默认空间+默认分组+新建dev和test两个DataID
    新建dev配置DataID

    新建test配置DataID

    通过spring.profile.active属性就能进行多环境下配置文件的读取

    测试 访问http://localhost:3377/config/info

    Group方案
    通过Group实现环境区分

    在nacos图形界面控制台上面新建配置文件DataID

    bootstrap+application 加一条group配置即可

    Namespace方案
    新建dev/test的Namespace 注意下面的命名空间ID:

    回到服务管理-服务列表查看

    按照域名配置填写

    bootstrap+application

    ###bootstrap
    # nacos注册中心
    server:
      port: 3377
    
    spring:
      application:
        name: nacos-order
      cloud:
        nacos:
          discovery:
            server-addr: localhost:8848 #Nacos服务注册中心地址
          config:
            server-addr: localhost:8848 #Nacos作为配置中心地址
            file-extension: yaml #这里我们获取的yaml格式的配置
            namespace: 5da1dccc-ee26-49e0-b8e5-7d9559b95ab0
            #group: DEV_GROUP
            group: TEST_GROUP
    
    ###application
    # Nacos注册配置,application.yml
    spring:
      profiles:
        #active: test
        active: dev
        #active: info
    

    5.Nacos集群和持久化配置

    官网架构图

    真实情况

    默认Nacos使用嵌入式数据库实现数据的存储。所以,如果启动多个默认配置下的Nacos节点,数据存储是存在一致性问题的。
    为了解决这个问题,Nacos采用了集中式存储的方式来支持集群化部署,目前只支持MySQL的存储。

    Nacos默认自带的是嵌入式数据库derby
    https://github.com/alibaba/nacos/blob/develop/config/pom.xml

    5.1持久化解释

    derby到mysql切换步骤
    nacos-server-1.1.4 acosconf目录下找到sql脚本 nacos-mysql.sql

     
    CREATE DATABASE nacos_config;
    USE nacos_config;
     
    /******************************************/
    /*   数据库全名 = nacos_config   */
    /*   表名称 = config_info   */
    /******************************************/
    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 '2010-05-05 00:00:00' COMMENT '创建时间',
      `gmt_modified` DATETIME NOT NULL DEFAULT '2010-05-05 00:00:00' 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 '2010-05-05 00:00:00' COMMENT '创建时间',
      `gmt_modified` DATETIME NOT NULL DEFAULT '2010-05-05 00:00:00' 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 '2010-05-05 00:00:00' COMMENT '创建时间',
      `gmt_modified` DATETIME NOT NULL DEFAULT '2010-05-05 00:00:00' 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 '2010-05-05 00:00:00' COMMENT '创建时间',
      `gmt_modified` DATETIME NOT NULL DEFAULT '2010-05-05 00:00:00' 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 '2010-05-05 00:00:00',
      `gmt_modified` DATETIME NOT NULL DEFAULT '2010-05-05 00:00:00',
      `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 '2010-05-05 00:00:00' COMMENT '创建时间',
      `gmt_modified` DATETIME NOT NULL DEFAULT '2010-05-05 00:00:00' 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
    );
     
    INSERT INTO users (username, PASSWORD, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE);
     
    INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');
     
    

    nacos-server-1.1.4 acosconf目录下找到application.properties

    spring.datasource.platform=mysql
     
    db.num=1
    db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
    db.user=root
    db.password=123456
    

    启动Nacos,可以看到是个全新的空记录界面,以前是记录进derby

    5.2Linux版Nacos+MySQL生产环境配置

    环境准备
    1个Nginx+3个nacos注册中心+1个mysql
    Nacos下载Linux版本nacos-server-1.1.4.tar.gz

    集群配置步骤

    • nacos-mysql.sql 数据库配置
    • nacos/conf/application.properties 配置
    • Linux服务器上nacos的集群配置cluster.conf
      这个IP不能写127.0.0.1,必须是Linux命令hostname -i 能够识别的IP
    • 将nacos-server 复制三份,分别修改端口位3333,4444,5555,依次启动
    • Nginx的配置,由它作为负载均衡器
    • 测试通过nginx访问nacos http://192.168.111.144:1111/nacos/#/login
    • 新建一个配置测试
    • Linux服务器的mysql插入一条记录
    • cloud-alibaba-provider-payment-9002 测试
    server:
      port: 9002
    
    spring:
      application:
        name: nacos-payment-provider
      cloud:
        nacos:
          discovery:
            #配置Nacos地址
            #server-addr: localhost:8848
            # 换成nginx的1111端口,做集群
            server-addr: 192.168.111.144:1111
    
    
    management:
      endpoints:
        web:
          exposure:
            include: '*'
    

    • 高可用小总结
  • 相关阅读:
    教大家如何在word 2007中同时打出对齐上下标以及字母头上有波浪线(非编辑器)
    C#返回多个参数 ref及out
    回溯法解决0-1背包问题
    USB peripherals can turn against their users
    50元制作PS2键盘无线监控装置
    物联网安全拔“牙”实战——低功耗蓝牙(BLE)初探
    Bluetooth Low Energy 嗅探
    MagSpoof:能预测并窃取你下一张信用卡号码的廉价设备
    Python 安全类目推荐 (持续更新)
    树莓派安装kali后的简单配置
  • 原文地址:https://www.cnblogs.com/everyingo/p/14780420.html
Copyright © 2011-2022 走看看