SpringCloud Alibaba Nacos服务注册和配置中心

SpringCloud Alibaba Nacos服务注册和配置中心,第1张

SpringCloud Alibaba Nacos服务注册和配置中心 SpringCloud Alibaba Nacos服务注册和配置中心

文章目录
  • SpringCloud Alibaba Nacos服务注册和配置中心
  • 一、Nacos介绍
  • 二、Nacos 安装
  • 三、Nacos 作为服务注册中心
  • 四、Nacos 替换Config做服务配置中心
    • 1. 基础配置
    • 2. 分组配置
    • 3. 命名空间
  • 五、Nacos 集群和持久化配置

一、Nacos介绍

为什么叫Nacos?

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

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

Nacos能干嘛?

  1. 替代Eureka做服务注册中心
  2. 替代Config做服务配置中心

去哪里下载?
Nacos中文官网

如何引用Nacos?


	com.alibaba.cloud
	spring-cloud-starter-alibaba-nacos-discovery

二、Nacos 安装

这里我采用的是docker安装

  1. 下载nacos镜像
docker pull nacos/nacos-server:1.1.4

  1. 运行下载的镜像
docker run -d -p 8848:8848 --env MODE=standalone --name nacos nacos/nacos-server:1.1.4

  1. 测试访问:ip地址:8848/nacos
三、Nacos 作为服务注册中心
  1. 首先我们需要知道,该引入什么样的依赖,根据官方文档可知,我们的父级项目引入依赖:

    
        
            com.alibaba.cloud
            spring-cloud-alibaba-dependencies
            2.1.0.RELEASE
            pom
            import
        
    

  1. 创建子模块cloudalibaba-provider-payment9001
  2. POM添加Nacos依赖
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-discovery
        
  1. yml配置信息
server:
  port: 9001

spring:
  application:
    name: nacos-payment-provider
  cloud:
    nacos:
      discovery:
        server-addr: 114.55.56.149:8848 # 配置Nacos地址

management:
  endpoints:
    web:
      exposure:
        include: "*"
  1. 主启动类
package com.atguigu.springcloud.alibaba;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient
public class PaymentMain9001 {

    public static void main(String[] args){

        SpringApplication.run(PaymentMain9001.class,args);
    }
}
  1. 控制层
package com.atguigu.springcloud.alibaba.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@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 + "t id : " + id;

    }
}
  1. 测试启动9001后,访问http://114.55.56.149:8848/nacos,发现出现了我们配置的服务名

  2. 复制9001创建9002子项目,启动后发现实例变为2

    点开后详情如下:

    服务提供者创建后,我们在创建服务的消费者cloudalibaba-consumer-nacos-order83

  3. pom


            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-discovery
        
  1. yml
server:
  port: 83


spring:
  application:
    name: nacos-order-consumer
  cloud:
    nacos:
      discovery:
        server-addr: 114.55.56.149:8848 # 配置Nacos地址

service-url:
  nacos-user-service: http://nacos-payment-provider
  1. 主启动类
package com.atguigu.springcloud.alibab;


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@EnableDiscoveryClient
@SpringBootApplication
public class OrderNacosMain83 {

    public static void main(String[] args){

        SpringApplication.run(OrderNacosMain83.class,args);
    }
}

  1. RestTemplate类,用于负载均衡,因为Nacos也是支持负载均衡的,依赖中引入了Ribbon
package com.atguigu.springcloud.alibab.config;

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class ApplicationContextConfig {

    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate(){

        return new RestTemplate();
    }
}
  1. 控制层
package com.atguigu.springcloud.alibab.controller;


import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import javax.annotation.Resource;

@RestController
@Slf4j
public class OrderNacosController {

    @Resource
    private RestTemplate restTemplate;

    @Value("${service-url.nacos-user-service}")
    private String serverURL;

    @GetMapping(value = "/consumer/payment/nacos/{id}")
    public String paymentInfo(@PathVariable("id") Long id){

        return restTemplate.getForObject(serverURL+"/payment/nacos/" + id,String.class);
    }
}

  1. 测试,启动消费者83项目后我们查看服务注册列表如下:

浏览器访问地址localhost:83/consumer/payment/nacos/13,我们访问多次后,发现交替访问服务提供者9001和9002 ,实现了负载均衡。


Nacos支持AP和CP模式的切换

C是所有节点在同一时间看到的数据是一致的;而A的定义是所有的请求都会受到响应。

何时选择使用何种模式?
一般来说,如果不需要存储服务级别的信息且服务实例时通过nacos-client注册,并能够保持心跳上报,那么就可以选择AP模式。当前主流的服务如Spring cloud 和Dobbo服务,都是用于AP模式,AP模式为了服务的可能性而减弱了一致性,因此AP模式下只支持注册临时实例。

如果需要在服务级别编辑或者存储配置信息,那么CP是必须的,K8S服务和DNS服务则适用于CP模式。CP模式下则支持注册持久化实例,此时则是以Raft协议来集群运行模式,该模式下注册实例之前必须先注册服务,如果服务不在,则会返回错误。

通过请求:
curl -X PUT '$NACOS-SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP’

关于CAP的详细介绍可以点击此处

四、Nacos 替换Config做服务配置中心 1. 基础配置
  1. 创建子项目cloudalibaba-config-nacos-client:3377
  2. POM添加依赖

            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-config
        

        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-discovery
        
  1. 主启动类
package com.atguigu.springcloud.alibaba;


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient
public class NacosConfigClientMain3377 {

    public static void main(String[] args){

        SpringApplication.run(NacosConfigClientMain3377.class,args);
    }
}
  1. yml配置,本次有俩个yml文件
    1. application.yml:用于自己的独立的配置信息
spring:
  profiles:
    active: dev # 表示开发环境
2.	bootstrap.yml:用于配置中心的公有的配置信息
server:
  port: 33877

spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: 114.55.56.149:8848 # 配置Nacos服务注册中心地址
      config:
        server-addr: 114.55.56.149:8848 # 配置Nacos配置中心地址
        file-extension: yaml # 指定yaml格式的配置

如何获取Nacos配置中心的配置呢?

官网给出来了一套公式: $ {spring.application.name} -$ {spring.profiles.active}.${spring.cloud.nacos.config.file-extension}

  • prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix 来配置。
  • spring.profile.active 即为当前环境对应的profile。当 spring.profile.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 p r e f i x . {prefix}. prefix.{file-extension}
  • file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file.extension 来配置。目前支持properties和 yml 类型。
  • 通过 Spring Cloud 原生注解 @RefreshScope 实现配置自动更新。

本案例中配置翻译为:nacos-config-client-dev.yaml

如何在nacos服务中心添加远程配置呢?

  1. 登陆Nacos客户端,访问如下菜单. 填写我们的配置,点击发布

  1. 看到多处一行我们添加的配置信息

测试:配置好,启动3377模块,访问:http://localhost:3377/config/info,获取到了我们配置中心的配置信息。

我们编辑远程配置中心,将version改为2

没有重启3377的情况下再次访问:http://localhost:3377/config/info,发现获取到了最新的配置信息,实现了动态刷新!

2. 分组配置

多环境多项目管理所面临的的问题:

  1. 实际开发中,通常一个系统会准备dev开发环境,test测试环境,prod生产环境。如何保证指定环境启动时服务能正确读取到Nacos上相应环境的配置文件呢?
  2. 一个大型分布式微服务系统会有很多微服务子项目,每个微服务项目又都会有相应的开发环境,测试环境,预发环境,正式环境…那怎么对这些微服务配置进行管理呢?

Nacos的图形化管理界面:

  1. 配置管理

  2. 命名空间

命名空间是由 Namespace + Group + Data ID 组成,这三者是什么关系呢,为什么这么组成呢?

  1. 类似Java里面的package名和类名,最外层的namespace是可以用于区分部署环境,Group和DataID逻辑上区分俩个目标对象
  2. 三者的情况为:

默认情况:Namespace=public,Group=DEFAULT_GROUP,默认Cluster是DEFAULT

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

根据 Namespace + Group + Data ID 我们可以实时的切换配置文件,比如我们再建一个远程配制文件:


然后我们修改application.yml文件信息:

无需重启的情况下即可获得我们新建的配置文件信息:

分组该如何用呢?
我们再次创建俩条Nacos配置文件,他们的Data ID相同,但是分组不相同

代码中如何确定我们需要加载Nacos中XX分组的配置信息呢?
只需要在配置信息中加入如下代码即可确定:

同样无需重启下即可获取到想要的分组下的配置信息。

3. 命名空间

Nacos中会有一个默认的命名空间public:

我们配置列表下的配置信息默认都是在该命名空间下的。现在我们创建俩个新的命名空间:

这时候我们在服务里列表下也多了俩个命名空间:

那么我们如何在代码配置中选择我们要加载的命名空间呢,我们需要到需要加载的命名空间的ID:

然后把命名空间的ID复制到配置文件中即可:

五、Nacos 集群和持久化配置

集群架构部署图:

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

Nacos支持三种部署模式:

  • 单机模式:用于测试和单机使用。
  • 集群模式:用于生产环境,确保高可用。
  • 多集群模式:用于多数据中心场景。

Nacos默认自带的是嵌入式数据库Derby。 如果我们做Nacos的集群,Nacos集群数据的统一性上就会有问题,所以我们需要切换Mysql。

本次使用docker做Nacos的集群,以及每台Nacos的数据库都配置同一台Mysql数据库。

  1. 拉取mysql镜像
docker pull mysql:5.7
  1. 运行mysql镜像
docker run -d -p 3310:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql101 mysql:5.7
  1. 查看mysql容器运行状态


4. 使用Navicat连接数据库,做后续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 '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';





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='增加租户字段';






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';





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';





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';





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容量信息表';





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='多租户改造';






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', 'a$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE);

INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');

  1. 拉取Nacos镜像
docker pull nacos/nacos-server:1.1.4
  1. 创建第一台Nacos容器并切换数据库为我们刚刚运行的mysql
docker run -d -e MODE=standalone -e SPRING_DATASOURCE_PLATFORM=mysql -e MYSQL_MASTER_SERVICE_HOST=114.55.56.149 -e MYSQL_MASTER_SERVICE_PORT=3310 -e MYSQL_MASTER_SERVICE_USER=root -e MYSQL_MASTER_SERVICE_PASSWORD=123456 -e MYSQL_MASTER_SERVICE_DB_NAME=nacos -e MYSQL_SLAVE_SERVICE_HOST=114.55.56.149  -p 8849:8848  --name nacos002 nacos/nacos-server:1.1.4
  • SPRING_DATASOURCE_PLATFORM 要切换的数据库类型。
  • MYSQL_MASTER_SERVICE_HOST 要切换的数据库IP地址
  • MYSQL_MASTER_SERVICE_DB_NAME 要切换的数据库名称
  • MYSQL_SLAVE_SERVICE_HOST 也需要配置,因为通过查看nacos容器内的 config/application.properties 文件,会发现这此值未设置默认值,所以会导致启动报错,容器启动不起来,这里可以与主数据库一致。
  1. 启动另一台Nacos
docker run -d -e MODE=standalone -e SPRING_DATASOURCE_PLATFORM=mysql -e MYSQL_MASTER_SERVICE_HOST=114.55.56.149 -e MYSQL_MASTER_SERVICE_PORT=3310 -e MYSQL_MASTER_SERVICE_USER=root -e MYSQL_MASTER_SERVICE_PASSWORD=123456 -e MYSQL_MASTER_SERVICE_DB_NAME=nacos -e MYSQL_SLAVE_SERVICE_HOST=114.55.56.149  -p 8850:8848  --name nacos003 nacos/nacos-server:1.1.4
  1. 查看下俩太Nacos 是否启动起来了
  2. 测试,访问8849,并创建配置test。

    然后访问8850,发现可以加载到在8849创建的额test

    以及查看我们的nacos数据库发现多了一条test数据:

即实现了Nacos集群以及使用同一台mysql数据库。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5693254.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存