seata docker 高可用部署的详细介绍

版本

1.4.2
官方文档
dockerhub

启动

通过环境变量SEATA_CONFIG_NAME指定配置文件位置/root/seata-config/registry.conf

docker run --name seata-server \
        -p 8091:8091 \
        -e SEATA_CONFIG_NAME=file:/root/seata-config/registry \
        -v /User/seata/config:/root/seata-config  \
        seataio/seata-server

配置文件

实现高可用需要依赖注册中心,配置中心,数据库
registry.conf

registry {
  type = "nacos"

  nacos {
    application = "seata-server"
    serverAddr = "192.168.199.2"
    namespace = "test"
    group = "SEATA_GROUP"
    cluster = "default"
    username = ""
    password = ""
  }
}

config {
  type = "nacos"
  nacos {
    serverAddr = "192.168.199.2"
    namespace = "test"
    group = "SEATA_GROUP"
    username = ""
    password = ""
  }
}

NACOS配置

注:使用nacos配置,需要在对应分组(SEATA_GROUP)下针对配置项目逐条配置文本值,而不是创建包含所有配置的properties文件,可以使用官方源码中的脚本导入
全部可用配置参考

1. 使用数据库

store.mode=db
store.db.datasource=druid
store.db.dbType=mysql
store.db.driverClassName=com.mysql.jdbc.Driver
store.db.url=jdbc:mysql://192.168.199.2:3306/seata?useUnicode=true&rewriteBatchedStatements=true
store.db.user=root
store.db.password=123456

创建数据库

建库脚本

-- -------------------------------- 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_gmt_modified_status` (`gmt_modified`, `status`),
    KEY `idx_transaction_id` (`transaction_id`)
) ENGINE = InnoDB
  DEFAULT 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 = InnoDB
  DEFAULT 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 = InnoDB
  DEFAULT CHARSET = utf8;

异常处理

1. 客户端报错 Data too long for column ‘application_id'

io.seata.core.exception.TmTransactionException: TransactionException[begin global request failed. xid=null, msg=Data truncation: Data too long for column ‘application_id' at row 1]
at io.seata.tm.DefaultTransactionManager.begin(DefaultTransactionManager.java:55) ~[seata-all-1.3.0.jar:1.3.0]
at io.seata.tm.api.DefaultGlobalTransaction.begin(DefaultGlobalTransaction.java:104) ~[seata-all-1.3.0.jar:1.3.0]
at io.seata.tm.api.TransactionalTemplate.beginTransaction(TransactionalTemplate.java:175) ~[seata-all-1.3.0.jar:1.3.0]

seata数据库global_table.application_id字段默认长度为varchar(32),如果客户端应用ID超长则报此错
手动修改字段类型增加长度即可

到此这篇关于seata docker 高可用部署的文章就介绍到这了,更多相关seata docker部署内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SEATA事务服务DOCKER部署的过程详解

    1.创库授权语句 > create database seata: > grant all on seata.* to seata_user@'%' identified by '123455' 2.数据库建表语句 cat create_seata_table.sql -- -------------------------------- The script used when storeMode is 'db' -------------------------------- -- the

  • Docker部署mysql远程连接 解决2003的问题

    连接MySQL 这里我使用navicat远程连接,连接MySQL前需要防火墙开放端口或者关闭防火墙. 开放端口 firewall-cmd --add-port=3306/tcp --permanent // --permanent 永久生效,没有此参数重启后失效 firewall-cmd --reload // 重新载入 关闭防火墙 systemctl stop firewalld systemctl enable iptables // 设置开机启动 firewall-cmd --reload

  • docker-compose基于MySQL8部署项目的实现

    1.首先按照以下的路径创建相应的文件夹 /usr/local/docker/mysql 2.然后在该目录下创建docker-compose.yml文件并且在文件中加入以下的配置 version: '3.1' services: db: image: mysql restart: always environment: MYSQL_ROOT_PASSWORD: 123456 command: --default-authentication-plugin=mysql_native_password

  • seata docker 高可用部署的详细介绍

    版本 1.4.2 官方文档 dockerhub 启动 通过环境变量SEATA_CONFIG_NAME指定配置文件位置/root/seata-config/registry.conf docker run --name seata-server \ -p 8091:8091 \ -e SEATA_CONFIG_NAME=file:/root/seata-config/registry \ -v /User/seata/config:/root/seata-config \ seataio/seat

  • IDEA 集成 docker 实现远程部署的详细步骤

    1. docker 服务器开启远程访问 登录 docker 所在的远程服务器,使用命令 vim /usr/lib/systemd/system/docker.service 修改配置文件,需注意,修改时确认自己的账户拥有相应权限 主要操作是找到 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock 这一行,注释掉,重新添加一行,在后面新增-H tcp://0.0.0.0:2375表示打开2

  • xxl-job 带参数执行和高可用部署方法

    目录 1. 单参数 2. 多参数 3. 多节点部署 xxl-job 获取参数: String param = XxlJobHelper.getJobParam(); 1. 单参数 @XxlJob("TestOneHandler") public ReturnT<String> jobDemo(String s) throws Exception { String param = XxlJobHelper.getJobParam(); System.out.println(&

  • Redis Sentinel实现高可用配置的详细步骤

    一般情况下yum安装redis的启动目录在:/usr/sbin :配置目录在/etc/redis/在其目录下会有默认的redis.conf和redis-sentinel.conf redis高可用配置: 配置哨兵(redis-sentinel),我的所有配置文件都放在/etc/redis-cluster/目录下 1.创建redis-sentinel_26379.conf,主要内容如下: #基本配置 port 26379 daemonize yes logfile "/var/log/redis/

  • Docker Windows下如何安装详细介绍(图文)

    Docker Windows 介绍及安装 前言: 放在三年前,你不认识Docker情有可原,但如果现在你还这么说,不好意思,只能说明你OUT了,行动起来吧骚年,很可能你们公司或者你即将要去的公司,或者你想去的公司很可能就会引入Docker,或者已经引入了Docker. Docker溯源 Docker的前身是名为dotCloud的小公司,主要提供的是基于 PaaS(Platform as a Service,平台及服务)平台为开发者或开发商提供技术服务,并提供的开发工具和技术框架.因为其为初创的公

  • 理解Docker(1):Docker安装和基础用法详细介绍

    Docker是一个用了一种新颖方式实现的超轻量虚拟机,在实现的原理和应用上还是和VM有巨大差别,专业的叫法是应用容器(Application Container).(我个人还是喜欢称虚拟机) 1. 安装 1.1 在 Ubuntu 14.04 上安装 Docker 前提要求: 内核版本必须是3.10或者以上 依次执行下面的步骤: sudo apt-get update sudo apt-get install apt-transport-https ca-certificates sudo apt

  • Docker 教程之镜像列出详细介绍

    Docker 镜像列出: 列出 使用 docker images 显示本地已有的镜像. $ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ubuntu 12.04 74fe38d11401 4 weeks ago 209.6 MB ubuntu precise 74fe38d11401 4 weeks ago 209.6 MB ubuntu 14.04 99ec81b80c55 4 weeks ago 266 MB

  • Docker Runc容器生命周期详细介绍

    Docker Runc容器生命周期 容器的生命周期涉及到内部的程序实现和面向用户的命令行界面,runc内部容器状态转换操作.runc命令的参数定义的操作.docker client定义的容器操作是不同的,比如对于docker client的create来说, 语义和runc就完全不同,这一篇文章分析runc的容器生命周期的抽象.内部实现以及状态转换图.理解了runc的容器状态转换再对比理解docker client提供的容器操作命令的语义会更容易些. 容器生命周期相关接口 最基本的require

  • Ubuntu LTS服务器部署Jenkins详细介绍

    在Ubuntu 16.04 LTS服务器部署Jenkins 本文讲述怎样在Ubuntu 16.04 LTS服务器上部署Jenkins环境.Jenkins是基于Java语言开发的持续集成工具,为软件开发提供了一个持续集成服务.Jenkins是一个基于服务器的系统,运行在Servlet容器(比如Apache Tomcat)中.Jenkins支持SCM工具,包括AccuRev.CVS.Subversion.Git.Mercurial.Perforce.Clearcase和RTC等,可以只需基于Apac

  • 使用nginx+tomcat+keepalived实现高可用的详细步骤

    目录 架构设计 安装tomcat服务 192.168.166.128 192.168.166.129 安装nginx服务 安装keepalived 验证 架构设计 IP 服务应用 192.168.166.128 nginx/tomcat/keepalived 192.168.166.129 nginx/tomcat/keepalived 192.168.166.130 虚拟IP 我这是测试环境,防火墙全部关闭了. # 查看防火墙状态 systemctl status firewalld # 关闭

随机推荐