【Seata】00 - Seata Server 部署(Windows、Docker 基于 Jpom)

文章目录

前言

上篇文章上来就是先从事务模式入手,使用 seata-server 也是直接用 GitHub 上下载的 zip 解压后的脚本运行的,结果也没有好好地说明一下关于 seata-server 的部署,因此这篇文章先来补充一下部署的两种方式。

参考目录

版本说明

  • SeataV1.7.0
  • JpomV2.10.43

Windows 部署 seata-server

这种方式比较简单直接,上一篇文章就是用的这种方式。

1:下载压缩包

GitHub 选择下载需要的版本:

2:文件存储模式

Server端存储模式(store.mode)现有file、db、redis三种(后续将引入raft,mongodb),file模式无需改动,直接启动即可。

直接运行脚本,sessionStore 是运行后生成的本地存储文件。

但是文件存储的方式一般很少用,本文使用的是 db 存储模式。

3:db 存储模式

3.1:建表

全局事务-->分支事务-->全局锁,对应表global_table、branch_table、lock_table

在 GitHub 上有 sql 脚本

这里贴一下 mysql.sql 脚本内容:

sql 复制代码
-- -------------------------------- The script used when storeMode is 'db' --------------------------------
-- the table to store GlobalSession data
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_status_gmt_modified` (`status` , `gmt_modified`),
    KEY `idx_transaction_id` (`transaction_id`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4;

-- 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 = InnoDB
  DEFAULT CHARSET = utf8mb4;

-- 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),
    `status`         TINYINT      NOT NULL DEFAULT '0' COMMENT '0:locked ,1:rollbacking',
    `gmt_create`     DATETIME,
    `gmt_modified`   DATETIME,
    PRIMARY KEY (`row_key`),
    KEY `idx_status` (`status`),
    KEY `idx_branch_id` (`branch_id`),
    KEY `idx_xid` (`xid`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4;

CREATE TABLE IF NOT EXISTS `distributed_lock`
(
    `lock_key`       CHAR(20) NOT NULL,
    `lock_value`     VARCHAR(20) NOT NULL,
    `expire`         BIGINT,
    primary key (`lock_key`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4;

INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('AsyncCommitting', ' ', 0);
INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('RetryCommitting', ' ', 0);
INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('RetryRollbacking', ' ', 0);
INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('TxTimeoutCheck', ' ', 0);

3.2:修改配置文件

路径:

shell 复制代码
seata/conf/application.yml

可以从 application.example.yml 文件中复制,但需要注意的是不同的 MySQL 版本需要修改驱动类名称(默认的配置不支持 MySQL 8)。

  • MySQL 5.7(默认):com.mysql.jdbc.Driver
  • MySQL 8:com.mysql.cj.jdbc.Driver
yml 复制代码
seata:
  store:
    # support: file 、 db 、 redis
    mode: db
    session:
      mode: db
    lock:
      mode: db
    db:
      datasource: druid
      db-type: mysql
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://127.0.0.1:3306/seata_test1?rewriteBatchedStatements=true
      user: root
      password: root
      min-conn: 10
      max-conn: 100
      global-table: global_table
      branch-table: branch_table
      lock-table: lock_table
      distributed-lock-table: distributed_lock
      query-limit: 1000
      max-wait: 5000

3.3:启动脚本

同文件模式一样,直接双击启动即可。

4:源码部署

源码部署也比较简单,拉取代码到本地之后,修改配置,启动 main 方法即可,这里不再展开说明。

Docker 部署 seata-server (基于 Jpom)

Docker 部署也很简单,按照官方文档的部署步骤一步步操作下来即可。

既然要写的话就写点不一样的,之前有写过关于 Jpom 部署 RabbitMQ 的文章,本文同样以 Jpom 操作来说明如何部署 seata-server。

1:安装 Jpom(安装包方式)

之前文章里面用的是 Docker 一键安装,这里说明一下安装包的方式。

之所以用安装包安装,是因为在 Jpom 构建项目的时候,如果使用 Docker 安装,只支持容器构建,不支持本地构建。容器构建需要写 DSL 构建文档,本地构建则可以写构建命令(比较像 Jenkins 编写部署脚本,容易入手)。

文章开篇的参考目录里面就已经贴出了 Jpom 安装的官方文档,跟着文档操作即可,下面简单列举一下操作命令。

1.1:jpom-agent 安装

创建文件夹:

shell 复制代码
cd /usr/local/jpom/
mkdir jpom-agent

将安装包传到新建的文件夹中。

解压:

shell 复制代码
tar -zxf agent-2.10.43-release.tar.gz -C ./jpom-agent

运行:

shell 复制代码
cd /usr/local/jpom/jpom-agent/bin/
bash ./Agent.sh start

1.2:jpom-server 安装

创建文件夹:

shell 复制代码
cd /usr/local/jpom/
mkdir jpom-server

将安装包传到新建的文件夹中。

解压:

shell 复制代码
tar -zxf server-2.10.43-release.tar.gz -C ./jpom-server

运行:

shell 复制代码
cd /usr/local/jpom/jpom-server/bin/
bash ./Server.sh start

1.3:访问测试

访问路径:

url 复制代码
http://192.168.2.158:2122/

初始化的一些操作这里就不再进行说明了,可以参考官方文档进行设置。

2:Jpom Docker部署 seata-server

首先在系统管理里面对相关的设备信息进行设置。

2.1:拉取镜像

菜单:功能管理 ------ Docker 管理 ------ Docker 列表 ------ 控制台

进入镜像列表拉取镜像:

填写镜像名称 seataio/seata-server:1.7.0,点击拉取。

如果不知道镜像名称,可以去 dockerhub 上复制一下。

如果是使用服务器终端进行拉取,可以直接复制拉取命令:

shell 复制代码
docker pull seataio/seata-server:1.7.0

点击拉取之后会出现拉取日志:

等待拉取完成即可:

如果是使用终端命令拉取:

2.2:创建容器

拉取完成后刷新镜像列表,可以看到 seata-server 镜像。

点击创建容器:

修改容器信息:

容器创建完成:

如果是使用命令创建:

bash 复制代码
 docker run --name seata-server -p 8091:8091 -p 7091:7091 seataio/seata-server:1.7.0

2.3:查看容器日志

右侧按钮展开查看日志:

2.4:访问测试

访问路径:

url 复制代码
http://192.168.2.158:7091/

2.5:启动 Demo

首先修改 demo 配置的 ip 地址:

启动所有模块,查看容器日志:

(完)

相关推荐
茶馆大橘6 天前
微服务系列六:分布式事务与seata
分布式·docker·微服务·nacos·seata·springcloud
Stringzhua20 天前
【SpringCloud】Seata微服务事务
spring cloud·微服务·seata
君哥聊技术21 天前
Apache Seata 新版本集成了 RocketMQ 事务消息
rocketmq·seata
IT云清23 天前
Apache Seata Raft模式配置中心
java·分布式·apache·seata·分布式事务
灰色孤星A2 个月前
分布式事务学习笔记(四)微服务实现Stata AT模式、Stata Saga模式介绍
微服务·seata·分布式事务·at模式·saga模式·微服务实现seata
灰色孤星A2 个月前
分布式事务学习笔记(二)Seata架构、TC服务器部署、微服务集成Seata
分布式·微服务·架构·seata·分布式事务·tc服务器·微服务集成seata
江喜原2 个月前
Seata
数据库·分布式·mysql·seata
长安初雪2 个月前
微服务集成 Seata
微服务·云原生·架构·seata·分布式事务
马剑威(威哥爱编程)3 个月前
分布式事务Seata的4种模式详解
java·分布式·spring cloud·事务·seata·威哥爱编程
真我的风采i3 个月前
初始化seata在nacos的配置报错nacos-config.sh 127.0.0.1-nacos-config.txt-文件不存在
java·windows·git·nacos·seata·sh脚本