【Spring Cloud Alibaba】【Hoxton】Nacos 入门-配置中心-集群

news/2024/7/5 17:34:26

1 Nacos 入门-配置中心-集群
2 Sentinel 入门-限流-降级(一)
3 Sentinel 热点规则-@SentinelResource-熔断-持久化(二)
4 Seata从入门到实战

1 简介

1.1 名字由来

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

1.2 是什么

(1) ー个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
(2) Nacos=Eureka+Config+Bus。
(3) 替代Eureka做服务注册中心。替代Config做服务配置中心。

1.3 下载地方

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

2 nacos安装

2.1 环境准备

192.168.0.39 jdk1.8

在这里插入图片描述

2.2 安装

(1) 解压

tar -zxvf nacos-server-1.2.0.tar.gz

(2) 运行

cd /usr/local/nacos/bin
#启动命令
bash startup.sh -m standalone
#查看尾部日志
tail -f /usr/local/nacos/logs/start.out

(3) 访问UI

http://192.168.0.39:8848/nacos

在这里插入图片描述

3 父工程准备

在这里插入图片描述

3.1 pom

 <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <junit.version>4.12</junit.version>
    <hutool.version>5.1.0</hutool.version>
    <commons.version>3.4</commons.version>
    <log4j.version>1.2.17</log4j.version>
    <lombok.version>1.18.6</lombok.version>
    <spring-cloud.version>Hoxton.SR3</spring-cloud.version>
    <spring-boot.version>2.2.5.RELEASE</spring-boot.version>
    <spring-cloud-alibaba.version>2.1.0.RELEASE</spring-cloud-alibaba.version>
</properties>

<dependencyManagement>
    <dependencies>
        <!--spring boot-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>${spring-boot.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <!--spring cloud-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <!--spring cloud alibaba 2.1.0.RELEASE-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>${spring-cloud-alibaba.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
        </dependency>
        <!--junit-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
        </dependency>
        <!--日志-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>${commons.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all -->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>${hutool.version}</version>
        </dependency>
    </dependencies>
</dependencyManagement>


<dependencies>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
    </dependency>
</dependencies>




<!--spring boot 插件-->
<build>
    <finalName>springcloud-hoxton</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <fork>true</fork>
                <addResources>true</addResources>
            </configuration>
        </plugin>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
</build>


<repositories>
    <repository>
        <id>spring-milestones</id>
        <name>Spring Milestones</name>
        <url>https://repo.spring.io/milestone</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
</repositories>

3.2 install

在这里插入图片描述

4 服务提供者

4.1 创建工程

在这里插入图片描述

4.2 pom

<dependencies>
    <!--spring cloud alibaba-->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    <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>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
    </dependency>
    <!--devtools热部署-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional>
        <scope>true</scope>
    </dependency>
</dependencies>

4.3 application.yml

server:
  port: 9000

spring:
  application:
    name: provider
  cloud:
     nacos:
       discovery:
         server-addr: 192.168.0.39:8848

#暴露监控
management:
  endpoints:
    web:
      exposure:
        include: '*'

4.4 controller

@RestController
@RequestMapping("/provider")
public class ProviderController {
    @Value("${server.port}")
    private Integer port;
    @GetMapping("/hello")
    public String hello(){
        return "Hello nacos , server port is "+port;
    }
}

4.5 主启动类

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

4.6 测试

在这里插入图片描述
在这里插入图片描述

5 再次创建服务提供者

5.1 创建工程

在这里插入图片描述

5.2 拷贝provider的pom、application.yml、controller、主启动类

在这里插入图片描述

5.3 修改application.yml

server:
  port: 9001
spring:
  application:
    name: provide
  cloud:
     nacos:
       discovery:
         server-addr: 192.168.0.39:8848
#暴露监控
management:
  endpoints:
    web:
      exposure:
        include: '*'

5.4 启动9001

在这里插入图片描述

5.5 查看nacos

在这里插入图片描述
在这里插入图片描述

6 创建消费者

在这里插入图片描述

6.1 pom

<dependencies>
    <!--spring cloud alibaba-->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    <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>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
    </dependency>
    <!--devtools热部署-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional>
        <scope>true</scope>
    </dependency>
</dependencies>

6.2 application.yml

server:
  port: 9002
spring:
  application:
    name: customer
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.0.39:8848

6.3 配置文件

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

6.4 Controller

@RestController
@RequestMapping("/customer")
public class CustomerController {
    @Autowired
    private RestTemplate restTemplate;
    private final String SERVER_URL="http://provider";
    @GetMapping(value = "/hello")
    public String hello(){
        return restTemplate.getForObject(SERVER_URL+"/provider/hello", String.class);
    }
}

6.5 主程序并启动

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

在这里插入图片描述

6.6 测试

在这里插入图片描述
在这里插入图片描述

7 配置中心简介

7.1 简介

Nacos 提供用于存储配置和其他元数据的 key/value 存储,为分布式系统中的外部化配置提供服务器端和客户端支持。使用 Spring Cloud Alibaba Nacos Config,您可以在 Nacos Server 集中管理你 Spring Cloud 应用的外部属性配置。
Spring Cloud Alibaba Nacos Config 是 Config Server 和 Client 的替代方案,客户端和服务器上的概念与 Spring Environment 和 PropertySource 有着一致的抽象,在特殊的 bootstrap 阶段,配置被加载到 Spring 环境中。当应用程序通过部署管道从开发到测试再到生产时,您可以管理这些环境之间的配置,并确保应用程序具有迁移时需要运行的所有内容。

7.2 dataid

在 Nacos Spring Cloud 中,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 的拼接格式变成 p r e f i x . {prefix}. prefix.{file-extension}。

file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。

在这里插入图片描述

7.3 创建dataid

(1) 点击新建
在这里插入图片描述
(2) 填写
在这里插入图片描述
(3) 完成
在这里插入图片描述

8 代码

8.1 创建工程

在这里插入图片描述

8.2 pom

<dependencies>
    <!--config-->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>
    <!--spring cloud alibaba-->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    <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>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
    </dependency>
    <!--devtools热部署-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional>
        <scope>true</scope>
    </dependency>
</dependencies>

8.3 application.yml

spring:
  profiles:
    active: dev

8.4 bootstrap.yml

server:
  port: 9003
spring:
  application:
    name: config
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.0.39:8848
      config:
        server-addr: 192.168.0.39:8848
        file-extension: yaml

8.5 controller

@RestController
@RefreshScope
public class ConfigController {
    @Value("${config.info}")
    private String info;
    @GetMapping("/config/info")
    public String info(){
        return info;
    }
}

8.6 主程序

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

8.7 测试

在这里插入图片描述

9 配置中心分类管理

9.1 介绍

类似java里面的package名和类名,最外层的namespace是可以用于区分部署环境的,Group和DataID逻辑上区分两个目标对象

9.2 三者情况

在这里插入图片描述
(1) 默认情况
Namespace= public, Group= DEFAULT_GROUP,默认Cluster是DEFAULT

(2) Namespace主要实现隔离
比方说我们现在有三个环境:开发、测试、生产环境,我们就可以创建三个 Namespace,不同的 Namespace之间是隔离的。

(3) Group
Group可以把不同的微服服务划分到同一个分组里面

(4) Service
Service就是微服务;个 Servicer可以包含多个 Cluster(集群), Nacos默认 Cluster是 DEFAULT, Cluster=是对指定微服务的个虚拟划分。

(5) Instance
微服务的实例。

9.3 DataID

指定spning.profile.active和配置文件的 DatalD来使不同环境下读取不同的配置。
(1) 新建release的DataID
在这里插入图片描述
(2) 修改dev的DataID
在这里插入图片描述
(3) 修改application.yml

spring:
  profiles:
    active: release

(4) 重启
在这里插入图片描述

9.4 Group方案

(1) 新建两个组release环境
在这里插入图片描述
在这里插入图片描述
(2) 修改bootstrap.yml为测试环境的组

server:
  port: 9003
spring:
  application:
    name: config
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.0.39:8848
      config:
        server-addr: 192.168.0.39:8848
        file-extension: yaml
        group: TEST_GROUP

(3) 重启
在这里插入图片描述

9.5 namespace

(1) 创建命名空间dev、release
在这里插入图片描述
(2) 查看服务列表
在这里插入图片描述
(3) dev创建配置
在这里插入图片描述
在这里插入图片描述
(4) 修改bootstrap.yml

server:
  port: 9003
spring:
  application:
    name: config
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.0.39:8848
      config:
        server-addr: 192.168.0.39:8848
        file-extension: yaml
        group: RELEASE_GROUP
        namespace: d80dba5a-7b51-4166-b1d5-fee5e12b6396

(5) 重启
在这里插入图片描述

10 集群

10.1 简介

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

10.2 部署架构

#官网
https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html

在这里插入图片描述

10.3 持久化解决方案

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

11 集群搭建

11.1 环境准备

192.168.0.38  jdk1.8 mysql nginx
192.168.0.39  jdk1.8 nacos
192.168.0.40  jdk1.8 nacos
192.168.0.41  jdk1.8 nacos

11.2 解压3台nacos安装包

tar -zxvf nacos-server-1.2.0.tar.gz

11.3 数据库准备

(1) 用navicat链接192.168.0.38 的mysql
(2) 新建数据库nacos_config
(2) 执行脚本/usr/local/nacos/conf/nacos-mysql.sql
在这里插入图片描述

/******************************************/
/*   数据库全名 = 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 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(512) 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');

11.4 修改3台nacos配置文件application.properties

cd /usr/local/nacos/conf
vim application.properties

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

在这里插入图片描述

11.5 修改3台nacos配置文件cluster.conf

cd /usr/local/nacos/conf
cp cluster.conf.example  cluster.conf
vim cluster.conf

192.168.0.39:8848
192.168.0.40:8848
192.168.0.41:8848

11.6 修改nginx配置

upstream nacos {
   server 192.168.0.39:8848;
   server 192.168.0.40:8848;
   server 192.168.0.41:8848;
}

server {
    listen       8848;
    server_name  localhost;
    location / {
       proxy_pass http://nacos;
     }
}

server {
    listen       80;
    server_name  localhost;
    location / {
       root   html;
       index index.html index.htm;
     }
 }

在这里插入图片描述

11.7 启动nginx

/usr/local/nginx/sbin/nginx

在这里插入图片描述

11.8 启动3台nacos

cd /usr/local/nacos/bin
./startup.sh
#3台查看日志
tail -f /usr/local/nacos/logs/start.out

在这里插入图片描述

11.9 查看结果

http://192.168.0.38:8848/nacos/#/configurationManagement?dataId=&group=&appName=&namespace=

在这里插入图片描述

12 服务提供者注册到集群中

12.1 修改provider、provider-slave的application.yml


spring:
  application:
    name: provider
  cloud:
     nacos:
       discovery:
         #集群配置nginx地址
         server-addr: 192.168.0.38:8848

12.2 启动provider、provider-slave主程序

在这里插入图片描述

12.3 查看

在这里插入图片描述

GITHUB

#分支Nacos-release-v1.0
https://github.com/zhurongsheng666/spring-cloud-alibaba

http://www.niftyadmin.cn/n/4556789.html

相关文章

为什么那么多人都喜欢C.K呢 她到底是弄啥了

其实就是个自杀了的神经病 觉得颓废与自残很时尚 喜欢她的大多是些小P孩

spring-expression-01

表达式步骤 public static void main(String[] args) {//将一整个语句直接定义了字符串String str "(\"Hello \" \"World!!!\").substring(6, 9)";//1定义一个专属的表达式解析工具ExpressionParser parser new SpelExpressionParser() ;//2定…

【Spring Cloud Alibaba】【Hoxton】Sentinel 入门-限流-降级(一)

1 Nacos 入门-配置中心-集群 2 Sentinel 入门-限流-降级&#xff08;一&#xff09; 3 Sentinel 热点规则-SentinelResource-熔断-持久化&#xff08;二&#xff09; 4 Seata从入门到实战 1 Sentinel 简介 随着微服务的流行&#xff0c;服务和服务之间的稳定性变得越来越重要…

【信源编码技术】实验1-浊音清音爆破音的时域及频域特性分析

实验内容 使用Audacity软件录制浊音、清音和爆破音&#xff0c;生成出其频谱图&#xff0c;观察并对比分析其时域及频域的特性。 浊音、清音、爆破音的语音学定义 浊音 发音时声带振动的音被称为浊音&#xff0c;如m、n、l、r。 清音 发音时声带不振动的音被称为清音&…

如何将下面的C语言程序改为C#语言程序

将readline所获得的字符串分解... 只能自己编码 如果需要把空格作为分隔符的话 上面采取的是一行只能读取一个数的方法 sum2); }} 答案补充 c#里面貌似没有scanf类似的函数 sum1 sum 3 - i]; } sum sum1 sum2; Console.WriteLine("sum{0}/tsum1{1}/tsum2{2}/n" i];…

asp.net 毕业设计遗忘的知识点(四)

简单导航栏menu 1.asp.net menu控件的那个黑色小三角箭头怎么去掉&#xff1f; menu控件的属性StaticEnableDefaultPopOutImage false 2.鼠标悬停背景颜色 在StaticHoverStyle和DynamicHoverStyle中 3.级菜单样式 Level******* 4.静态显示行为 使用“Menu”控件的“StaticDisp…

【Spring Cloud Alibaba】【Hoxton】Sentinel 热点规则-@SentinelResource-熔断-持久化(二)

1 Nacos 入门-配置中心-集群 2 Sentinel 入门-限流-降级&#xff08;一&#xff09; 3 Sentinel 热点规则-SentinelResource-熔断-持久化&#xff08;二&#xff09; 4 Seata从入门到实战 1 热点参数限流 何为热点&#xff1f;热点即经常访问的数据。很多时候我们希望统计某个…

3投资乘数k为多少 2均衡的储蓄量s为多少 已知消费函数为c=100+0.6y i=60试求1均衡国民收入y是多少

如果充业的Yf&#xff1d;1000 为使该经济达到充分就业的均衡状态 那么 so I300 so Y400(2)均衡的储蓄量S 即Y1000.6Y60 则投资量应满足YfCI1000.6YfI&#xff1d;1000 &#xff1a;(1)均衡的国民收入Y (3)如果充分就业的国民收入水平为Yf1000 当市均时SI60 根据产品市场均衡条…