一、docker启动seata

  1. 拉取镜像
docker pull seataio/seata-server:latest
  1. 第一次启动seata,复制出其配置的相关文件
docker run --name seata-server -p 8091:8091 -d  seataio/seata-server:latest

复制出容器中的文件到容器外的目录,我的是/mnt/seata

docker cp seata-server:/seata-server/resources /mnt/seata
  1. 到github的seata源码库弄来两个文件,config.txt 、nacos/nacos-config.sh,这两个文件,主要用于将seata

config.txt放在/mnt目录下,内容如下:

//该项修改为相应客户端中spring.cloud.alibaba.seata.tx-service-group的值,有多个客户端就添加多个
//例如在官方示例springcloud-nacos-seata中order-service和storage-service中spring.cloud.alibaba.seata.tx-service-group的值
//分别为order-service-group、storage-service-group,则需要将该项配置为service.vgroupMapping.order-service-group=default
//和service.vgroupMapping.storage-service-group=default
service.vgroupMapping.my_test_tx_group=default
//事务日志存储模式
store.mode=db
//数据库配置项
store.db.datasource=druid
store.db.dbType=mysql
//这里如果使用的mysql8以上的版本的话,那么配置com.mysql.cj.jdbc.Driver
store.db.driverClassName=com.mysql.cj.jdbc.Driver
//配置自己相应的url,user,password,注意,这里很重要,因为我的数据库是在主服务上运行,而seata是跑在容器里面的,所以,ip地址要写准确,写localhost是访问不了的,必须通过ifconfig的命令来查看主机的具体ip
store.db.url=jdbc:mysql://172.17.0.16:3306/seata?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&useSSL=true
store.db.user=root
store.db.password=root

关于docker连接容器外部的mysql的参考文章

nacos-config.sh放在 /mnt/seata目录下

这两个文件的作用:
config.txt就是seata各种详细的配置,执行 nacos-config.sh 即可将这些配置导入到nacos,这样就不需要将file.conf和registry.conf放到我们的项目中了,需要什么配置就直接从nacos中读取。
更加详细的配置参考官方文档

在nacos-config.sh所在的路径下,输入:

sh nacos-config.sh -h localhost -p 8848 -g SEATA_GROUP -t 8464601b-24e6-4f02-ba7e-a2f43a698861 -u nacos -w nacos

注:命令解析:-h -p 指定nacos的端口地址;-g 指定配置的分组,注意,是配置的分组;-t 指定命名空间id; -u -w指定nacos的用户名和密码,同样,这里开启了nacos注册和配置认证的才需要指定。

配置成功如下:

nacos页面:

修改seata-sever/resources/下的file.conf和registry.conf文件

因为我们要使用数据库进行持久化,所以将file.conf修改如下

修改registry.conf

这里仍然要注意,如果nacos是用docker跑起来的,那么仍然要使用分配的虚拟网卡地址,而不是localhost
使用下面命令查看

iptables -t nat -nL --line-number

然后删除之前创建的seata的docker服务,重新使用自己配置好的挂载文件启动seata

docker run -d --restart always  --name  seata-server -p 8091:8091
-e SEATA_IP=服务器公网ip(不然回报以下错误) -v /mnt/seata/seata-server:/seata-server seataio/seata-server:latest


而nacos集群里显示的ip是远程服务器里的ip,远程服务自然无法访问到


必须让运行seata的容器,绑定公网ip

可以看到,nacos的服务列表里,已经有seata-server这个服务

二、创建事务日志数据库

使用Seata的db模式需要创建相应的数据库seata以及对应的表

//全局事务表
global_table
//分支子事务表
branch_table
//全局锁表
lock_table


官方脚本地址

三、客户端配置注意点

  1. 在客户端配置中要注意的是,需要将registry.config文件放到resource目录下,并与服务端保持一致。
  2. spring.cloud.alibaba.seata.tx-service-group配置的值与服务端保持一致。
  3. 客户端数据库配置:每个服务都需要有相应的业务表和undo_log表,脚本可以查看链接下的readme。

四、容易踩到的坑及解决方法

  1. Seata不同版本依赖关系,可以查询官方文档了解。
  2. server端的配置service.vgroupMapping.my_test_tx_group=default,需要注意两点:
  • 在1.1.0版本前后的命名方式不同,之前为service.vgroup_mapping.my_test_tx_group=default
  • my_test_tx_group为spring.cloud.alibaba.seata.tx-service-group的值,不然会报“no available service ‘null’ found, please make sure registry config”。
  1. 使用容器部署时,配置nacos等注册中心和配置中心地址时,不要默认使用容器IP。
  2. 镜像版本与客户端版本保持一致。

参考文章1
参考文章2
参考文章3

Docker搭建Nacos1.3+Seata1.4+MySQL8分布式事务(服务端)相关推荐

  1. 分布式系统(三) 分布式事务服务搭建

    分布式系统(三)分布式事务服务搭建(入门) 接着前面说的分布式事务,本章节是用来记录分布式事务的服务的一个搭建过程 1.微服务环境准备 服务注册配置中心:nacos 服务调用和负载均衡:OpenFei ...

  2. 如何给multicraft装PHP,我的世界Linux搭建Multicraft网页后台教程更新和添加服务端文件...

    小编为大家带来了<我的世界>Linux搭建Multicraft网页后台教程更新和添加服务端文件,这个是一个比较重要的教程,当然用不到的玩家可以跳过了. 重新登录 点击"设置&qu ...

  3. 【Docker】9、Docker-Compose安装轻量级分布式日志服务Graylog

    1.安装Docker-Compose 见博客:[Docker]8.安装Docker-Compose服务 2.Graylog简介 Graylog 是一个开源的日志聚合.分析.审计.展现和预警工具.在功能 ...

  4. seata1.5.1 分布式事务没有传递xid,xid为null,事务参与者获取不到xid导致事务失效解决方案

    环境版本:seata--- 1.5.1 问题:分布式事务没有传递xid导致事务失效解决方案,事务参与者通过RootContext.getXID()没有获取到xid. 解析seata传递原理: 1.在G ...

  5. [已解决]多网卡情况下Seata1.5.2分布式事务注册到nacos时ip错误

    最近学习spring cloud,Seata分布式事务集成nacos注册中心时ip偶尔会注册不对,是虚拟机的ip,不是实际使用的ip地址,导致服务路由失败,查了下是因为多网卡时时随机网卡取ip地址 文 ...

  6. linux8重启服务代码,linux(centos8):安装分布式事务服务seata(seata 1.3.0/centos 8.2)

    一,什么是seata? Seata:Simpe Extensible Autonomous Transcaction Architecture, 是阿里中间件,开源的分布式事务解决方案. 前身是阿里的 ...

  7. docker搭建nacos1.4.1挂载文件并实现mysql持久化

    之前已经搭建过nacos环境,但没有进行配置持久化mysql,这篇文章完善一下. 一.拉取镜像 docker pull nacos/nacos-server:1.4.1 二.创建挂载目录 /mnt/n ...

  8. SpringCloud-Seata分布式事务服务案例之订单Order服务搭建(Day16)

    订单服务解析 我们的总服务接口是需要与三个微服务模块单独分开的,但是此案例有没有那么复杂,所以我们就将对外提供全面服务的接口放在订单模块中,其次我们来分析一下这个订单Order模块应该有哪些功能: 创 ...

  9. kbengine0.2.3发布,开源分布式游戏服务端引擎

    2019独角兽企业重金招聘Python工程师标准>>> v0.2.3 memory profile 支持 加入jemalloc并在linux下默认使用 客户端重连机制 服务端自动安装 ...

最新文章

  1. 【mysql】mysql的数据库主从(一主一从)
  2. python编程语法-Python编程入门——基础语法详解(经典)
  3. 第七讲:数据契约(2)
  4. Mysql5.7版本ERROR 1055问题
  5. 通过一般处理程序实现【文件上传】
  6. 最难面试IT公司的测试题
  7. 模板:莫比乌斯反演(数论)
  8. 2015.4.19 为什么footer下a的索引值那么大
  9. 《Kotlin进化之路》之【第二章:揭开Kotlin的基础面纱】(二)
  10. 转:华 为 路 由 常 用 命 令
  11. 2013.8.4thinkPHp学习
  12. 订阅号获取openid_小程序订阅消息
  13. C++处理有道单词导出单词本
  14. Java 进口管制限制解除
  15. 读书笔记12 《新周刊485期 三商:智商、情商、时间商》
  16. 【Python】列表解析式
  17. win10 输入法 删除
  18. Android 百度离线地图下载完后调用下载好的离线包
  19. Android招聘心得分享
  20. 日本即将上市的三维条形码

热门文章

  1. Merge into 用法
  2. 饮冰三年-人工智能-Python-29瀑布流
  3. python+selenium七:下拉框、选项框、select用法
  4. 访问进程环境变量environ时的一个坑
  5. 性能优化18招提速宝典
  6. CSU 1337 搞笑版费马大定理(2013湖南省程序设计竞赛J题)
  7. 删除一个目录及其子目录下的所有.svn文件
  8. 吴恩达 coursera ML 第十四课总结+作业答案
  9. 使用 SCons 代替 Makefile 快速构建应用程序
  10. pip升级之后出现no module named pip