Seata 是一款开源的分布式事务解决方案,致力于提供高性能与简单易用的分布式事务服务,为用户提供了 AT、TCC、SAGA 和 XA 几种不同的事务模式。在 Seata 中主要有以下三种角色,其中 TM 和 RM 是作为 Seata 的客户端与业务系统集成在一起,TC 作为 Seata 的 Server 端(下文简称 seata-server)独立部署。而 seata-server 的部署模式支持多种:直接部署,使用 Docker、Docker-Compose、Kubernetes、Helm 等

本文主要介绍如何使用 docker 部署 seata-server,官网操作手册文档地址:https://seata.io/zh-cn/docs/ops/deploy-by-docker.html,使用 docker 好处这里就不多介绍了,由于我电脑是 window 系统,所以需要提前安装 docker desktop for window,安装教程读者请自行搜索

一、准备工作:

1、创建 seata-server 所需要的表

https://github.com/seata/seata/tree/1.4.2/script/server/db

TC 运行需要将事务信息保存在数据库,因此需要创建一些表,找到 seata-1.4.2 源码的 script\server\db 这个目录,将会看到以下SQL文件:

以 MySQL 数据库为例,创建数据库 seata,并执行 mysql.sql 文件中的sql语句:

CREATE TABLE IF NOT EXISTS `global_table`
(`xid`                       VARCHAR(128) NOT NULL,`transaction_id`            BIGINT,`status`                    TINYINT      NOT NULL,`application_id`            VARCHAR(32),`transaction_service_group` VARCHAR(32),`transaction_name`          VARCHAR(128),`timeout`                   INT,`begin_time`                BIGINT,`application_data`          VARCHAR(2000),`gmt_create`                DATETIME,`gmt_modified`              DATETIME,PRIMARY KEY (`xid`),KEY `idx_gmt_modified_status` (`gmt_modified`, `status`),KEY `idx_transaction_id` (`transaction_id`)
) ENGINE = InnoDBDEFAULT CHARSET = utf8;-- the table to store BranchSession data
CREATE TABLE IF NOT EXISTS `branch_table`
(`branch_id`         BIGINT       NOT NULL,`xid`               VARCHAR(128) NOT NULL,`transaction_id`    BIGINT,`resource_group_id` VARCHAR(32),`resource_id`       VARCHAR(256),`branch_type`       VARCHAR(8),`status`            TINYINT,`client_id`         VARCHAR(64),`application_data`  VARCHAR(2000),`gmt_create`        DATETIME(6),`gmt_modified`      DATETIME(6),PRIMARY KEY (`branch_id`),KEY `idx_xid` (`xid`)
) ENGINE = InnoDBDEFAULT CHARSET = utf8;-- the table to store lock data
CREATE TABLE IF NOT EXISTS `lock_table`
(`row_key`        VARCHAR(128) NOT NULL,`xid`            VARCHAR(128),`transaction_id` BIGINT,`branch_id`      BIGINT       NOT NULL,`resource_id`    VARCHAR(256),`table_name`     VARCHAR(32),`pk`             VARCHAR(36),`gmt_create`     DATETIME,`gmt_modified`   DATETIME,PRIMARY KEY (`row_key`),KEY `idx_branch_id` (`branch_id`)
) ENGINE = InnoDBDEFAULT CHARSET = utf8;

创建的三张表如下图:

  • global_table:全局事务表,每当有一个全局事务发起后,就会在该表中记录全局事务的ID
  • branch_table:分支事务表,记录每一个分支事务的ID,分支事务操作的哪个数据库等信息
  • lock_table:全局锁

2、下载 seata-server:

seata-server 下载地址:Releases · seata/seata · GitHub

3、构建项目:

本地解压 seata-server-1.4.2.tar.gz 压缩包,并取出 conf/file.conf 和 conf/registry.conf 用于配置运行时的相关参数,最后创建制作镜像所需的 Dockerfile 文件,最终文件目录结构如下:

4、修改 seata-server 的注册中心和配置中心:

在 registry.conf 文件中可以配置 TC的注册中心和配置中心,默认的注册中心是 file 形式,实际使用中肯定不能使用,这里我们改成Nacos形式;同样 Seate 的 TC 的配置中心默认也是使用 file 形式,需要修改为 nacos 作为配置中心:

registry {type = "nacos"nacos {application = "seata-server"serverAddr = "localhost:8848"namespace = "XXXXXXXXXX"cluster = "default"username = "nacos"password = "nacos"}
}config {type = "nacos"nacos {serverAddr = "localhost:8848"namespace = "XXXXXXXXXX"group = "SEATA_GROUP"username = "nacos"password = "nacos"}
}

需要改动的地方如下:

  • type:改成nacos,表示使用nacos作为注册中心或者配置中心
  • application:服务的名称
  • serverAddr:nacos的地址
  • group:分组
  • namespace:命名空间
  • username:用户名
  • password:密码

上述配置修改好之后,在TC启动的时候将会自动读取 nacos 的配置

5、导入 seata Server 配置:

建议将 seata 项目下载到本地并阅读 https://github.com/seata/seata/tree/1.4.2/script/config-center 路径下的README.md内容

在上面我们已经配置好 seata TC 的配置中心,那么 TC 需要存储到 Nacos 的配置都有哪些,如何推送过去呢?在 https://github.com/seata/seata/tree/1.4.2/script/config-center 中有一个 confIg.txt 文件,其中就是 TC 需要的全部配置,而 https://github.com/seata/seata/tree/1.4.2/script/config-center/nacos 中有一个 nacos-config.sh 脚本能够将 config.txt 中的全部配置自动推送到nacos中。

我们先启动nacos服务,然后在 nacos-config.sh 目录下执行下面命令,将 config.txt 中的配置信息推送到 nacos 中:

# -h 代表nacos服务的IP;-p 代表nacos的端口号;-g 分组信息;-t 命名空间ID;-u 用户名,-p 密码

$ sh nacos-config.sh -h 127.0.0.1 -p 8080 -g SEATA_GROUP -t 7a7581ef-433d-46f3-93f9-5fdc18239c65 -u nacos -w nacos

命令执行成功后,就可以在nacos中看到如下配置:

6、修改TC的事务信息存储方式:

seata 的 TC 端的事务信息存储模式(store.mode)现有file、db、redis三种,file模式无需改动,直接启动即可,下面专门讲下db和redis启动步骤。

注: file模式为单机模式,全局事务会话信息内存中读写并持久化本地文件 root.data,性能较高;

(1)以DB模式存储:

db模式为高可用模式,全局事务会话信息通过db共享,相应性能差些;上一节的内容已经将所有的配置信息都推送到了Nacos中,TC启动时会从Nacos中读取,因此我们修改也需要在Nacos中修改。需要修改的配置如下:

## 采用db的存储形式
store.mode=db
## druid数据源
store.db.datasource=druid
## mysql数据库
store.db.dbType=mysql
## mysql驱动
store.db.driverClassName=com.mysql.jdbc.Driver
## TC的数据库url
store.db.url=jdbc:mysql://127.0.0.1:3306/seata_server?useUnicode=true
## 用户名
store.db.user=root
## 密码
store.db.password=Nov2014

在nacos中搜索上述的配置,直接修改其中的值,比如修改 store.mode,如下图:

(2)以Redis模式存储:

redis模式 Seata-Server 1.3 及以上版本支持,性能较高,但存在事务信息丢失风险,所以需要提前配置合适当前场景的redis持久化配置,该模式需改动以下配置:

store.mode=redis
store.redis.host=127.0.0.1
store.redis.port=6379
store.redis.password=123456

至此,就完成 seata-server 的所有准备工作了,接下来我们介绍下如果制作 seate 的 docker 镜像

二、seata 镜像的制作与部署:

1、编写 Dockerfile:

FROM openjdk:8
MAINTAINER zhangweipeng# set environment
ENV SEATA_USER="seata" \BASE_DIR="/home/seata" \JVM_XMS="1g" \JVM_XMX="1g" \JVM_XMN="512m" \JVM_MS="128m" \JVM_MMS="320m" \TIME_ZONE="Asia/Shanghai"ARG SEATA_VERSION=1.4.2
# 设置工作目录
WORKDIR $BASE_DIRCOPY seata-server-${SEATA_VERSION}.tar.gz /home# 设置时间,东八区
RUN set -x \&& rm -f /etc/localtime \&& ln -snf /usr/share/zoneinfo/$TIME_ZONE /etc/localtime \&& echo '$TIME_ZONE' > /etc/timezone \&& tar -xzvf /home/seata-server-${SEATA_VERSION}.tar.gz -C /home/seata \&& rm -rf /home/seata-server-${SEATA_VERSION}.tar.gzADD conf/registry.conf /home/seata/seata/seata-server-${SEATA_VERSION}/conf/registry.conf
ADD conf/file.conf /home/seata/seata/seata-server-${SEATA_VERSION}/conf/file.conf#端口
EXPOSE 8091
RUN chmod +x /home/seata/seata/seata-server-${SEATA_VERSION}/bin/seata-server.sh
ENTRYPOINT ["/home/seata/seata/seata-server-1.4.2/bin/seata-server.sh" ]

2、构建镜像:

在 Dockerfile 所在目录输入以下命令进行镜像构建:

docker build -t seata-docker .

3、运行镜像:

(1)启动 seata-server

docker run --name seata-docker -p 8091:8091 seata-docker

(2)指定 seata-server的 IP 和端口启动:

docker run --name seata-docker -p 8091:8091 -e SEATA_IP=172.28.190.100 -e SEATA_PORT=8091 seata-docker

以这种方式启动的 seata-server,在注册中心注册的 IP 和 端口就是 SEATA_IP 和 SEATA_PORT 指定的值,除此之外,seata-server 还支持以下环境变量:

  • SEATA_IP:可选,指定seata-server启动的IP,该IP用于向注册中心注册时使用
  • SEATA_PORT:可选,指定seata-server启动的端口,默认为 8091
  • STORE_MODE:可选,指定seata-server的事务日志存储方式,支持 db、file、redis,默认是 file
  • SERVER_NODE:可选, 用于指定seata-server节点ID, 如 1,2,3...,默认根据IP生成
  • SEATA_ENV:可选,指定 seata-server 运行环境,如 dev、test 等,服务启动时会使用 registry-dev.conf 这样的配置
  • SEATA_CONFIG_NAME:可选,指定配置文件位置, 如 file:/root/registry, 将会加载 /root/registry.conf 作为配置文件,如果需要同时指定 file.conf文件,需要将registry.confconfig.file.name的值改为类似file:/root/file.conf

4、推送到远程仓库:

(1)登录远程仓库:

docker login -u username -p password repo-address.com

(2)镜像打标签:

docker tag 1f86b8e86442(镜像ID) repo-address.com/seata-docker:v1

打标签是因为 docker 的 image 标签默认是 latest,如果是其他版本要进行注明。

(3)推送到远程仓库:

docker push repo-address.com/seata-docker:v1

分布式事务seate-server的docker镜像的制作与部署相关推荐

  1. docker镜像包制作

    docker镜像包制作 1.背景及概述 1.1.背景 经常需要基于基础镜像构建定制化的镜像,所有需要进行镜像制作.镜像的构建有两种方法,一种为通过dockerfile的方式去构建,另外一种是通过在基础 ...

  2. 2 Docker镜像的制作和使用说明

    一.Docker镜像的分类 Docker镜像从来源,可以分为官方镜像和自制镜像.从制作方式不同又可分为自动生成镜像和定制镜像.本篇文章着重讲解镜像的各种制作和使用方法. 二.Docker镜像的制作 首 ...

  3. 史上最详细的Docker 镜像的制作-上传-拉取--部署(阿里云)

    Docker 镜像的制作-上传-拉取--部署 一.镜像(images) 1. 什么是镜像? 2. 镜像的组成和用途 (1)Dockerfile (2)scratch (3)一个完整的操作系统需要: 3 ...

  4. RocketMQ-docker镜像的制作与部署

    在制作 RocketMQ 的 docker 镜像之前,我们先了解一下如何在 window 环境下基于官网编译好的 Binary 文件去启动 RocketMQ 一.RocketMQ的下载与安装: 1.下 ...

  5. docker镜像编译与docker-compose部署与编排

    概念理解 虚拟机与docker.虚拟机用的是虚拟化的cpu,效率只有50%~60%.docker用的是物理cpu,效率趋近90% ~ 100%.docker进程隔离. docker的命令很多,都记住不 ...

  6. [docker]七、docker镜像的制作(超详细)、docker镜像结构原理、镜像的分享——harbor

    目录 1.镜像(images) 1.1.Dockerfile:是制作镜像的文件 2.镜像结构原理 2.1.base 镜像 2.1.1.rootfs和bootfs 2.1.2.base 镜像提供的是最小 ...

  7. tez-ui docker镜像打包配置并部署K8S

    一.下载tez ui安装包并修改配置文件 1.1 选择版本下载, tez-ui下载官方地址 mkdir tez-ui && cd tez-ui wget https://reposit ...

  8. Oracle Docker 镜像(制作)

    前言 在一个裸机 Linux 上安装 Oracle 步骤很多,且对安装环境有不少要求,一不小心就容易出错.安装过 Oracle 的想必都有一定感触. 在有些场合中我们对 Oralce 没有那么高的要求 ...

  9. 拷贝docker镜像到其他机器部署

    有拷贝docker images到其他主机的情况,当然是通过pull的方式来转移到其他宿主机. 1 sudo docker save -o golang:alpine3.7  ./my-golang- ...

最新文章

  1. java对于数组的定义_Java中方法的定义与使用,以及对数组的初步了解。
  2. Android --- log.e(),log.d(),log.i()等的区别
  3. CentOS6.2安装redmine2.3
  4. 苹果邮箱收发件服务器
  5. 来看看Python炫酷的颜色输出与进度条打印
  6. redis学习之redis的安装和简介
  7. linux 文件系统简介
  8. python中的多线程(一)
  9. UIView常见方法
  10. 学校网站模板s1_中学学校网站源码_学校网站管理系统
  11. vMix(视频混合器软件)v22.0.0.48免费版
  12. 深扒 | AI艺术品的另类产业链
  13. Picture Flash(图片放映)
  14. 三大框架之---MyBaits第二章
  15. JIS-CTF解题思路及关键语句
  16. 法国计算机与技术先进学校,法国计算机专业大学排名(2020年泰晤士)_快飞留学...
  17. 七牛数据处理再添新兵——图片瘦身
  18. GMM与K-means的那些事
  19. 2019年c++/c,java,python,前端,数据结构,ps等资料大全
  20. excel表格行宽列高怎么设置_解决方案:Excel自动调整列宽和行宽什么是快捷键? [Excel设置行高度自适应]...

热门文章

  1. 二、CSS知识总结(上篇)
  2. 博士申请 | 佐治亚理工学院陈永昕教授招收机器学习理论方向博士生
  3. 今日arXiv精选 | 13 篇 ICCV 2021 最新论文
  4. 可真有你的!EasyEdge模型压缩新姿势……
  5. ACL 2021 | SimCLS: 概念简单但足够有效的对比学习摘要生成框架
  6. 畅享云游戏,AWS云峰会邀你零距离体验强化学习!
  7. 直播 | KDD 2021论文解读:基于协同对比学习的自监督异质图神经网络
  8. 不用卷积也能生成清晰图像,用两个Transformer构建一个GAN
  9. 挑战弱监督学习的三大热门问题,AutoWSL2019挑战赛正式开赛
  10. 首届中国高校计算机大赛-人工智能创意赛启动,百度加盟全面赋能