Nacos注册中心及配置管理服务

Nacos安装

下载安装包

在Nacos的GitHub页面,提供有下载链接,可以下载编译好的Nacos服务端或者源代码
GitHub主页:https://github.com/alibaba/nacos
GitHub的Release下载页:https://github.com/alibaba/nacos/releases
在这里插入图片描述点击tags显示各种版本,进行下载即可
在这里插入图片描述
在点击tags后,在页面的最下方是下载的安装包
在这里插入图片描述

windows版本安装

1、解压缩到任意非中文目录下,bin:启动脚本 conf:配置文件
在这里插入图片描述
2、端口配置
Nacos的默认端口是8848,如果你电脑上的其它进程占用了8848端口,请先尝试关闭该进程。
如果无法关闭占用8848端口的进程,也可以进入nacos的conf目录,修改application.properties配置文件中的端口:
在这里插入图片描述
3、启动:进入bin目录,双击startup.cmd也可直接在上方目录中进入cmd输入startup.cmd -m standalone命令打开。standalone代表单机模式,还有集群模式
在这里插入图片描述
4、访问:http://192.168.192.1:8848/nacos/index.html这里的地址就是上图中Console的地址
在这里插入图片描述
默认账号和密码都是nacos,进入后:windows版本就安装成功
在这里插入图片描述

Linux版本安装

1、Nacos依赖于JDK运行,索引Linux上也需要安装JDK才行
2、将下载好的nacos-server-1.4.1.tar.gz上传至服务器/usr/local/src目录下
3、tar -zxvf nacos-server-1.4.1.tar.gz解压安装包
在这里插入图片描述
4、端口配置与windows一样
5、在nacos/bin目录中,输入sh startup.sh -m standalone命令启动nacos

Nacos快速入门

Nacos是SpringCloudAlibaba的组件,而SpringCloudAlibaba也遵循SpringCloud中定义的服务注册、服务发现规范。因此使用Nacos和使用Eureka对于微服务来说,并没有太大区别。
主要差异:依赖不同,服务地址不同

引入依赖

在cloud-demo父工程的pom文件中的<dependencyManagement>中引入SpringCloudAlibaba的依赖:

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>2.2.6.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

首先注释掉eureka的依赖
然后在user-service和order-service中的pom文件中引入nacos-discovery依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
配置nacos地址

首先注释掉eureka的地址
在user-service和order-service的application.yml中添加nacos地址:

spring:
  cloud:
    nacos:
      server-addr: localhost:8848
重启user-service和order-service服务

重启微服务后,登录nacos管理页面,可以看到微服务信息
在这里插入图片描述

Nacos服务分级存储模型

一个服务可以有多个实例,例如我们的user-service,可以有:127.0.0.1:8081127.0.0.1:8082127.0.0.1:8083,假如这些实例分布于全国各地的不同机房,例如8081为上海机房,8082为上海机房,8083为杭州机房
Nacos就将同一机房内的实例 划分为一个集群
也就是说,user-service是服务,一个服务可以包含多个集群,如杭州、上海,每个集群下可以有多个实例,形成分级模型,如图:

在这里插入图片描述

服务跨集群调用问题

服务调用尽可能选择本地集群的服务,跨集群调用延迟较高
本地集群不可访问时,再去访问其他机集群
在这里插入图片描述
现在集群属性为默认,也就是没有集群
在这里插入图片描述

配置服务集群属性

1、修改user-service的application.yml文件,添加集群配置:

spring:
  cloud:
    nacos:
      server-addr: localhost:8848
      discovery:
        cluster-name: HZ # 集群名称

咱就是说,UserApplication 和UserApplication2启动后就成为了HZ的集群,但是在启动UserApplication3之前将HZ改成SH那启动后的UserApplication3就是SH的集群了,这时如果重启UserApplication和UserApplication2他们也成为了SH集群。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

NacosRule同集群优先的负载均衡

默认的ZoneAvoidanceRule并不能实现根据同集群优先来实现负载均衡。
因此Nacos中提供了一个NacosRule的实现,可以优先从同集群中挑选实例。
但我们最终需要实现的是OrderService远程调用UserService时,优先选择本地集群,因此我们还需要给OrderService也配置一个本地集群属性
在这里插入图片描述
这是可以看到OrderSerice也在HZ集群
在这里插入图片描述
修改负载均衡规则
修改order-service的application.yml文件,修改负载均衡规则:

userservice: # 给某个微服务配置负载均衡规则,这里是userservice服务
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则

在这里插入图片描述
这样在从浏览器从order service发送请求后,SH的没有被访问,优先选择本地集群,但是在本地集群中的访问是一种随机的访问。
当我们停掉本地的服务集群,就会出现一次跨集群访问的警告

NacosRule负载均衡策略

1、优先选择同集群服务实例列表
2、本地集群找不到提供者,才去其他集群寻找,并且会发出警告
3、确定了可用实例列表后,再采用随机负载均衡挑选实例

根据权重负载均衡

实际部署中会出现这样的场景:

服务器设备性能有差异,部分实例所在机器性能较好,另一些较差,我们希望性能好的机器承担更多的用户请求。

但默认情况下NacosRule是同集群内随机挑选,不会考虑机器的性能问题。
因此,Nacos提供了权重配置来控制访问频率,权重越大则访问频率越高。
1、在nacos控制台,找到user-service的实例列表,点击编辑,即可修改权重:
在这里插入图片描述

实例的权重控制

Nacos控制台可以设置实例的权重值,0~1之间
同集群内的多个实例,权重越高被访问的频率越高
如果权重修改为0,则该实例永远不会被访问

环境隔离 - namespace

Nacos提供了namespace来实现环境隔离功能。
nacos中可以有多个namespace, namespace下可以有group、service等,不同namespace之间相互隔离,例如不同namespace的服务互相不可见
在这里插入图片描述

创建namespace

1、默认情况下,所有service、data、group都在同一个namespace,名为public:
在这里插入图片描述
2、新建命名空间
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

给微服务配置namespace

给微服务配置namespace只能通过修改配置来实现。

  cloud:
    nacos:
      server-addr: localhost:8848 #nacos服务地址
      discovery:
        cluster-name: HZ
        namespace: 8159c4ac-7682-4d6a-bf02-f74e30dcbaa9 #命名空间的ID

重启order-service后,访问控制台,可以看到下面的结果:
在这里插入图片描述
在这里插入图片描述
此时访问order-service,因为namespace不同,会导致找不到userservice,控制台会报错
在这里插入图片描述

Nacos环境隔离

1、namespace用来做环境隔离
2、每个namespace都有唯一的ID
3、不同的namespace下的服务不可见

Nacos与Eurake的区别

Nacos的服务实例分为两种类型:
临时实例:如果实例宕机超过一定时间,会从服务列表剔除,默认的类型。
非临时实例:如果实例宕机,不会从服务列表剔除,也可以叫永久实例。

配置一个服务实例为永久实例:
spring:
  cloud:
    nacos:
      discovery:
        ephemeral: false # 设置为非临时实例
Nacos与Eurake的共同点:

都支持服务的注册和服务拉取
都支持服务提供者心跳方式做健康检测

Nacos与Eurake的区别:

1、Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时模式采用主动检测模式
2、临时实例心跳不正常会被剔除,非临时实例不会被剔除
3、Nacos支持服务列表表更的消息推送模式,服务列表更新及时
4、Nacos集群采用AP(数据可用性)方式,当集群中存在非临时实例时,采用CP(数据的可靠性和一直性)模式,Eureka采用AP方式。

统一配置管理

Nacos除了可以做注册中心,同样可以做配置管理来使用
搭建环境过程中,有两个微服务,每个微服务都有要数据库查询,并且服务之间会有相互调用的功能,为了完成相互调用,我们将服务注册到注册中心,消费者就可以在注册中心完成服务的发现完成服务的获取和负载均衡,完成远程调用,当微服务部署的实例越来越多,达到数十、数百时,逐个修改微服务配置就会让人抓狂,而且很容易出错。我们需要一种统一配置管理方案,可以集中管理所有实例的配置。并且其他的服务不用重启,这个修改可以立马生效,这样我们就需要一个配置管理的服务,用来记录微服务中的核心配置,在微服务启动的时候就会读取配置管理服务中的配置,在和本地的配置进行结合完成完整的配置。
在这里插入图片描述
Nacos一方面可以将配置集中管理,另一方面可以在配置变更时,计时通知微服务,实现配置的热更新。
在这里插入图片描述

在nacos中添加配置文件

在这里插入图片描述

1、启动Nacos进入配置管理页面
在这里插入图片描述
2、在弹出的表单中,填写配置信息:
核心的配置,需要热更新的配置才有放到nacos管理的必要,基本不会变的一些配置还时保存在微服务本地比较好

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

从微服务拉取配置

微服务要拉取nacos中管理的配置,并且与本地的application.yml配置合并,才能完成项目启动。
1、引人Nacos的配置管理客户端管理依赖,在userservice服务中,引入nacos-config的客户端依赖:

<!--nacos配置管理依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

2、在usrservice中的resource目录添加一个bootstrap.yml文件,这个文件是引导类,优先级高于application.yml,当然了这里也就不需要application中共同的配置

spring:
  application:
    name: userservice # 服务名称
  profiles:
    active: dev #开发环境,这里是dev 
  cloud:
    nacos:
      server-addr: localhost:8848 # Nacos地址
      config:
        file-extension: yaml # 文件后缀

3、读取nacos配置
在userservice中的UserController中添加业务逻辑,读取我们在nacous中设置的pattern.dateformat配置:

package cn.itcast.user.web;

import cn.itcast.user.pojo.User;
import cn.itcast.user.service.UserService;
import com.alibaba.nacos.api.config.annotation.NacosValue;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.web.bind.annotation.*;

import java.text.DateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @Value("${pattern.dateformat}")
    

    private String dateformat;

    @GetMapping("/now")
    public String now() {
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));
    }


    /**
     * 路径: /user/110
     *
     * @param id 用户id
     * @return 用户
     */
    @GetMapping("/{id}")
    public User queryById(@PathVariable("id") Long id) {
        return userService.queryById(id);
    }
}

4、配置完成,可以看到在nacos中配置的文件已经被bootstrap.yam加载
在这里插入图片描述

配置热更新

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

修改配置文件userservice-dev.yam内容,希望页面信息立马发生变化
在这里插入图片描述
但实际没有发生变化
在这里插入图片描述

方式一:@RefreshScope

在@Value注入的变量所在类上添加注解@RefreshScope后重新启动服务可以看到年月日的信息,但是这次因为我们重启了,因此需要在userservice-dev.yaml中重新修改后/后刷新
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
此次不重启服务器,直接刷新效果显著,已经实现热部署
在这里插入图片描述

方式二:@ConfigurationProperties

使用@ConfigurationProperties注解代替@Value注解。
1、在user-service服务中,添加一个类,读取patterrn.dateformat属性:

package cn.itcast.user.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@Data
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
    private String dateformat;
}

2、在UserController中使用这个类代替@Value:

package cn.itcast.user.web;

import cn.itcast.user.config.PatternProperties;
import cn.itcast.user.pojo.User;
import cn.itcast.user.service.UserService;
import com.alibaba.nacos.api.config.annotation.NacosValue;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.*;

import java.text.DateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

@Slf4j
@RestController
@RequestMapping("/user")
//@RefreshScope//属性刷新
public class UserController {

    @Autowired
    private UserService userService;
/*
    @Value("${pattern.dateformat}")
    //@NacosValue("{pattern.dateformat}")*/

    //private String dateformat;
    @Autowired
    private PatternProperties properties;


    @GetMapping("/now")
    public String now() {
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern(properties.getDataformat()));
    }


    /**
     * 路径: /user/110
     *
     * @param id 用户id
     * @return 用户
     */
    @GetMapping("/{id}")
    public User queryById(@PathVariable("id") Long id) {
        return userService.queryById(id);
    }
}

4、运行结果
在这里插入图片描述

多环境配置共享

微服务启动时,会去nacos读取多个配置文件,例如:
[spring.application.name]-[spring.profiles.active].yaml,例如:userservice-dev.yaml
[spring.application.name].yaml,例如:userservice.yaml
[spring.application.name].yaml不包含环境,因此可以被多个环境共享。

下面通过案例来测试配置共享

添加一个环境共享配置

在nacos中添加一个userservice.yaml文件
在这里插入图片描述
在这里插入图片描述

在userservice中读取共享配置

1、在userservice服务中,修改PatternProperties类,读取新添加的属性:
在这里插入图片描述
2、在userservice服务中,修改UserController,添加一个方法:
在这里插入图片描述
3、运行两个User Application,使用不同的profile
修改User Application2这个启动项,改变其profile的值,
在这里插入图片描述
但是这个User Application在bootstrap.yaml中配置的环境是dev,所以它可以读到userservic-dev.yaml和userservice.yaml两个文件的值,User Application2在此时就是读不到userservic-dev.yaml这个文件的,
在这里插入图片描述

配置共享的优先级

当nacos、服务本地同时出现相同属性时,优先级有高低之分
在这里插入图片描述

Nacos集群管理

在这里插入图片描述
其中包含3个nacos节点,然后一个负载均衡器代理3个Nacos。这里负载均衡器可以使用nginx。

我们计划的集群结构:请添加图片描述
三个nacos节点的地址:
在这里插入图片描述

初始化数据库

Nacos默认数据存储在内嵌数据库Derby中,不属于生产可用的数据库。
首先新建一个数据库,命名为nacos,而后导入下面的SQL:

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   */
/*   表名称 = 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(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   */
/*   表名称 = 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   */
/*   表名称 = 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(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_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

参考本文开始

配置nacos

进入nacos的conf目录,修改配置文件cluster.conf.example,重命名为cluster.conf:
然后添加内容:

127.0.0.1:8845
127.0.0.1.8846
127.0.0.1.8847

在这里插入图片描述
然后修改application.properties文件,添加数据库配置

spring.datasource.platform=mysql

db.num=1

db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=123
启动

将nacos文件夹复制三份,分别命名为:nacos1、nacos2、nacos3
然后分别修改三个文件夹中的application.properties,
nacos1:server.port=8845

nacos2:server.port=8846

nacos3:server.port=8847
分别启动:startup.cmd

nginx反向代理

修改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://localhost/nacos即可。
代码中application.yml文件配置如下:

spring:
  cloud:
    nacos:
      server-addr: localhost:80 # Nacos地址
优化

1、实际部署时,需要给做反向代理的nginx服务器设置一个域名,这样后续如果有服务器迁移nacos的客户端也无需更改配置.
2、Nacos的各个节点应该部署到多个不同服务器,做好容灾和隔离

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Nacos是一个开源的注册中心配置管理平台,可以帮助开发者更方便地管理微服务架构中的服务注册、发现和配置管理等功能。下面介绍一下Nacos注册中心及其配置管理的相关内容: 1. 注册中心 Nacos注册中心功能可以帮助开发者更方便地实现服务的注册和发现,从而实现服务间的通信。注册中心的主要功能包括服务注册、服务发现和服务心跳检测。 服务注册:在Nacos注册中心上注册服务,可以将服务的名称、IP地址和端口号等信息注册到注册中心上,其他服务可以通过查询注册中心获取该服务的信息。 服务发现:服务发现是指服务在运行时通过查询Nacos注册中心获取其他服务的地址和端口号等信息,从而实现服务之间的通信。 服务心跳检测:Nacos注册中心可以定期检测服务是否在线,如果发现服务不可用,则会将该服务注册中心中删除。 2. 配置管理 除了注册中心功能外,Nacos还可以用作配置管理平台,可以帮助开发者更方便地管理配置文件。配置管理的主要功能包括配置发布、配置查询和配置监听。 配置发布:在Nacos配置管理平台上发布配置文件,可以将配置文件的内容保存到Nacos服务器上,其他服务可以通过查询Nacos获取该配置文件的内容。 配置查询:服务可以通过查询Nacos获取配置文件的内容,并且可以动态更新配置文件的内容,从而实现配置文件的动态管理。 配置监听:Nacos可以监听配置文件的变化,并且可以及时通知服务进行相应的处理,从而实现配置文件的实时管理。 总之,Nacos注册中心配置管理功能可以帮助开发者更方便地实现微服务架构中的服务注册、发现和配置管理等功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zgDaren

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值