当前位置:   article > 正文

Linux 环境下使用 Docker 部署 Seata 1.7.1 (图文教程)_linux docker部署seata

linux docker部署seata

前言

本篇参考 Seata 官方部署文档Linux 环境通过 Docker 部署 Seata 1.7.1 版本,以及为 youlai-mall 开源商城版本的升级做好准备工作。

环境准备

版本IP端口安装部署教程
操作系统Linux(CentOS 7.9)//搭建Linux虚拟机
数据库MySQL 8.0.27192.168.10.213306Linux 安装 MySQL8
注册配置中心Nacos 2.2.3192.168.10.228848、9848Linux 部署 Nacos 2.2.3
分布式事务Seata 1.7.1192.168.10.237091,8091/

创建数据库

访问 https://github.com/seata/seata/tree/1.7.1/script/server/db 获取 mysql.sql 脚本

-- 1. 执行语句创建名为 seata 的数据库
CREATE DATABASE seata DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci;

-- 2.执行脚本完成 Seata 表结构的创建
use seata;

-- https://github.com/seata/seata/blob/1.7.1/script/server/db/mysql.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);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80

安装 Seata

下载镜像

访问 Seata Docker镜像标签页面 获取最新的Seata Docker镜像下载链接。

docker pull seataio/seata-server:1.7.1
  • 1

自定义配置文件

自定义配置文件需要通过挂载文件的方式实现,将宿主机上的 application.yml 挂载到容器中相应的目录。

按照官方提供的方案,创建临时容器,将 resources 目录文件拷贝到宿主机,再删除临时容器,典型的过河拆桥

宿主机创建存放 seata 配置的目录

mkdir -p /opt/seata/config
  • 1

启动临时容器

docker run -d -p 8091:8091 -p 7091:7091  --name seata-server seataio/seata-server:1.7.1
  • 1

拷贝临时容器的配置至宿主机

docker cp seata-server:/seata-server/resources/. /opt/seata/config
  • 1

完成之后删除临时容器(过河拆桥)

docker rm -f seata-server
  • 1

自定义配置

上面通过自定义配置文件将 Seata 应用的配置拷贝到宿主机的 /opt/seata/config 目录下,方便接下来自定义修改配置。

因为配置和注册中心类型选用的是 Nacos ,所以需要调整 /opt/seata/config/application.yml 配置文件的 seata.configseata.registry 两个节点(参考同目录下示例配置application.example.yml),其他默认无需修改。修改后的配置如下:

# /opt/seata/config/application.yml
seata:
  # 配置中心-nacos
  config:
    type: nacos  # support: nacos, consul, apollo, zk, etcd3
    nacos:
      server-addr: 192.168.10.22:8848
      namespace:
      group: SEATA_GROUP
      username: 
      password: 
      context-path:
      data-id: seataServer.properties
  # 注册中心-nacos
  registry:
    type: nacos  # support: nacos, eureka, redis, zk, consul, etcd3, sofa
    nacos:
      application: seata-server
      server-addr: 192.168.10.22:8848
      group: SEATA_GROUP
      namespace:
      cluster: default    # TC 集群名称,下文 Seata 客户端中配置事务分组名和集群名映射使用
      username: 
      password: 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 192.168.179.22: 配置中心 Nacos 的IP地址

Seata 使用 Nacos 作为配置中心,所以需要将 Seata 配置中心的配置 config.txt 文件导入 Nacos 。

本篇使用 MySQL 作为 Seata 的存储方案,所以需要修改 seataServer.properties 配置文件中的存储模式和数据库连接配置,具体修改如下:

# seataServer.properties

# 配置存储模式为: db(数据库)
store.mode=db
store.lock.mode=db
store.session.mode=db
# 数据库连接配置
store.db.url=jdbc:mysql://192.168.10.21:3306/seata?useUnicode=true&rewriteBatchedStatements=true
store.db.user=root
store.db.password=123456
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 192.168.10.21 : MySQL 服务 IP 地址

启动 Seata

执行以下命令来创建并运行 seata 容器

docker run -d \
    --name seata-server \
    --restart=always \
    -p 8091:8091 \
    -p 7091:7091 \
    -e SEATA_IP=192.168.10.23 \
    -v /opt/seata/config:/seata-server/resources \
    seataio/seata-server:1.7.1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 192.168.10.23: seata-server 所在宿主机的 IP,该IP用于向注册中心注册时使用

访问 Nacos 控制台,看到 seata-server 已成功注册。

开源项目

微服务商城项目

GithubGitee
开源组织有来开源组织有来开源组织
后端youlai-mall
推荐阅读
相关标签