标题:在Linux上安装部署Seata分布式事务解决方案
导语: Seata是一个开源的分布式事务解决方案,旨在解决分布式环境下的事务一致性问题。本文将为您介绍如何在Linux操作系统上安装和部署Seata,为您的分布式应用添加强大的事务支持。
什么是Seata?
Seata(Simple Extensible Autonomous Transaction Architecture)是一个灵活的、高性能的分布式事务解决方案,可用于支持微服务架构中的事务一致性。Seata提供了三种分布式事务模式:AT(自动化事务,类似于本地事务)、TCC(Try-Confirm-Cancel,适用于对业务逻辑较敏感的场景)和SAGA(适用于长事务和异步场景)。
步骤1:安装前准备
在开始安装Seata之前,确保您已经满足以下准备条件:
- 一台运行Linux的服务器
- Java JDK 8或更高版本
- MySQL或其他支持的数据库
- Maven构建工具
- Nacos服务
步骤2:下载和构建Seata
- 打开终端,使用以下命令下载Seata的二进制文件:
wget https://github.com/seata/seata/releases/download/v1.7.0/seata-server-1.7.0.zip
- 解压Seata文件
unzip seata-server-1.7.0.zip
步骤3:创建数据库
- 在MySQL中创建Seata数据库
CREATE DATABASE seata CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
- 初始化数据库,运行
seata/script/server/db/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);
步骤4:配置Seata
- 进入目录
cd seata/conf
- 修改配置文件
vim application.yml
- 把
application.yml
中的console、security
:复制出来后续需要使用
console:
user:
username: seata
password: seata
seata:
security:
secretKey: SeataSecretKey0c382ef121d778043159209298fd40bf3850a017
tokenValidityInMilliseconds: 1800000
ignore:
urls: /,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.jpeg,/**/*.ico,/api/v1/auth/login
- 将
application.yml
重命名为application-back.yml
作为备份
mv application.yml application-copy.yml
- 将
application.example.yml
复制一份为application.yml
用作主要配置文件
cp application.example.yml application.yml
- 把刚才复制的配置复制到现在的
application.yml
中
vim -r application.yml
- 修改Seata注册配置为Nacos(nacos的账号密码修改成自己的)
seata:
config:
# support: nacos 、 consul 、 apollo 、 zk 、 etcd3
type: nacos
nacos:
username: nacos
password: nacos
registry:
# support: nacos 、 eureka 、 redis 、 zk 、 consul 、 etcd3 、 sofa
type: nacos
nacos:
username: nacos
password: nacos
store:
# support: file 、 db 、 redis
mode: db
session:
mode: db
lock:
mode: db
db:
datasource: druid
db-type: mysql
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/seata?rewriteBatchedStatements=true&useSSL=false
user: mysql
password: mysql
# 把开始复制的配置追加到配置文件,注意缩进位置
security:
secretKey: SeataSecretKey0c382ef121d778043159209298fd40bf3850a017
tokenValidityInMilliseconds: 1800000
ignore:
urls: /,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.jpeg,/**/*.ico,/api/v1/auth/login
console:
user:
username: seata
password: seata
步骤5:启动Seata服务器
- 进入目录
cd seata/bin
- 在终端中运行以下命令以启动Seata服务:
sh seata-server.sh
- 查看日志输出,表示Seata已经成功启动:
tail -20f /www/apps/seata/logs/start.out
步骤6:访问Seata控制台
在浏览器中输入以下地址,默认账号密码:seata/seata,即可访问Seata控制台:
步骤7:关闭Seata
当您不再需要Seata服务时,可以在终端中使用以下命令关闭它:
sh shutdown.sh
结语:
通过本文,您了解了如何在Linux操作系统上安装和部署Seata分布式事务解决方案。Seata为分布式系统提供了强大的事务支持,帮助您解决分布式事务一致性问题,为您的微服务架构提供稳定和可靠的事务保障。希望本文能够帮助您顺利地完成Seata的安装和部署过程。