Docker-compose编排MySQL+Nacos+Seata
环境依赖
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相关推荐
- 使用docker compose部署MySQL主从复制集群
使用docker compose部署MySQL主从复制集群 环境说明 宿主机:Ubuntu 14.04.6 LTS Docker Engine: 18.06.3-ce docker compose: ...
- 使用Docker Compose安装mysql
使用Docker Compose安装mysql 1运行 安装 Docker Compose 运行以下命令以下载 Docker Compose 的当前稳定版本:$ sudo curl -L " ...
- Docker Compose运行MySQL、Redis服务
Docker Compose运行MySQL.Redis服务 前言:通过容器来统一管理开发中使用到的依赖,顺便学习docker-compose 1.docker-compose.yml 文件说明 2.d ...
- 【ODOO】Docker Compose 编排ODOO应用
Dockerfile Dockerfile 是一个用于构建自定义镜像的文本文件,文本内容包含了用于指导 Docker 创建自定义镜像的一系列指令,是用于创建镜像的蓝图. 这通常在将我们自己的程序打成D ...
- 【Spring Cloud 基础设施搭建系列】Spring Cloud Demo项目 使用Docker Compose编排Spring Cloud微服务
文章目录 Docker Compose快速人门 入门示例 使用Docker Comose编排Spring Cloud微服务 使用Maven插件读取Dockerfile进行构建 使用Maven插件构建D ...
- 安装Docker.v19和配置Docker Compose编排工具
博文目录 一.Compose简介 二.安装Docker 1.安装19.03.9版本Docker 2.配置镜像加速 三.安装使用Docker Compose 1.Github下载Docker Compo ...
- Docker Compose编排(写法格式及实验)
目录 一.Docker Compose前言 二.Docker compose 的文件结构 1.docker compose配置常用字段 2.docker compose常用命令 三.使用compose ...
- Docker Compose编排
目录 一.简介 二.安装部署compose 2.1 Docker compose 环境的安装 2.2 YAML 文件格式及编写注意事项 2.3 Docker Compose配置常用字段 2.4 Doc ...
- docker hub mysql主从_使用 Docker Compose 搭建 MySQL 数据库主从复制实例
说明 由于是单机同时运行主从实例,仅用于开发环境或学习主从复制配置. 文件结构 env 根目录下的 .env 文件作用域是在 docker-compose.yaml 中,而 env 路径下的文件作用与 ...
最新文章
- IDEA编译时出现 Information:java: javacTask: 源发行版 1.8 需要目标发行版 1.8
- KafkaConsumer 长时间地在poll(long )方法中阻塞
- mysql 统计日报_mysql 数据分析如何实现日报、周报、月报和年报?
- 运用 autoconf 和 automake 自动生成 Makefile 实例讲解
- qemu-launcher:图形化的QEMU启动器
- 研发协同平台持续交付2.0架构演进
- Java 10:“ var”关键字
- Python机器学习:多项式回归与模型泛化008模型泛化与岭回归
- poj 1723 中位数
- centos7中安装docker
- 电路计算机辅助设计上海电力学院,上海电力学院电路计算机辅助设计1.doc
- angular NG-ZORRO 跑马灯左右控件
- 如何导出久其报表所有数据_久其报表不能传输怎么办?
- layui修改头像功能
- 怎么将几张pdf合并成一张_Adobe Acrobat怎么将多个PDF文件合并成一个pdf页面?
- [2022-04-27] refresh PDB
- CAD​自定义快捷键命令
- 利用强化学习设计具有目标有效杨氏模量的复合材料
- 商业综合体能耗在线监测管理系统_商场管理平台
- 人身三流指什么_什么是三流明星
热门文章
- 使用Bmob云端服务器模拟简单的注册登录
- 区块链是什么通俗解释_区块链技术是什么?区块链的通俗解释原来是这样!
- css绘制等边三角形
- Ubuntu上安装BRAT
- Win10DIY篇:Win10自制纯白图标。(完整版教程)
- oracle 非等值关联 优化,Oracle优化器、优化模式、表的连接方式(Hash Join、Nested Loop、Sort Merge Join)...
- 1月16日服务器例行维护更新公告,1月16日例行维护暨版本更新公告
- 京东618主场迎战:变与不变,志在必得
- mac提示“已损坏,无法打开。 您应该将它移到废纸篓“的终极解决方案
- android 65536