Seata部署(Centos和Docker)

news2024/11/27 0:36:08

一、简介

Seata 是一款开源的分布式事务框架。致力于在微服务架构下提供高性能和简单易用的分布式事务服 务。在 Seata 开源之前,Seata 对应的内部版本在阿里经济体内部一直扮演着分布式一致性中间件的⻆ 色,帮助经济体平稳的度过历年的双11,对各业务单元业务进行了有力的支撑。经过多年沉淀与积累, 商业化产品先后在阿里云、金融云进行售卖。2019.1 为了打造更加完善的技术生态和普惠技术成果, Seata 正式宣布对外开源,未来 Seata 将以社区共建的形式帮助其技术更加可靠与完备。

Seata:https://seata.io/zh-cn/index.html

seata的github地址:https://github.com/seata/seata

Seata产品模块

Seata 中有三大模块,分别是 TM、RM 和 TC。其中 TM 和 RM 是作为 Seata 的客户端与业务系统集成在一起,TC 作为 Seata 的服务端独立部署。

  • TC (Transaction Coordinator) - 事务协调者维护全局和分支事务的状态,驱动全局事务提交或回滚。

  • TM (Transaction Manager) - 事务管理器 定义全局事务的范围:开始全局事务、提交或回滚全局事务。

  • RM (Resource Manager) - 资源管理器 管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。

二、部署

1. Centos部署Seata

1)下载

Seata Server 就是 TC,直接从官方仓库下载启动即可,下载地址:https://github.com/seata/seata/releases

下载后将安装包解压到CENTOS的目录下。

[root@docker_124 seata]# ls
bin  conf  Dockerfile  ext  lib  LICENSE  logs  script  target

2)准备数据库

此处使用MySQL,表初始化脚本在安装包的/script/server/db目录下,对应脚本是mysql.sql

[root@docker_124 db]# pwd
/data/seata/script/server/db
[root@docker_124 db]# ls
mysql.sql  oracle.sql  postgresql.sql
[root@docker_124 db]#

创建数据库seata并执行脚本 ,步骤略。

3)配置NACOS

创建nacos配置,dataId seataserver.properties,Group SEATA_GROUP

修改配置,填入存储配置,因为我即将配置的存储是Mysql,所以只需要复制数据库配置,配置在 https://github.com/seata/seata/blob/develop/script/config-center/config.txt 文本中复制

#These configurations are required if the `store mode` is `db`. If `store.mode,store.lock.mode,store.session.mode` are not equal to `db`, you can remove the configuration block.
store.db.datasource=druid
store.db.dbType=mysql
store.db.driverClassName=com.mysql.jdbc.Driver
store.db.url=jdbc:mysql://127.0.0.1:3306/seata?useUnicode=true&rewriteBatchedStatements=true
store.db.user=username
store.db.password=password
store.db.minConn=5
store.db.maxConn=30
store.db.globalTable=global_table
store.db.branchTable=branch_table
store.db.distributedLockTable=distributed_lock
store.db.queryLimit=100
store.db.lockTable=lock_table
store.db.maxWait=5000

每一项配置的介绍参考文档链接 https://seata.io/zh-cn/docs/user/configurations.html

4)修改配置文件

修改软件conf目录下的application.yml配置(旧版的配置可能是类似json的配置,我这新版的是yaml),同目录中提供了application.example.yml 样例以供参考

#  Copyright 1999-2019 Seata.io Group.
#
#  Licensed under the Apache License, Version 2.0 (the "License");
#  you may not use this file except in compliance with the License.
#  You may obtain a copy of the License at
#
#  http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
#  limitations under the License.

# 服务商品
server:
  port: 7091

spring:
  application:
    name: seata-server

logging:
  config: classpath:logback-spring.xml
  file:
    path: ${user.home}/logs/seata
  extend:
    logstash-appender:
      destination: 127.0.0.1:4560
    kafka-appender:
      bootstrap-servers: 127.0.0.1:9092
      topic: logback_to_logstash
# 控制台的用户名密码,类似nacos
console:
  user:
    username: seata
    password: seata
seata:
	# 配置中心,使用nacos,并配置nacos的地址等
  config:
    # support: nacos, consul, apollo, zk, etcd3
    type: nacos
    nacos:
      server-addr: http://10.4.7.1:8848
      # namespace: 7392baed-d98b-48a4-8676-34e1b38eade6
      namespace: e2df44d5-bd8e-4135-9314-7315f633077e
      group: SEATA_GROUP
      username: nacos
      password: nacos
      ##if use MSE Nacos with auth, mutex with username/password attribute
      #access-key: ""
      #secret-key: ""
      data-id: seataServer.properties
  # 注册中心,使用nacos,并配置
  registry:
    # support: nacos, eureka, redis, zk, consul, etcd3, sofa
    type: nacos
    nacos:
      server-addr: http://10.4.7.1:8848
      # namespace: 7392baed-d98b-48a4-8676-34e1b38eade6
      namespace: e2df44d5-bd8e-4135-9314-7315f633077e
      group: SEATA_GROUP
      username: nacos
      password: nacos
      ##if use MSE Nacos with auth, mutex with username/password attribute
      #access-key: ""
      #secret-key: ""
      data-id: seataServer.properties
  # 存储,使用db,在nacos中配置了数据库的信息
  store:
    # support: file 、 db 、 redis
    mode: db
#  server:
#    service-port: 8091 #If not configured, the default is '${server.port} + 1000'
  security:
    secretKey: SeataSecretKey0c382ef121d778043159209298fd40bf3850a017
    tokenValidityInMilliseconds: 1800000
    ignore:
      urls: /,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.jpeg,/**/*.ico,/api/v1/auth/login

5)启动

配置好后就可以执行bin目录下的seata-server.sh脚本进行启动了。启动好以后访问http://ip:7091使用seata/seata即可进行登录

如果 启动有问题,可以查看 seata/logs/start.out进行排查

本次配置和启动的过程中遇到了一些问题:

  • mysql 因为dockerhub突然的失灵所以必须重新安装,重新配置远程访问权限,导致一些连不上mysql的问题
  • 配置application.yml时,config配置了nacos以及nacos相关的配置,但是registry虽然type配置了nacos,但是并没有配置nacos的详细配置信息,导致日志中报localhost:8848无法访问的问题。

2. Docker部署Seata

官方文档在这里,也很详细

http://seata.io/zh-cn/docs/ops/deploy-by-docker.html

1)准备数据库与nacos

这部分与centos相同,步骤省略

2)下载镜像及启动

下载镜像,可以在docker hub上搜索镜像,不要用默认的latest,有可能不是release版本,jdk也可能不一样。

我选择的是 1.6.1版本

[root@docker_124 conf]# docker pull seataio/seata-server:1.6.1
1.6.1: Pulling from seataio/seata-server
001c52e26ad5: Pull complete
d9d4b9b6e964: Pull complete
2068746827ec: Pull complete
9daef329d350: Pull complete
d85151f15b66: Pull complete
52a8c426d30b: Pull complete
8754a66e0050: Pull complete
5ed2ec2d6ee2: Pull complete
b71086c56a63: Pull complete
1181f8e565af: Pull complete
6d058363682a: Pull complete
adc1f51855c8: Pull complete
5b571cda842d: Pull complete
Digest: sha256:07796d3dff51cc34f4980d55ecde87c5271a34824fe1eeea9ddb57dbfee6b9e6
Status: Downloaded newer image for seataio/seata-server:1.6.1
docker.io/seataio/seata-server:1.6.1

ps: 我在mac上面下载镜像时还出了一点小插曲,我的vmware中可以正常docker pull镜像,但是在mac中总是retry,不知道为什么,于是我使用docker save -o seata-server-1.6.1.tar seataio/seata-server:1.6.1命令把镜像从虚拟机中导出,然后在mac中使用docker import seata-server-1.6.1.tar seataio/seata-server:1.6.1进行镜像导入。

启动一个临时的seata容器然后将配置文件从容器中拷贝到本机目录中

# 启动临时seata容器
docker run -d --name seata-serve seataio/seata-server:latest
# 导出配置文件
docker cp seata-serve:/seata-server/resources /Users/jiangwujie/files/docker-data/seata/config/resources

修改application.yml,修改nacos和db配置与centos配置相同

使用本地目录映射seata容器的配置目录,启动seata 容器

docker run -d --name seata-server -p 8091:8091 -p 7091:7091 -v /Users/jiangwujie/files/docker-data/seata/config/resources:/seata-server/resources seataio/seata-server:1.6.1

如果未启动成功,则可以通过docker logs containerId 查看日志。

我这由于 nacos 和 mysql都是在docker中启动的,而seata容器中要连接另外两个docker容器中的 nacos和mysql,需要知道nacos和mysql在docker 通信中的ip是多少,有一个简单的方法:在容器内执行 ip route 命令,default via 后面跟着的 IP 就是宿主机的 IP。

docker run --rm busybox ip route
default via 172.17.0.1 dev eth0
172.17.0.0/16 dev eth0 scope link  src 172.17.0.6

这样,在seata中配置的nacos和mysql的地址就分别为 172.17.0.1:8848172.17.0.1:3306了。

docker正常启动以后,即可通过 http://localhost:7091访问seata控制台。

参考文档:

  • docker 部署seata

    http://seata.io/zh-cn/docs/ops/deploy-by-docker.html

  • 导入导出镜像容器

    https://blog.csdn.net/u010797364/article/details/120430270

  • Docker下Nacos通过MySQL实现持久化

    https://blog.csdn.net/Fyf_010316/article/details/103816599

  • docker 连接宿主机的 MySQL

    https://blog.csdn.net/xs18952904/article/details/106518424

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/778287.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity+chatgpt+webgl实现声音录制+语音识别

一、前言 AI二次元女友这个项目持续更新,在window端的语音识别和语音合成的功能,在上一篇博文里已经详细说明了微软Azure语音服务的代码实现。也是为了实现一次代码,多端复用这样的诉求,所以全部的代码实现都改成了web api的方式…

openSUSE leap 15.3安装mysql-community-server

openSUSE Software 下载"https://software.opensuse.org/ymp/home:bjoernv/15.3/mysql-community-server.ymp" wget "https://software.opensuse.org/ymp/home:bjoernv/15.3/mysql-community-server.ymp" 双击"mysql-community-server.ymp" 添…

Flutter Windows通过嵌入Native窗口实现渲染视频

Flutter视频渲染系列 第一章 Android使用Texture渲染视频 第二章 Windows使用Texture渲染视频 第三章 Linux使用Texture渲染视频 第四章 全平台FFICustomPainter渲染视频 第五章 Windows使用Native窗口渲染视频(本章) 文章目录 Flutter视频渲染系列前言…

FPGA XDMA 中断模式实现 PCIE3.0 QT上位机图片传输 提供工程源码和QT上位机源码

目录 1、前言2、我已有的PCIE方案3、PCIE理论4、总体设计思路和方案图像产生、发送、缓存XDMA简介XDMA中断模式图像读取、输出、显示QT上位机及其源码 5、vivado工程详解6、上板调试验证7、福利:工程代码的获取 1、前言 PCIE(PCI Express)采…

【深度学习之YOLO8】环境部署

目录 一、确定版本CUDA toolkit、cuDNN版本Python、PyTorch版本 二、安装Python下载环境变量验证安装 三、安装Anaconda安装环境变量验证安装创建conda虚拟环境常用命令 四、安装CUDA toolkit下载环境变量验证安装 五、配置cuDNN下载 六、安装PyTorch(torchtorchversiontorchau…

JavaWeb课程设计项目实战(05)——项目编码实践2

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 在本节教程中,我们完成项目的登录功能。 User 请在bean包中创建User类,代码如下: package com.cn.bean; /*** 本文作者:谷…

离线安装mysql8

一、先前往官网下载mysql8 下载地址: https://dev.mysql.com/downloads/ 选择Linux 二、删除Linux中的mysql(如果有的话),上传安装包 1、先查看mysql是否存在,命令如下: rpm -qa|grep -i mysql 如果使用…

集成了Eureka的应用启动失败,端口号变为8080

问题 报错:集成了Eureka的应用启动失败,端口号变为8080。 原来运行的项目,突然报错,端口号变为8080: Tomcat initialized with port(s): 8080 (http)并且,还有如下的错误提示: RedirectingE…

keil5编辑器主题配色美化使用(附六款暗黑主题)

一、通过配置文件修改主题 1、在软件安装目下备份以下三个文件,更换主题只需要替换global.prop arm.propglobal.propglobal.prop.def 2、替换配置文件 将已经准备好的配色文件复制到\UV4下替换 https://download.csdn.net/download/qq_43445867/88064961 Theme1…

通讯录--动态版

简易的通讯录往往需要朴实的“烹饪”就能完成一道“美味的佳肴”。 我们需要一个通讯录,能够存储联系人的信息,能够对联系人的信息进行增删查改,查询,按姓名排序。相比对之前的三子棋、扫雷,有了一定的了解&#xff0c…

git commit -m时候没有保存package.json等文件

项目场景: 提示:git add . 和 git commit -m "保存" 操作,没有保存package.json等文件。 解决方案: 1.确保 package.json 文件没有被列在 .gitignore 文件中。打开 .gitignore 文件,检查是否有类似于 packa…

数据库运维——备份恢复

数据库备份,数据库为school,素材如下 1.创建student和score表 CREATE TABLE student ( id INT(10) NOT NULL UNIQUE PRIMARY KEY , name VARCHAR(20) NOT NULL , sex VARCHAR(4) , birth YEAR, department VARCHAR(20) , address VARCHAR(…

交换一个整数二进制位的奇数位和偶数位

目录 一、方案一 1.求待操作数的二进制序列 2.创建一个数组存放待操作数的二进制序列 3.交换二进制序列奇偶位 4.输出奇偶位交换之后的二进制序列 5.代码 二、方案二(宏的实现) 1.求待操作数二进制序列偶数位 2.求待操作数二进制序列奇数位 3.求待…

目标检测——yoloV3案例

目录 数据获取TFrecord文件什么是TFrecord文件将数据转换成TFrecord文件读取TFrecord文件数据处理 模型构建模型训练损失函数的计算正负样本的设定模型训练获取数据集加载模型模型训练 模型预测 数据获取 labellmage使用方法 TFrecord文件 什么是TFrecord文件 将数据转换成T…

python暴力破解wifi密码

python破解WiFi密码 无图形化界面版图形化界面版 刚开始怀着是以为可以自动生成并匹配密码进行破解,然后才知道都需要使用密码本,破解都不知道要猴年马月去了。。。。。但可以研究理解一下代码过程 使用pycharm需要调试一下,比较麻烦&#xf…

【Docker】Docker网络与存储(三)

前言: Docker网络与存储的作用是实现容器之间的通信和数据持久化,以便有效地部署、扩展和管理容器化应用程序。 文章目录 Docker网络桥接网络容器之间的通信 覆盖网络创建一个覆盖网络 Docker存储卷 总结 Docker网络 Docker网络是在容器之间提供通信的机…

速成版-带您一天学完python自动化测试(selenium)

Selenium是一套web网站的程序自动化操作解决方案。我们通过编写自动化程序,使得自动完成浏览器界面的相关操作,除了能够自动化的完成相关操作,还能从web页面获取相关信息,然后通过程序进行分析处理,本质上就是提升从网…

微信小程序的微信一键登录与验证码登录

验证码登录 <template><view class"wx-login"><view class"login-Box"><text class"title">欢迎登录</text><text class"subTitle">再就业男团系统</text><view class"login-Form…

pytorch安装GPU版本 (Cuda12.1)教程: Windows、Mac和Linux系统快速安装指南

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

java List的stream().collect()方法实战

文章目录 订单类测试类测试结果 这几天在做银联的银行卡对账时&#xff0c;一开始只使用参考号来确定一笔交易&#xff0c;但是这样是不严谨的&#xff0c;项目经理要求使用商户号、终端号、流水号、批次号、参考号五个数据项来确定唯一性&#xff0c;所以本次list转map是在此背…