环境依赖

Nacos:v2.1.0

MySQL:8.0.21

Seata:1.5.0

nacos依赖MySql;

Seata依赖Nacos+Mysql

涉及到的点

deploy部署设置、depends_on执行顺序设置、自定义网段

完整配置

version: '3.9'
services:#mysql数据库脚本db:image: mysql:8.0.21container_name: mysqlhostname: mysql-node1 restart: alwaysports:- 3306:3306volumes:- ./mysql/logs:/var/log/mysql- ./mysql/data:/var/lib/mysql- ./mysql/conf/my.cnf:/etc/my.cnf- ./mysql/init:/docker-entrypoint-initdb.d/environment:MYSQL_ROOT_PASSWORD: ltingzxhealthcheck:test: [ "CMD", "mysqladmin" ,"ping", "-h", "localhost" ]interval: 5stimeout: 5sretries: 2start_period: 5ssecurity_opt:- seccomp:unconfinednetworks:extnetwork:ipv4_address: 172.21.0.2 #nacos服务脚本nacos:image: nacos/nacos-server:v2.1.0container_name: nacoshostname: nacos-node1restart: alwaysports:- "8848:8848"volumes: #挂载目录- ./nacos/logs/:/home/nacos/logs- ./nacos/data/:/home/nacos/dataenvironment:SPRING_DATASOURCE_PLATFORM: mysql #数据源平台 仅支持mysql或不保存emptyMODE: standaloneMYSQL_SERVICE_HOST: mysqlMYSQL_SERVICE_DB_NAME: nacosMYSQL_SERVICE_PORT: 3306MYSQL_SERVICE_USER: rootMYSQL_SERVICE_PASSWORD: ltingzxNACOS_APPLICATION_PORT: 8848JVM_XMS: 512mJVM_MMS: 256mJVM_XMN: 128mMYSQL_SERVICE_DB_PARAM: characterEncoding=utf8&connectTimeout=10000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=truenetworks:extnetwork:ipv4_address: 172.21.0.3deploy:restart_policy:delay: 5smax_attempts: 10healthcheck:test: ["CMD-SHELL", "echo 'ruok' | curl -s telnet://localhost:8848 || exit 1"]interval: 3stimeout: 5sretries: 3start_period: 5sdepends_on:db:#condition: service_startedcondition: service_healthy#condition: service_completed_successfully#seata服务脚本seata:image: seataio/seata-server:1.5.0container_name: seata-serverrestart: alwaysports:- "9200:9200"- "7091:7091"volumes:- ./seata-server/mysql-connector-java-8.0.25.jar:/seata-server/libs/mysql-connector-java-8.0.25.jar- ./seata-server/config/application.yml:/seata-server/resources/application.yml- ./seata-server/logs:/root/logs/seataenvironment:SEATA_IP: 121.40.236.43SEATA_PORT: 9200networks:extnetwork:ipv4_address: 172.21.0.4depends_on:nacos:condition: service_healthydb:condition: service_healthy
networks:extnetwork:name: extnetworkipam:config:- subnet: 172.21.0.0/16

在Docker-compose.yml当前目录下创建MySQL、Nacos、Seata文件夹

mkdir -p ./mysql/data ./mysql/init ./mysql/conf

mkdir -p ./nacos/data ./nacos/init ./nacos/conf ./nacos/logs

mkdir -p ./seata-server/config

Mysql配置准备

1、上传nacos、seata依赖的sql文件

#### 然后将sql文件放在“./mysql/init”目录下即可----MySQL启动的时候就会直接在init文件夹下面加载初始化sql...

2、在Mysql/conf文件夹下面创建:my.cnf

Seata配置准备

在Seata的v1.4.3版本以上,合并了registry.conf和file.conf,只需要配置“ application.yml”即可。

如果找不到application.yml,可以在启动seata容器后从内部拷贝出来

docker cp seata-server:/seata-server/resources/application.yml

除此之外还需要准备seataServer.properties,需要在nacos中创建,用来替换原来的file.conf之类的配置。

Seata配置的注意事项

启动成功,但是未注册成功展示

上面这个时启动失败的,但是没有报错(服务并没有注册到nacos中);下面这个是启动成功的,服务有注册到nacos中--但是此时依然会先报异常三的错误....等一会才会出现下面的信息---启动成功展示...

启动成功展示

异常解决

Seata相关异常

异常一: com.alibaba.nacos.api.exception.NacosException: endpoint is blank

Caused by: com.alibaba.nacos.api.exception.NacosException: endpoint is blankat com.alibaba.nacos.client.config.impl.ServerListManager.<init>(ServerListManager.java:183)at com.alibaba.nacos.client.config.http.ServerHttpAgent.<init>(ServerHttpAgent.java:274)at com.alibaba.nacos.client.config.NacosConfigService.<init>(NacosConfigService.java:88)... 27 common frames omitted

原因:我配了./seata-server/config/application.yml:/seata-server/resources/application.yml

而application.yml配置文件是错误的。

异常二:create connection SQLException, url: jdbc:mysql://127.0.0.1:3306/seata

10:07:06.730 ERROR --- [ctionPool-Create-83554804] com.alibaba.druid.pool.DruidDataSource   : create connection SQLException, url: jdbc:mysql://127.0.0.1:3306/seata?rewriteBatchedStatements=true, errorCode 0, state 08S01
==>
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failureThe last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)at java.lang.reflect.Constructor.newInstance(Constructor.java:423)at com.mysql.jdbc.Util.handleNewInstance(Util.java:389)at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1038)at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:338)

如上异常信息:create connection SQLException, url: jdbc:mysql://127.0.0.1:3306/seata?rewriteBatchedStatements=true, errorCode 0, state 08S01可以知,我们连接的是本地的127.0.0.1:3306的mysql,而在seata容器中并没有安装mysql,所以系统报错

原因是如下: 我们在environment配置中指定了STORE_MODE的模式是db,而我们在application.yml虽然配置了mysql信息,但是并没有成功读取,最终原因:“application.yml”配置错误

异常三:[NACOS HTTP-GET] The maximum number of tolerable server reconnection errors has been reached

09:06:26.451 ERROR --- [                     main] c.a.n.c.config.http.ServerHttpAgent      : [NACOS ConnectException httpGet] currentServerAddr:http://localhost:8848, err : Connection refused (Connection refused)
09:06:26.651 ERROR --- [                     main] c.a.n.c.config.http.ServerHttpAgent      : [NACOS ConnectException httpGet] currentServerAddr:http://localhost:8848, err : Connection refused (Connection refused)
09:06:26.851 ERROR --- [                     main] c.a.n.c.config.http.ServerHttpAgent      : [NACOS ConnectException httpGet] currentServerAddr:http://localhost:8848, err : Connection refused (Connection refused)
09:06:27.051 ERROR --- [                     main] c.a.n.c.config.http.ServerHttpAgent      : [NACOS ConnectException httpGet] currentServerAddr:http://localhost:8848, err : Connection refused (Connection refused)
09:06:27.053 ERROR --- [                     main] c.a.n.client.config.impl.ClientWorker    : [fixed-localhost_8848] [sub-server] get server config exception, dataId=metrics.enabled, group=SEATA_GROUP, tenant=
==>
java.net.ConnectException: [NACOS HTTP-GET] The maximum number of tolerable server reconnection errors has been reachedat com.alibaba.nacos.client.config.http.ServerHttpAgent.httpGet(ServerHttpAgent.java:125)at com.alibaba.nacos.client.config.http.MetricsHttpAgent.httpGet(MetricsHttpAgent.java:51)at com.alibaba.nacos.client.config.impl.ClientWorker.getServerConfig(ClientWorker.java:200)at com.alibaba.nacos.client.config.NacosConfigService.getConfigInner(NacosConfigService.java:160)at com.alibaba.nacos.client.config.NacosConfigService.getConfig(NacosConfigService.java:100)at io.seata.config.nacos.NacosConfiguration.getLatestConfig(NacosConfiguration.java:109)at io.seata.config.AbstractConfiguration.getConfig(AbstractConfiguration.java:141)at io.seata.config.AbstractConfiguration.getConfig(AbstractConfiguration.java:132)at io.seata.config.AbstractConfiguration.getBoolean(AbstractConfiguration.java:111)at io.seata.config.AbstractConfiguration.getBoolean(AbstractConfiguration.java:117)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

由上知:[NACOS ConnectException httpGet] currentServerAddr:http://localhost:8848, err,可以看到nacos也是读取到的本地nacos,原因与上面的mysql异常一致。

以上异常1、2、3出现的最终原因是application.yml配置不正确;

---- 系统找不到application.yml文件,检查下配置路径。

---- 如果系统能找到application.yml,确保自所依赖的环境的IP、端口、密码都正确的情况下,那就检查下自己的配置格式;

---- 如果配置格式正确,那就检查下自己的缩进...

总之,application.yml文件错误...

Nacos相关异常

异常一:encrypted_data_key

---- 注意这是高版本和低版本不兼容的问题。

nacos:v2.1.0 此版本有encrypted_data_key, nacos:v2.1.0版本前没有

PreparedStatementCallback; bad SQL grammar [SELECT id,data_id,group_id,tenant_id,app_name,content,md5,gmt_modified,type,encrypted_data_key FROM config_info WHERE id > ? ORDER BY id ASC LIMIT ?,?]; nested exception is java.sql.SQLSyntaxErrorException: Unknown column 'encrypted_data_key' in 'field list'
........Caused by: java.sql.SQLSyntaxErrorException: Unknown column 'encrypted_data_key' in 'field list'

原因:config_info查找的时候有 encrypted_data_key 实际上表里面没有,就会导致增加配置报错的问题

解决方法:修改config_info表结构。新增字段“encrypted_data_key”,类型为varchar 255即可。

-------注意:一定还要修改“his_config_info”

异常二:添加完encrypted_data_key后依然报错

2022-07-08 18:00:02+00:00 [Note] [Entrypoint]: /usr/local/bin/docker-entrypoint.sh: running /docker-entrypoint-initdb.d/nacos-v2.1.0.sql
ERROR 1364 (HY000) at line 33: Field 'encrypted_data_key' doesn't have a default value

解决方法:取消encrypted_data_key为必填项即可。

在官方2.1.0版本的sql中,添加此字段的语句为:encrypted_data_key text NOT NULL COMMENT '秘钥';删除红字即可。

异常三:No DataSource set

Caused by: com.alibaba.nacos.api.exception.NacosException: Nacos Server did not start because dumpservice bean construction failure :
No DataSource set
at com.alibaba.nacos.config.server.service.dump.DumpService.dumpOperate(DumpService.java:225)
at com.alibaba.nacos.config.server.service.dump.ExternalDumpService.init(ExternalDumpService.java:52)
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)
... 53 common frames omitted
Caused by: java.lang.IllegalStateException: No DataSource set
at org.springframework.util.Assert.state(Assert.java:73)
at org.springframework.jdbc.support.JdbcAccessor.obtainDataSource(JdbcAccessor.java:77)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:371)

原因:nacos启动的时候mysql还没有完全初始化完成。

导致未初始化完成原因一:nacos连接时间太短

修改nacos的mysql参数:connectTimeout,设置为10000即可。

如果此时还是要报错,那么通过查看mysql和nacos启动日志可以看到,mysql和nacos所在时区不一致....如下

--------实在不行就把MySQL和nacos分成两个docker-compose.yml即可

如果我们设置的docker-compose.yml文件版本为3.9的时候,可以采用如下方法:

----- 此方式可以见上一篇文章中的depends_on,指定依赖执行顺序即可

depends_on:db:condition: service_healthy

Docker-compose编排MySQL+Nacos+Seata相关推荐

  1. 使用docker compose部署MySQL主从复制集群

    使用docker compose部署MySQL主从复制集群 环境说明 宿主机:Ubuntu 14.04.6 LTS Docker Engine: 18.06.3-ce docker compose: ...

  2. 使用Docker Compose安装mysql

    使用Docker Compose安装mysql 1运行 安装 Docker Compose 运行以下命令以下载 Docker Compose 的当前稳定版本:$ sudo curl -L " ...

  3. Docker Compose运行MySQL、Redis服务

    Docker Compose运行MySQL.Redis服务 前言:通过容器来统一管理开发中使用到的依赖,顺便学习docker-compose 1.docker-compose.yml 文件说明 2.d ...

  4. 【ODOO】Docker Compose 编排ODOO应用

    Dockerfile Dockerfile 是一个用于构建自定义镜像的文本文件,文本内容包含了用于指导 Docker 创建自定义镜像的一系列指令,是用于创建镜像的蓝图. 这通常在将我们自己的程序打成D ...

  5. 【Spring Cloud 基础设施搭建系列】Spring Cloud Demo项目 使用Docker Compose编排Spring Cloud微服务

    文章目录 Docker Compose快速人门 入门示例 使用Docker Comose编排Spring Cloud微服务 使用Maven插件读取Dockerfile进行构建 使用Maven插件构建D ...

  6. 安装Docker.v19和配置Docker Compose编排工具

    博文目录 一.Compose简介 二.安装Docker 1.安装19.03.9版本Docker 2.配置镜像加速 三.安装使用Docker Compose 1.Github下载Docker Compo ...

  7. Docker Compose编排(写法格式及实验)

    目录 一.Docker Compose前言 二.Docker compose 的文件结构 1.docker compose配置常用字段 2.docker compose常用命令 三.使用compose ...

  8. Docker Compose编排

    目录 一.简介 二.安装部署compose 2.1 Docker compose 环境的安装 2.2 YAML 文件格式及编写注意事项 2.3 Docker Compose配置常用字段 2.4 Doc ...

  9. docker hub mysql主从_使用 Docker Compose 搭建 MySQL 数据库主从复制实例

    说明 由于是单机同时运行主从实例,仅用于开发环境或学习主从复制配置. 文件结构 env 根目录下的 .env 文件作用域是在 docker-compose.yaml 中,而 env 路径下的文件作用与 ...

最新文章

  1. IDEA编译时出现 Information:java: javacTask: 源发行版 1.8 需要目标发行版 1.8
  2. KafkaConsumer 长时间地在poll(long )方法中阻塞
  3. mysql 统计日报_mysql 数据分析如何实现日报、周报、月报和年报?
  4. 运用 autoconf 和 automake 自动生成 Makefile 实例讲解
  5. qemu-launcher:图形化的QEMU启动器
  6. 研发协同平台持续交付2.0架构演进
  7. Java 10:“ var”关键字
  8. Python机器学习:多项式回归与模型泛化008模型泛化与岭回归
  9. poj 1723 中位数
  10. centos7中安装docker
  11. 电路计算机辅助设计上海电力学院,上海电力学院电路计算机辅助设计1.doc
  12. angular NG-ZORRO 跑马灯左右控件
  13. 如何导出久其报表所有数据_久其报表不能传输怎么办?
  14. layui修改头像功能
  15. 怎么将几张pdf合并成一张_Adobe Acrobat怎么将多个PDF文件合并成一个pdf页面?
  16. [2022-04-27] refresh PDB
  17. CAD​自定义快捷键命令
  18. 利用强化学习设计具有目标有效杨氏模量的复合材料
  19. 商业综合体能耗在线监测管理系统_商场管理平台
  20. 人身三流指什么_什么是三流明星

热门文章

  1. 使用Bmob云端服务器模拟简单的注册登录
  2. 区块链是什么通俗解释_区块链技术是什么?区块链的通俗解释原来是这样!
  3. css绘制等边三角形
  4. Ubuntu上安装BRAT
  5. Win10DIY篇:Win10自制纯白图标。(完整版教程)
  6. oracle 非等值关联 优化,Oracle优化器、优化模式、表的连接方式(Hash Join、Nested Loop、Sort Merge Join)...
  7. 1月16日服务器例行维护更新公告,1月16日例行维护暨版本更新公告
  8. 京东618主场迎战:变与不变,志在必得
  9. mac提示“已损坏,无法打开。 您应该将它移到废纸篓“的终极解决方案
  10. android 65536