【SpringCloudAlibaba】之Nacos集群搭建Demo练习(Linux版本Docker镜像构建)

前言

本篇博客主要是分享nacos 集群搭建及配置,通过demo的展示提高自己的技术同时,帮助其他人,文章涵盖了,Nacos持久化配置解释,及Linux版的Nacos搭建


架构图:

【SpringCloudAlibaba】之Nacos集群搭建Demo练习(Linux版本Docker镜像构建)_第1张图片
默认Nacos使用嵌入式数据库实现数据的存储,所以如果启动多个默认的配置下的nacos节点,数据存储是存在一致性问题的。为了解决这个问题,Nacos采用了集群存储的方式来支持集群化部署,目前只支持mysql的存储。
【SpringCloudAlibaba】之Nacos集群搭建Demo练习(Linux版本Docker镜像构建)_第2张图片

Nacos 支持三种部署模式

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

Linux搭建Nacos并进行mysql持久化

架构配置:

  • 1个Nginx
  • 3个Nacos (1.1.4版本)
  • 1个mysql (5.7版本)

安装nacos镜像

docker pull nacos/nacos-server:1.1.4

【SpringCloudAlibaba】之Nacos集群搭建Demo练习(Linux版本Docker镜像构建)_第3张图片
漫长的等待… …

  • 更换docker镜像源
vi /etc/docker/daemon.json
{

  "registry-mirrors": ["https://registry.docker-cn.com"]

}

  • 重新启动

systemctl restart docker.service

【SpringCloudAlibaba】之Nacos集群搭建Demo练习(Linux版本Docker镜像构建)_第4张图片
【SpringCloudAlibaba】之Nacos集群搭建Demo练习(Linux版本Docker镜像构建)_第5张图片

  • 查看镜像文件
docker images

【SpringCloudAlibaba】之Nacos集群搭建Demo练习(Linux版本Docker镜像构建)_第6张图片
安装完成以后,我们先不进行配置我们的nacos,先安装mysql数据库

安装mysql镜像

docker pull mysql:5.7

【SpringCloudAlibaba】之Nacos集群搭建Demo练习(Linux版本Docker镜像构建)_第7张图片
【SpringCloudAlibaba】之Nacos集群搭建Demo练习(Linux版本Docker镜像构建)_第8张图片
启动mysql:

  • -p 指定端口映射,此处映射 主机3306端口 到 容器的3306端口
  • -e MYSQL_ROOT_PASSWORD=root指定密码
  • –name:容器名,此处命名为mysql
docker run -p 3306:3306 --name mysql03 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7

在这里插入图片描述
检查容器是否正确运行:

docker container ls

在这里插入图片描述

  • 连接mysql
    docker:
    在这里插入图片描述
docker exec -it  37598167bda9 bash 

使用mysql命令连接mysql

mysql -uroot -p

【SpringCloudAlibaba】之Nacos集群搭建Demo练习(Linux版本Docker镜像构建)_第9张图片
Windows:
【SpringCloudAlibaba】之Nacos集群搭建Demo练习(Linux版本Docker镜像构建)_第10张图片

Nacos默认derby数据库切换到mysql:

  • nacos-server-1.1.4\nacos\conf目录下找到sql脚本:nacos-mysql.sql
    查看容器:
    在这里插入图片描述
    发现没有docker容器里面没有找到nacos,需要我们启动镜像,然后进入nacos容器中:
    于是乎我就在官方地址知己下载了一个解压找到我们需要的脚本:
    https://github.com/alibaba/nacos/releases/download/1.1.4/nacos-server-1.1.4.zip
    【SpringCloudAlibaba】之Nacos集群搭建Demo练习(Linux版本Docker镜像构建)_第11张图片
    注意点,上面的脚本里面是没有,下面的语句的,需要在运行时添加,不过我博客里面这个脚本已经添加了
CREATE DATABASE nacos_config;
use nacos_config;

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


把上面的脚本在数据中执行,结果如下图所示:
【SpringCloudAlibaba】之Nacos集群搭建Demo练习(Linux版本Docker镜像构建)_第12张图片

  • nacos-server-1.1.4\nacos\conf目录下找到application.properties
    https://nacos.io/zh-cn/docs/deployment.html
    【SpringCloudAlibaba】之Nacos集群搭建Demo练习(Linux版本Docker镜像构建)_第13张图片
    修改黑框里面的配置文件,根据实际情况(Linux与Windows不一样好像,看好了,兄弟们),进行修改
    【SpringCloudAlibaba】之Nacos集群搭建Demo练习(Linux版本Docker镜像构建)_第14张图片
    【SpringCloudAlibaba】之Nacos集群搭建Demo练习(Linux版本Docker镜像构建)_第15张图片
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://192.168.21.129:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=root

然后把我们上面的application.properties复制到docker-compose.yml所在目录;

  • 首先要确保,docker容器上面已经安装了 docker-compose :

Docker Compose是一个用来定义和运行复杂应用的Docker工具。一个使用Docker容器的应用,通常由多个容器组成。使用Docker Compose不再需要使用shell脚本来启动容器。
Compose 通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景。

  • Compose和Docker兼容性
    在这里插入图片描述
  • 直接下载就好了,。。。。。
  • 运行以下命令以下载Docker Compose的当前稳定版本:
    https://docs.docker.com/compose/install/
sudo curl -L "https://github.com/docker/compose/releases/download/1.25.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

  • 将可执行权限应用于二进制文件:
sudo chmod +x /usr/local/bin/docker-compose
  • 测试安装
docker-compose --version

在这里插入图片描述
【注意】如果命令docker-compose在安装后失败,请检查您的路径。您也可以创建指向/usr/bin或路径中任何其他目录的符号链接。
创建nacos文件夹,存放配置文件
【SpringCloudAlibaba】之Nacos集群搭建Demo练习(Linux版本Docker镜像构建)_第16张图片
【SpringCloudAlibaba】之Nacos集群搭建Demo练习(Linux版本Docker镜像构建)_第17张图片

  • 通过rz命令把文件上传到,我们新创建的目录里面:
    【SpringCloudAlibaba】之Nacos集群搭建Demo练习(Linux版本Docker镜像构建)_第18张图片
    ┭┮﹏┭┮ 卡死了,
    【SpringCloudAlibaba】之Nacos集群搭建Demo练习(Linux版本Docker镜像构建)_第19张图片
    【SpringCloudAlibaba】之Nacos集群搭建Demo练习(Linux版本Docker镜像构建)_第20张图片
    在这里插入图片描述

创建docker-compose.yml配置文件

version: '2'
services:
  mysql:
    image: a4fdfd462add
    container_name: mysql
    restart: unless-stopped
    command: --default-authentication-plugin=mysql_native_password
    ports:
      - '3306:3306'
    environment:
      MYSQL_ROOT_PASSWORD: root
  nacos:
    image: ac34e13f83a8 
    container_name: nacos
    restart: unless-stopped
    volumes:
      - ./application.properties:/root/nacos/conf/application.properties
    depends_on:
      - mysql
    ports:
      - '8848:8848'

  • 然后在docker-compose.yml文件所在目录执行以下命令,即可启动所有容器:
docker-compose up -d

【SpringCloudAlibaba】之Nacos集群搭建Demo练习(Linux版本Docker镜像构建)_第21张图片
在这里插入图片描述

  • 开始访问:
    【没有访问成功,不要气馁,继续修改,我现在需要一个个的启动了,只能使用最笨的方法】

  • 进入nacos bash命令行里面进行修改配置文件信息:
    找到要修改的镜像

docker ps -a

【SpringCloudAlibaba】之Nacos集群搭建Demo练习(Linux版本Docker镜像构建)_第22张图片
【注意: 需要我们先启动nacos才能正常的执行下面的命令】

 docker run --env MODE=standalone --name nacos -d -p 8848:8848 nacos/nacos-server:1.1.4

http://192.168.21.129:8848/nacos/index.html#/login
【SpringCloudAlibaba】之Nacos集群搭建Demo练习(Linux版本Docker镜像构建)_第23张图片
进入要修改的镜像

docker ps

在这里插入图片描述

docker exec -it <容器ID> bash

在这里插入图片描述
进入要修改的文件目录

【SpringCloudAlibaba】之Nacos集群搭建Demo练习(Linux版本Docker镜像构建)_第24张图片
然后进行修改配置文件,发现Linux版本跟我们的Windows版本是不一样的,_
【SpringCloudAlibaba】之Nacos集群搭建Demo练习(Linux版本Docker镜像构建)_第25张图片


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

先这么配置,不行再修改O(∩_∩)O哈哈~

  • 创建cluster.conf文件:
    【SpringCloudAlibaba】之Nacos集群搭建Demo练习(Linux版本Docker镜像构建)_第26张图片
/home/nacos/conf

【SpringCloudAlibaba】之Nacos集群搭建Demo练习(Linux版本Docker镜像构建)_第27张图片

重新启动nacos

【SpringCloudAlibaba】之Nacos集群搭建Demo练习(Linux版本Docker镜像构建)_第28张图片
通过浏览器访问,然后在上面添加一条数据测试一下:
【SpringCloudAlibaba】之Nacos集群搭建Demo练习(Linux版本Docker镜像构建)_第29张图片
访问数据库,查看数据库修改是否成功了:
【SpringCloudAlibaba】之Nacos集群搭建Demo练习(Linux版本Docker镜像构建)_第30张图片
【下一步:关闭nacos改为集群方式启动:】

docker run  -d -p 8858:8848 nacos/nacos-server:1.1.4
docker run  -d -p 8868:8848 nacos/nacos-server:1.1.4
docker run  -d -p 8878:8848 nacos/nacos-server:1.1.4

【SpringCloudAlibaba】之Nacos集群搭建Demo练习(Linux版本Docker镜像构建)_第31张图片
在这里插入图片描述

  • 浏览器访问:
    http://192.168.21.129:8858/nacos/index.html
    【SpringCloudAlibaba】之Nacos集群搭建Demo练习(Linux版本Docker镜像构建)_第32张图片
  • 查看日志:
docker logs 755c97e25390
java.io.IOException: java.lang.IllegalArgumentException: Could not resolve placeholder 'MYSQL_MASTER_SERVICE_HOST' in value "jdbc:mysql://${MYSQL_MASTER_SERVICE_HOST}:${MYSQL_MASTER_SERVICE_PORT:3306}/${MYSQL_MASTER_SERVICE_DB_NAME}?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true"
        at com.alibaba.nacos.config.server.service.BasicDataSourceServiceImpl.reload(BasicDataSourceServiceImpl.java:217)
        at com.alibaba.nacos.config.server.service.BasicDataSourceServiceImpl.init(BasicDataSourceServiceImpl.java:131)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:363)
        at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:307)
        at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:136)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:419)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1737)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:576)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498)
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
        at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1083)
        at com.alibaba.nacos.config.server.service.DynamicDataSource.getDataSource(DynamicDataSource.java:54)
        at com.alibaba.nacos.config.server.service.PersistService.init(PersistService.java:91)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:363)
        at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:307)
        at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:136)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:419)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1737)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:576)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498)
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
        at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:273)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1237)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1164)
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:593)
        at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:90)
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:374)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1378)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:575)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498)
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
        at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:273)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1237)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1164)
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:593)
        at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:90)
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:374)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1378)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:575)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498)
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:846)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:863)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:546)
        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:142)
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:775)
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:316)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1248)
        at com.alibaba.nacos.Nacos.main(Nacos.java:33)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
        at org.springframework.boot.loader.PropertiesLauncher.main(PropertiesLauncher.java:593)
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'MYSQL_MASTER_SERVICE_HOST' in value "jdbc:mysql://${MYSQL_MASTER_SERVICE_HOST}:${MYSQL_MASTER_SERVICE_PORT:3306}/${MYSQL_MASTER_SERVICE_DB_NAME}?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true"
        at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:172)
        at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:124)
        at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:237)
        at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:211)
        at org.springframework.core.env.AbstractPropertyResolver.resolveNestedPlaceholders(AbstractPropertyResolver.java:228)
        at org.springframework.core.env.PropertySourcesPropertyResolver.getProperty(PropertySourcesPropertyResolver.java:88)
        at org.springframework.core.env.PropertySourcesPropertyResolver.getProperty(PropertySourcesPropertyResolver.java:62)
        at org.springframework.core.env.AbstractEnvironment.getProperty(AbstractEnvironment.java:539)
        at com.alibaba.nacos.config.server.service.BasicDataSourceServiceImpl.reload(BasicDataSourceServiceImpl.java:159)
        ... 78 more
2020-05-25 15:27:28,878 INFO Nacos Log files: /home/nacos/logs/

2020-05-25 15:27:28,879 INFO Nacos Conf files: /home/nacos/conf/

2020-05-25 15:27:28,880 INFO Nacos Data files: /home/nacos/data/

2020-05-25 15:27:28,881 ERROR Nacos failed to start, please see /home/nacos/logs/nacos.log for more details.

  • 解决办法: 想了想把配置文件中其他配置全部注释掉,只留我们自己的mysql配置:
docker run   -d -p 8848:8848 nacos/nacos-server:1.1.4

【SpringCloudAlibaba】之Nacos集群搭建Demo练习(Linux版本Docker镜像构建)_第33张图片
但是启动了,没事我们可以进入bash里面,操作:
在这里插入图片描述
竟然没有启动成功:
在这里插入图片描述
在这里插入图片描述
【SpringCloudAlibaba】之Nacos集群搭建Demo练习(Linux版本Docker镜像构建)_第34张图片

开始集群搭建开始,是时候展示了

要在Linux服务器 根目录安装
官网的地址:https://nacos.io/zh-cn/docs/quick-start-docker.html

git clone https://github.com/nacos-group/nacos-docker.git

如果提示git指令未找到

yum install -y git

【SpringCloudAlibaba】之Nacos集群搭建Demo练习(Linux版本Docker镜像构建)_第35张图片
在这里插入图片描述
【SpringCloudAlibaba】之Nacos集群搭建Demo练习(Linux版本Docker镜像构建)_第36张图片
修改我们配置文件:

/home/nacos/conf/nacos-docker/example

【SpringCloudAlibaba】之Nacos集群搭建Demo练习(Linux版本Docker镜像构建)_第37张图片
由于公司生产上面已经安装好了mysql数据库,所以这里先要把数据库的配置进行修改:


version: "3"
services:
  nacos1:
    hostname: nacos1
    container_name: nacos1
    image: nacos/nacos-server:latest
    volumes:
      - ./cluster-logs/nacos1:/home/nacos/logs
      - ./init.d/custom.properties:/home/nacos/init.d/custom.properties
    ports:
      - "8848:8848"
      - "9555:9555"
    env_file:
      - ../env/nacos-hostname.env
    restart: always
    depends_on:
      - mysql

  nacos2:
    hostname: nacos2
    image: nacos/nacos-server:latest
    container_name: nacos2
    volumes:
      - ./cluster-logs/nacos2:/home/nacos/logs
      - ./init.d/custom.properties:/home/nacos/init.d/custom.properties
    ports:
      - "8849:8848"
    env_file:
      - ../env/nacos-hostname.env
    restart: always
    depends_on:
      - mysql
  nacos3:
    hostname: nacos3
    image: nacos/nacos-server:latest
    container_name: nacos3
    volumes:
      - ./cluster-logs/nacos3:/home/nacos/logs
      - ./init.d/custom.properties:/home/nacos/init.d/custom.properties
    ports:
      - "8850:8848"
    env_file:
      - ../env/nacos-hostname.env
    restart: always
    depends_on:
      - mysql
  mysql:
  	// 修改容器名避免冲突
    container_name: nacos-mysql
    image: nacos/nacos-mysql:5.7
    env_file:
      - ../env/mysql.env
    volumes:
      - ./mysql:/var/lib/mysql
    // 修改端口映射避免冲突
    ports:
      - "3308:3306"

  • 集群模式
    在此路径 /nacos-docker下面执行下面的命令:
docker-compose -f example/cluster-hostname.yaml up 
  • 开启所有相关服务(后台运行)

docker-compose -f example/cluster-hostname.yaml start

【SpringCloudAlibaba】之Nacos集群搭建Demo练习(Linux版本Docker镜像构建)_第38张图片
【SpringCloudAlibaba】之Nacos集群搭建Demo练习(Linux版本Docker镜像构建)_第39张图片
【SpringCloudAlibaba】之Nacos集群搭建Demo练习(Linux版本Docker镜像构建)_第40张图片
【SpringCloudAlibaba】之Nacos集群搭建Demo练习(Linux版本Docker镜像构建)_第41张图片

你可能感兴趣的:(Spring,#)