Docker+nacos+seata1.3.0安装与使用配置教程

在此之前我搞了一天,虽然seata好用,用起来也超级简单,但是安装配置是真的麻烦,遇见了各种坑,下面来进入正题。o(╥﹏╥)o

一 . 版本

注意:如果版本不匹配也会有各种报错,可以根据官网匹配版本。

seata:1.3.0
alibaba.cloud:2.2.3.RELEASE
nacos:2.0.2

二. docker安装搭建seata服务端

2.1 下载seata镜像

docker pull seataio/seata-server:1.3.0

2.2 在Linux目录下创建registry.conf,我的路径在/data/seate/registry.conf,接下来的所有创建都在这个目录下

cd /data
mkdir seate
vim registry.conf

2.3 registry.conf中的内容如下

registry {
  type = "nacos"

  nacos {
    application = "seata-server"
    serverAddr = "127.0.0.1:8848"
    group = "SEATA_GROUP"
    namespace = ""
    cluster = "default"
    username = ""
    password = ""
  }
}

config {
  type = "nacos"

  nacos {
    serverAddr = "127.0.0.1:8848"
    namespace = ""
    group = "SEATA_GROUP"
    username = ""
    password = ""
  }
}

注意registry和config需要在同一个组下,注册中心我用的是nacos,注意nacos的地址要改。

----->>>这里我插一句,需要新建一个数据库seata,并且新建三张表,

-- -------------------------------- 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(96),
    `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;

实现分布式每个业务库都要加一张表undo_log,不然会报错,

CREATE TABLE `undo_log` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `branch_id` bigint(20) NOT NULL COMMENT 'branch transaction id',
  `xid` varchar(100) NOT NULL COMMENT 'global transaction id',
  `context` varchar(128) NOT NULL COMMENT 'undo_log context,such as serialization',
  `rollback_info` longblob NOT NULL COMMENT 'rollback info',
  `log_status` int(11) NOT NULL COMMENT '0:normal status,1:defense status',
  `log_created` datetime(6) NOT NULL COMMENT 'create datetime',
  `log_modified` datetime(6) NOT NULL COMMENT 'modify datetime',
  PRIMARY KEY (`id`),
  UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COMMENT='AT transaction mode undo table';

2.4 创建推送配置文件 vim config.txt,是将文件中的配置推送到nacos中去。

vim config.txt
service.vgroupMapping.btb_tx_group=default
store.mode=db
store.db.datasource=druid
store.db.dbType=mysql
store.db.driverClassName=com.mysql.cj.jdbc.Driver
store.db.url=jdbc:mysql://172.0.0.1:3306/seata?useUnicode=true
store.db.user=root
store.db.password=root
store.db.minConn=5
store.db.maxConn=30
store.db.globalTable=global_table
store.db.branchTable=branch_table
store.db.queryLimit=100
store.db.lockTable=lock_table
store.db.maxWait=5000

注意btb_tx_group需要与客户端保持一致,顺便注意数据库驱动,如果是8以上用我的这个驱动,5.7的用com.mysql.jdbc.Driver

2.5 创建推送脚本,因为执行脚本要在config.txt的下一层,所有加一层目录

mkdir sh
cd sh
vim nacos-config.sh

内容如下:最好不要有任何的修改

#!/usr/bin/env bash
# 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.

while getopts ":h:p:g:t:u:w:" opt
do
  case $opt in
  h)
    host=$OPTARG
    ;;
  p)
    port=$OPTARG
    ;;
  g)
    group=$OPTARG
    ;;
  t)
    tenant=$OPTARG
    ;;
  u)
    username=$OPTARG
    ;;
  w)
    password=$OPTARG
    ;;
  ?)
    echo " USAGE OPTION: $0 [-h host] [-p port] [-g group] [-t tenant] [-u username] [-w password] "
    exit 1
    ;;
  esac
done

if [[ -z ${host} ]]; then
    host=localhost
fi
if [[ -z ${port} ]]; then
    port=8848
fi
if [[ -z ${group} ]]; then
    group="SEATA_GROUP"
fi
if [[ -z ${tenant} ]]; then
    tenant=""
fi
if [[ -z ${username} ]]; then
    username=""
fi
if [[ -z ${password} ]]; then
    password=""
fi

nacosAddr=$host:$port
contentType="content-type:application/json;charset=UTF-8"

echo "set nacosAddr=$nacosAddr"
echo "set group=$group"

failCount=0
tempLog=$(mktemp -u)
function addConfig() {
  curl -X POST -H "${contentType}" "http://$nacosAddr/nacos/v1/cs/configs?dataId=$1&group=$group&content=$2&tenant=$tenant&username=$username&password=$password" >"${tempLog}" 2>/dev/null
  if [[ -z $(cat "${tempLog}") ]]; then
    echo " Please check the cluster status. "
    exit 1
  fi
  if [[ $(cat "${tempLog}") =~ "true" ]]; then
    echo "Set $1=$2 successfully "
  else
    echo "Set $1=$2 failure "
    (( failCount++ ))
  fi
}

count=0
for line in $(cat $(dirname "$PWD")/config.txt | sed s/[[:space:]]//g); do
  (( count++ ))
	key=${line%%=*}
    value=${line#*=}
	addConfig "${key}" "${value}"
done

echo "========================================================================="
echo " Complete initialization parameters,  total-count:$count ,  failure-count:$failCount "
echo "========================================================================="

if [[ ${failCount} -eq 0 ]]; then
	echo " Init nacos config finished, please start seata-server. "
else
	echo " init nacos config fail. "
fi

2.6 执行推送脚本,后面是nacos的ip地址,如果端口不是8848还需要加一个-p 8884你的端口

bash nacos-config.sh -h 127.0.0.1

2.7 创建容器,注意SEATA_IP如果是阿里云服务器需要写外网ip

docker run -d --restart always --name seata-server -p 8091:8091 -e SEATA_IP=172.0.0.1 -e SEATA_CONFIG_NAME=file:/data/seata/registry -v /data/seata:/data/seata  seataio/seata-server:1.3.0

三 . 客户端(也就是微服务,项目中使用seata)

3.1 pom.xml 引入依赖

<!-- seata分布式事务-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>io.seata</groupId>
                    <artifactId>seata-spring-boot-starter</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>io.seata</groupId>
            <artifactId>seata-spring-boot-starter</artifactId>
            <version>1.3.0</version>
        </dependency>

注意这里一定要剔除原来自带的 io.seata包,并且服务端和客户端的包版本要一致。

3.2 配置项目配置文件

#seata
seata.application-id=${spring.application.name}
seata.tx-service-group=btb_tx_group
seata.config.type=nacos
seata.config.nacos.server-addr=172.0.0.1:8848
seata.config.nacos.group=SEATA_GROUP
seata.registry.type=nacos
seata.registry.nacos.application=seata-server
seata.registry.nacos.server-addr=172.0.0.1:8848
seata.registry.nacos.group=SEATA_GROUP

注意:这里的btb_tx_group要跟服务端的vgroupMapping后面的key保持一致,

如:service.vgroupMapping.btb_tx_group=default

3.3 加入注解使用

@GlobalTransactional

扩展: 我用的是一个数据库,执行报错,说我缺少主键,于是我在表undo_log加了一个增的主键id,上面的创建undo_log表的sql是我加了id的,官方给的是没有id的。请知晓!!!!

问题:单数源是有报错的,原因是因为我是一个数据库,需要设置代理配置如下 ,根据自己实际情况是指配置文件,不然会报错

#单数据源
seata.enable-auto-data-source-proxy=true
#多数据源
seata.enable-auto-data-source-proxy=false

到此这篇关于Docker+nacos+seata1.3.0安装与使用的文章就介绍到这了,更多相关Docker+nacos+seata安装使用内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • docker 安装nacos并配置数据库的教程详解

    环境准备 docker 环境 MySQL 5.7 (官方镜像不支持mysql8) nacos docker安装MySQL 创建自定义网络(用于容器通讯) docker network create common-network 查看网络 docker network ls 创建挂载文件夹 //mysql配置文件 mkdir -p /data/mysql/conf //mysql数据文件路径 mkdir –p /data/mysql/data //日志文件路径 mkdir -p /data/mys

  • docker搭建nacos1.3.0的实现

    1.简历nacos的数据库 数据库名称 nacos_config 用户名密码nacos nacos 数据库脚本: /******************************************/ /* 数据库全名 = nacos_config */ /* 表名称 = config_info */ /******************************************/ CREATE TABLE `config_info` ( `id` bigint(20) NOT NUL

  • Nacos docker单机模式部署实现过程详解

    Nacos 的部署,我使用的时docker 部署(单机模式 Mysql),官网文档:https://nacos.io/zh-cn/docs/quick-start-docker.html 拉取代码: git clone https://github.com/nacos-group/nacos-docker.git 进去目录 cd nacos-docker 启动镜像, docker-compnse 安装可以参考: https://www.jb51.net/article/196840.htm do

  • 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

  • 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

  • Docker+nacos+seata1.3.0安装与使用配置教程

    在此之前我搞了一天,虽然seata好用,用起来也超级简单,但是安装配置是真的麻烦,遇见了各种坑,下面来进入正题.o(╥﹏╥)o 一 . 版本 注意:如果版本不匹配也会有各种报错,可以根据官网匹配版本. seata:1.3.0 alibaba.cloud:2.2.3.RELEASE nacos:2.0.2 二. docker安装搭建seata服务端 2.1 下载seata镜像 docker pull seataio/seata-server:1.3.0 2.2 在Linux目录下创建registr

  • Windows10下Tensorflow2.0 安装及环境配置教程(图文)

    下载安装Anaconda 下载地址如下,根据所需版本下载 安装过程暂略(下次在安装时添加) 下载安装Pycharm 下载安装Pycharm,下载对应使用版本即可 如果你是在校学生,有学校的edu邮箱,可以免费注册Pycharm专业版,注册地址如下,本文不详细说明 下载CUDA10.0 下载地址如下CUDA Toolkit 10.0 Archive 下载之后默认安装即可 下载CUDNN 通过此处选择版本对应的CUDNN,对于本次配置就选择Windows 10对应的版本 下载CUDNN需要注册一个N

  • seata-1.4.0安装及在springcloud中使用详解

    seata-1.4.0安装及使用 1.简介 Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务.Seata 将为用户提供了 AT.TCC.SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案. 详见官方文档:https://seata.io/zh-cn/docs/overview/what-is-seata.html 网上的多是0.9.0版本的安装方式,这里记录安装seata-1.4.0版本的方式,在win10环境下安装,centos7与此相同. 下

  • macOS 下的 MySQL 8.0.17 安装与简易配置教程图解

    如果我写的这篇你看不懂,可能网上也没有你能看懂的教程了 虽然这篇针对的是8.0.x版本,但是关于MySQL配置之类的方法还是通用的 环境信息与适用范围# 环境信息 环境/软件 版本 macOS macOS Mojave MySQL MySQL 8.0.17 适用范围 环境/软件 版本 macOS macOS大概都行吧 MySQL 8.0.x 第零步,清除之前的MySQL# ( 除非你想装多个版本 ) 打开终端,输入以下

  • MongoDB4.0在windows10下的安装与服务配置教程详解

    本地安装及网页测试 1.在官网下载最新的安装文件 下载地址 : https://www.mongodb.com/download-center#community 可以在MongoDB官网选择Community Server版本下载,但是它似乎经常没有响应.可以在这里直接选择需要的版本下载,要在Windows下安装可以直接选msi安装文件. 安装msi文件 下载好后,一致next,在中间一步选择 custom 选项,以选定自己喜好的安装位置 修改安装路径. 这个MSI文件有问题,这里必须不能改动

  • 无桌面的linux安装VMWare Tools配置教程

    本文为大家分享了linux安装VMWare Tools配置教程,供大家参考,具体内容如下 1.在vmware虚拟机选项下,选择安装vmware-tools 2.将vmware安装目录下的linux.iso装载到系统中 2.1.选择需安装VMWareTools的虚拟机,右击--可移动设备--CD/DVD--设置 2.2.选择CD/DVD(SATA)--使用ISO映像文件--选文件--打钩设备状态下的"已连接"--确定 3.在系统中输入如下命令挂载:mount /dev/cdrom /mn

  • Windows下MongoDB的下载安装、环境配置教程图解

    下载MongoDB 1.进入MongoDB官网,Products -> 选择SOFTWARE下的MongoDB Server 2.选择下载最新版 3.选择对应的版本下载 msi安装包形式安装MongoDB 1.选择complete,完整安装(安装全部组件).complete,完整的.完全的. 当然也可以选自定义安装,影响不大. 2. data目录是数据存储目录,数据库中的数据就存储在这个目录中.log是日志文件的输出目录. 需要在该盘的根目录下新建一个data文件夹(必须要是MongoDB安装盘

  • MySql 5.6.14 Win32位免安装解压缩版配置教程

    mysql-5.6.14-win32为免安装解压缩版,安装版(http://dev.mysql.com/downloads/installer/5.5.html#downloads)存在很多弊端. mysql 5.6.14 win7 32位免安装版配置方法如下所示: 1.下载mysql 5.6.14:下载地址:http://cdn.mysql.com/Downloads/MySQL-5.6/mysql-5.6.14-win32.zip 2.解压到自定义目录,我的是D:\ProgramFiles\

  • 关于Win10下MySQL5.7.17免安装版基本配置教程(图文详解)

    数据库应用是一个应用系统不可或缺的部分,关系型数据库应用大同小异,这里选择MySQL作为数据库平台. 1. mysql下载 MySQL的社区版本免费,适合于开发者使用.下载MySQL社区版本MySQL Community Server.下载网址 https://dev.mysql.com/downloads/.可从网址上看到MySQL的最新版本更新信息. 推荐下载方式:在页面左侧点击Other Download,在跳转界面https://dev.mysql.com/downloads/other

  • python3.6环境安装+pip环境配置教程图文详解

    1.python安装可以跨平台 2.有两个版本2.7和3.6,第三方库适用2.7版,两个版本不兼容 windows安装: 第一种方法官网安装: 在官网下载安装包如图: 图下点击是默认下载32位所以我们需要历史版本下载 如图点击: 下载途中标记的: 按照图中箭头执行: 这里选中存放的路径和把配置环境变量选项勾上,如图: 安装完成 测试结果 如果出现图下的就是环境变量没有配置好: 配置环境变量: 把图中2个路径配置到环境变量中 再次输入python 如图: python就安装好了; 第二种安装方法,

随机推荐