Linux部署Seata详细过程记录

这篇具有很好参考价值的文章主要介绍了Linux部署Seata详细过程记录。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Seata服务搭建

Seata官方文档地址
Seata安装包下载地址
依赖版本说明地址

SpringCloudAlibaba版本对应组件版本说明,详细参考官网文档。
Linux部署Seata详细过程记录

当前使用Spring-cloud-alibaba对应的seata版本为v1.3.0,所以需要下载v1.3.0版本安装包

  1. 将安装包上传到服务器上,个人默认存储地址

/usr/local/lib/java

  1. 解压安装包,移动安装包至/usr/local目录下

tar -zxvf seata-server-1.3.0.tar.gz

mv seata /usr/local/seata

Seata的三大角色

在Seata的架构中,一共有三个角色:

  • TC - 事务协调者

维护全局和分支事务的状态,驱动全局事务提交和回滚

  • TM - 事务管理器

定义全局事务的范围:开始全局事务、提交或回滚全局事务

  • RM - 资源管理器

管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。

其中,TC为单独部署的server服务器,TM和RM为嵌入到应用中的Client客户端

在Seata中,一个分布式事务的生命周期如下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uQo35f82-1665807994566)(https://note.youdao.com/yws/api/personal/file/D697E953ACEC40CB8622B61907673B21?method=download&shareKey=bf89b6bb0ec172008c89ed2c9a80a688)]

  1. TM请求TC开启一个全局事务。TC会生成一个XID作为该全局事务的编号。XID会在微服务的调用链路中传播,保证多个微服务的子事务关联在一起。
  2. RM请求TC将本地事务注册为全局事务的分支事务,通过全局事务的XID进行关联。
  3. TM请求TC告诉XID对应的全局事务是进行提交还是回滚。

Server端存储模式(store.mode)支持三种

  • file:(默认)单机模式,全局事务会话信息内存中读写并持久化本地文件root.data,性能较高
  • db:(数据库版本需使用5.7+版本)高可用模式,全局事务会话信息通过db共享,相对性能差些。
  • redis:Seata-Server1.3及以上版本支持,性能较高,存在事务信息丢失风险,请提前配置适合当前场景的redis持久化配置

采用使用db模式

  1. 修改配置文件模式选择,默认为file
cd /seata/conf
vi file.conf
将mode="file" 修改为mode="db"

修改配置文件中db对应的连接池信息

# 注意这里需要新建一个seata的数据库
driverClassName = "com.mysql.cj.jdbc.Driver"
url = "jdbc:mysql://ip:3306/seata"
user = "xx"
password = "xx"
  1. 初始化seata表结构sql脚本
  • 官方文档sql脚本地址

选择对应的数据库脚本文件,这里使用mysql


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_and_branch_id` (`xid` , `branch_id`)
) 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. db存储模式+Nacos(注册&配置中心)部署 (高可用集群部署方式

配置Nacos注册中心,负责事务参与者(微服务)和TC通讯。将Seata Server注册到Nacos,修改conf目录下的registry.conf配置

cd /seata/conf
vi registry.conf

# 修改注册方式
type="file" 修改为 type="nacos"

# 修改注册中心nacos配置(registry)
nacos {
    application = "seata-server"
    
    # nacos服务地址
    serverAddr = "xx:xx:xx:xx:port"
    # 可以设置负载均衡策略,默认轮询
    # loadBalance = "RandomLoadBalance"
    # loadBalanceVirtualNodes = 10
    group = "SEATA_GROUP"
    namespace = ""
    cluster = "default"
    # 用户名密码
    username = "xxxx"
    password = "xxxx"
  }

# 修改配置中心方式
type="file" 修改为 type="nacos"

# 修改配置中心nacos配置
nacos {
    # nacos服务地址
    serverAddr = "xx:xx:xx:xx:port"
    namespace = ""
    group = "SEATA_GROUP"
    username = "xxxx"
    password = "xxxx"
  }

  1. 下载源码包,复制源码下的script文件夹放到现有seata安装环境下。
  • 将源码安装包下载并上传至服务器
  • 解压并移动到对应文件夹下
tar -zxvf seata-1.3.0.tar.gz
mv seata-1.3.0 /usr/local/seata-1.3.0
  • 复制script文件夹放到现有seata安装目录下
cp -r /usr/local/seata-1.3.0/script/ /usr/local/seata/
  1. 修改script文件夹下默认配置
cd /usr/local/seata/script/config-center
vi config.txt

# 修改模式为db,修改数据库链接配置

store.mode=db
store.db.datasource=druid
store.db.dbType=mysql
store.db.driverClassName=com.mysql.cj.jdbc.Driver
store.db.url=jdbc:mysql://ip:3306/seata?useUnicode=true
store.db.user=xx
store.db.password=xx

  1. 配置事务分组,要与客户端配置的事务分组保持一致(不设置分组,可以直接跳过)

service.vgroupMapping.my_test_tx_group=default

my_test_tx_group需要与客户保持一致,default需要跟客户端和registry.conf中registry中的cluster保持一致

(客户端properties配置:spring.cloud.alibaba.seata.tx-service-group=my_test_tx_group)

事务分组:解决异地机房、机房断电等容错问题

my_test_tx_group可以i自定义,比如(beijing、shanghai),对应的client也要去设置

seata.service.vgroup-mapping.projectA=beijing
  1. 配置参数同步nacos

shell:

sh ${SEATAPATH}/script/config-center/nacos/nacos-config.sh -h 47.92.158.60 -p 8854 -g SEATA_GROUP -t xxxxxxxxx -u nacos -w nacos

参数说明:

-h:host,默认值localhost

-p:port,默认8848

-g:配置分组,默认值为‘SEATA_GROUP’

-t:租户信息,对应Nacos的命名空间ID字段,默认值为空‘’

-u:用户名

-w:密码

手动修改sh脚本文件配置:

cd /usr/local/seata/script/config-center/nacos
vi nacos-config.sh

# 修改配置
if [[ -z ${host} ]]; then
    host=xx.xx.xx.xx
fi
if [[ -z ${port} ]]; then
    port=xxxx
fi
if [[ -z ${group} ]]; then
    group="SEATA_GROUP"
fi
if [[ -z ${tenant} ]]; then
    tenant=""
fi
if [[ -z ${username} ]]; then
    username="nacos"
fi
if [[ -z ${password} ]]; then
    password="xxxx"
fi

  1. 运行脚本,同步配置至nacos
# 如果sh脚本没有执行权限,先增加权限
chmod +x nacos-config.sh

# 两种方式运行
1、配置文件已修改
./nacos-config.sh
2、 配置文件无修改
sh ${SEATAPATH}/script/config-center/nacos/nacos-config.sh -h 47.92.158.60 -p 8854 -g SEATA_GROUP -t xxxxxxxxx -u nacos -w nacos
  1. 刷新nacos,配置已经同步成功了。

启动Seata

cd /usr/local/seata/bin
./seata-server.sh

启动参数:
文章来源地址https://www.toymoban.com/news/detail-437860.html

参数 全写 作用 备注
-h –host 指定在注册中心注册的IP 不指定时获取当前的IP,外部访问部署在云环境和容器中的server建议指定
-p –port 指定server启动的端口 默认为8091
-m –storeMode 事务日志存储方式 支持file,db,redis,默认为file,注:redis需seata-server1.3版本以上
-n –serverNode 用于指定seata-server节点ID 如1,2,3…默认为1
-3 –seataEnv 指定seata-server运行环境 如dev,test等,服务启动时会使用registry-dev.conf这样的配置
# 举例:指定端口启动
./seata-server.sh -p 8091

# 如果部署集群,指定端口和节点启动
./seata-server.sh -p 8091 -n 1
./seata-server.sh -p 8092 -n 2
./seata-server.sh -p 8093 -n 3

启动成功并注册到nacos

到了这里,关于Linux部署Seata详细过程记录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 手把手教会搭建网站详细全过程(从域名到网站部署)

    过年在家,闲的没有什么事做,刚好在之前通过腾讯的学生认证购买了部署了一个轻量应用服务器,可以用来建站。想到可以用自己域名建一个专属网站,做一回站长就好激动 刚刚提到了腾讯的学生认证购的轻量应用服务器,这个挺实惠的,这里推销一波😁。 腾讯轻量应用

    2023年04月08日
    浏览(44)
  • 【SVN】SVN搭建ubuntu服务器过程(图文超详细)

    目录 步骤0:搭建环境: 步骤一:下载subversion安装包 步骤二:创建版本库目录 步骤三:创建版本库 步骤四:修改SVN配置 步骤五:重启SVN服务 在ubuntu系统搭建svn服务器,windows系统作为客户端用svn客户端上传文件。 本文只讲ubuntu下svn服务器的搭建,windows用svn客户端上传下载

    2024年02月07日
    浏览(55)
  • 蓝易云:Ubuntu使用nginx搭建webdav文件服务器的详细过程

    在 Ubuntu 上使用 Nginx 搭建 WebDAV 文件服务器的详细过程如下: 安装 Nginx: 创建 WebDAV 目录: 配置 Nginx: 打开 Nginx 配置文件: 在  server  块内添加以下配置: 保存并关闭文件。 创建用户认证文件: 替换  your_username  为你想要设置的用户名。根据提示输入密码并确认。 检查

    2024年02月20日
    浏览(48)
  • Linux环境下部署项目到服务器完整过程

    1,首先,选择一款云上服务器(这里用的是腾讯云),右侧搜索栏输入云服务器或轻量服务器(这里用的轻量服务器),立即选购 2,选择自己要的服务器配置,系统镜像选择Centos即可 3,实例创建成功后,点击控制台搜索请量服务器找到新创建的实例重置密码 4,点击防火墙

    2024年02月02日
    浏览(44)
  • 微服务高级篇【2】之Seata部署

    修改conf目录下的registry.conf文件: 注意:nacos中需要创建命名空间,id为 上图中的 seata-namespace-id , 名称 为 seata ,但是由于我们配置文件中的 seata-namespace-id 为空,所以不用进行这一步 nacos配置列表中新增配置,Data id 对应配置文件中的 seataServer.properties ,Group为 DEFAULT_GROUP

    2023年04月09日
    浏览(30)
  • 研一小白记录第一次在实验室服务器上跑深度学习的代码全过程(实验室服务器上跑代码详细全过程哦)

    你在服务器上跑过代码吗?哇~你跑过!是啥样的...每回见别人跑都会问并且羡慕会在大服务器上跑代码的哈哈哈在研究生刚开学前还甚至不知道什么是服务器,更是无法想象在除了自己能看得见摸得着的电脑屏幕之外跑代码的样子。直到有天开会自己坐在了一个大大的“黑箱

    2024年02月02日
    浏览(53)
  • Ubuntu系统下搭建QtCreator开发环境详细过程(Qt简介;Linux下安装QtCreator)

    关于Qt的相关介绍,可以参考QT从入门到实战x篇,Qt 5.9 C++开发指南,对于重复部分,本栏目不做详细介绍。关于Linux的基础,本人将重新整理一个栏目,就叫 Linux基础 吧,有需要的可以后期关注下。 Qt 是一个跨平台的 C++开发库。主要用来开发图形用户界面 (Graphical User Inter

    2024年02月12日
    浏览(56)
  • SpringCloud Alibaba - Seata 部署 TC 服务,并集成微服务

    目录 一、Seata 架构 1.1、Seata 架构重要角色 1.2、部署 TC 服务 1.2.1、前言 1.2.2、下载 seata-server 包,解压 1.2.3、修改配置 1.2.4、在 nacos 中添加配置 1.2.5、创建数据库表 1.2.6、启动 TC 服务 1.3、微服务集成 Seata 1.3.1、引入依赖 1.3.2、修改配置文件(添加 Seata) Seata 事务管理中,

    2024年02月07日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包