Docker搭建Nacos1.3+Seata1.4+MySQL8分布式事务(服务端)
一、docker启动seata
- 拉取镜像
docker pull seataio/seata-server:latest
- 第一次启动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
- 到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
官方脚本地址
三、客户端配置注意点
- 在客户端配置中要注意的是,需要将registry.config文件放到resource目录下,并与服务端保持一致。
- spring.cloud.alibaba.seata.tx-service-group配置的值与服务端保持一致。
- 客户端数据库配置:每个服务都需要有相应的业务表和undo_log表,脚本可以查看链接下的readme。
四、容易踩到的坑及解决方法
- Seata不同版本依赖关系,可以查询官方文档了解。
- 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”。
- 使用容器部署时,配置nacos等注册中心和配置中心地址时,不要默认使用容器IP。
- 镜像版本与客户端版本保持一致。
参考文章1
参考文章2
参考文章3
Docker搭建Nacos1.3+Seata1.4+MySQL8分布式事务(服务端)相关推荐
- 分布式系统(三) 分布式事务服务搭建
分布式系统(三)分布式事务服务搭建(入门) 接着前面说的分布式事务,本章节是用来记录分布式事务的服务的一个搭建过程 1.微服务环境准备 服务注册配置中心:nacos 服务调用和负载均衡:OpenFei ...
- 如何给multicraft装PHP,我的世界Linux搭建Multicraft网页后台教程更新和添加服务端文件...
小编为大家带来了<我的世界>Linux搭建Multicraft网页后台教程更新和添加服务端文件,这个是一个比较重要的教程,当然用不到的玩家可以跳过了. 重新登录 点击"设置&qu ...
- 【Docker】9、Docker-Compose安装轻量级分布式日志服务Graylog
1.安装Docker-Compose 见博客:[Docker]8.安装Docker-Compose服务 2.Graylog简介 Graylog 是一个开源的日志聚合.分析.审计.展现和预警工具.在功能 ...
- seata1.5.1 分布式事务没有传递xid,xid为null,事务参与者获取不到xid导致事务失效解决方案
环境版本:seata--- 1.5.1 问题:分布式事务没有传递xid导致事务失效解决方案,事务参与者通过RootContext.getXID()没有获取到xid. 解析seata传递原理: 1.在G ...
- [已解决]多网卡情况下Seata1.5.2分布式事务注册到nacos时ip错误
最近学习spring cloud,Seata分布式事务集成nacos注册中心时ip偶尔会注册不对,是虚拟机的ip,不是实际使用的ip地址,导致服务路由失败,查了下是因为多网卡时时随机网卡取ip地址 文 ...
- linux8重启服务代码,linux(centos8):安装分布式事务服务seata(seata 1.3.0/centos 8.2)
一,什么是seata? Seata:Simpe Extensible Autonomous Transcaction Architecture, 是阿里中间件,开源的分布式事务解决方案. 前身是阿里的 ...
- docker搭建nacos1.4.1挂载文件并实现mysql持久化
之前已经搭建过nacos环境,但没有进行配置持久化mysql,这篇文章完善一下. 一.拉取镜像 docker pull nacos/nacos-server:1.4.1 二.创建挂载目录 /mnt/n ...
- SpringCloud-Seata分布式事务服务案例之订单Order服务搭建(Day16)
订单服务解析 我们的总服务接口是需要与三个微服务模块单独分开的,但是此案例有没有那么复杂,所以我们就将对外提供全面服务的接口放在订单模块中,其次我们来分析一下这个订单Order模块应该有哪些功能: 创 ...
- kbengine0.2.3发布,开源分布式游戏服务端引擎
2019独角兽企业重金招聘Python工程师标准>>> v0.2.3 memory profile 支持 加入jemalloc并在linux下默认使用 客户端重连机制 服务端自动安装 ...
最新文章
- 【mysql】mysql的数据库主从(一主一从)
- python编程语法-Python编程入门——基础语法详解(经典)
- 第七讲:数据契约(2)
- Mysql5.7版本ERROR 1055问题
- 通过一般处理程序实现【文件上传】
- 最难面试IT公司的测试题
- 模板:莫比乌斯反演(数论)
- 2015.4.19 为什么footer下a的索引值那么大
- 《Kotlin进化之路》之【第二章:揭开Kotlin的基础面纱】(二)
- 转:华 为 路 由 常 用 命 令
- 2013.8.4thinkPHp学习
- 订阅号获取openid_小程序订阅消息
- C++处理有道单词导出单词本
- Java 进口管制限制解除
- 读书笔记12 《新周刊485期 三商:智商、情商、时间商》
- 【Python】列表解析式
- win10 输入法 删除
- Android 百度离线地图下载完后调用下载好的离线包
- Android招聘心得分享
- 日本即将上市的三维条形码