Seata Server环境搭建
Seata分TC、TM和RM三个角色,TC(Server端)为单独服务端部署,TM和RM(Client端)由业务系统集成,我们只需要加入SpringCloudalibaba的一个依赖就会自动帮我们集成。
大致的步骤如下:
-
步骤一:下载包
下载地址,具体下载什么版本的Seata还需要参考SpringCloud alibaba各个组件版本对应的表格
-
步骤二:建数据表
全局事务会话信息由3块内容构成,全局事务–>分支事务–>全局锁,对应表global_table、branch_table、lock_table
-
步骤三:修改store.mode文件
启动包: seata–>conf–>application.yml,修改store.mode=“db或者redis”
源码: 根目录–>seata-server–>resources–>application.yml,修改store.mode=“db或者redis”1.5.0以下版本:
启动包: seata–>conf–>file.conf,修改store.mode=“db或者redis”
源码: 根目录–>seata-server–>resources–>file.conf,修改store.mode=“db或者redis” -
步骤四:修改数据库连接或者redis属性配置
启动包: seata–>conf–>application.example.yml中附带额外配置,将其db|redis相关配置复制至application.yml,进行修改store.db或store.redis相关属性。
源码: 根目录–>seata-server–>resources–>application.example.yml中附带额外配置,将其db|redis相关配置复制至application.yml,进行修改store.db或store.redis相关属性。1.5.0以下版本:
启动包: seata–>conf–>file.conf,修改store.db或store.redis相关属性。
源码: 根目录–>seata-server–>resources–>file.conf,修改store.db或store.redis相关属性。 -
步骤五:启动
- 源码启动: 执行ServerApplication.java的main方法
- 命令启动: seata-server.sh -h 127.0.0.1 -p 8091 -m db
1.5.0以下版本
- 源码启动: 执行Server.java的main方法
- 命令启动: seata-server.sh -h 127.0.0.1 -p 8091 -m db -n 1 -e test
-h: 注册到注册中心的ip -p: Server rpc 监听端口 -m: 全局事务会话信息存储模式,file、db、redis,优先读取启动参数 (Seata-Server 1.3及以上版本支持redis) -n: Server node,多个Server时,需区分各自节点,用于生成不同区间的transactionId,以免冲突 -e: 多环境配置参考 http://seata.io/en-us/docs/ops/multi-configuration-isolation.html
首先我们修改DB数据源
Seata Server它作为一个事务协调者TC,那它肯定需要存储很多关于全局事务的会话信息
全局事务会话信息由3块内容构成,全局事务–>分支事务–>全局锁,对应表global_table、branch_table、lock_table
Server端存储模式支持三种:
- file:单机模式,全局事务会话信息内存中读写并持久化本地文件root.data,读写性能较高,也是默认的方式
- db:高可用集群模式,全局事务会话信息通过DB共享,性能相对较差
- redis:Seata-server1.3开始支持,性能较高,存在事务信息丢失风险,请提前配置适合当前场景的redis持久化配置
第一步、这里使用DB的存储模式,需要修改conf/file.conf文件,主要就是修改mode = "db"
以及数据库的连接信息
store {
# 这里需要将默认的file修改为db,还有下方的数据库连接信息
mode = "db"
db {
datasource = "druid"
dbType = "mysql"
driverClassName = "com.mysql.jdbc.Driver"
url = "jdbc:mysql://127.0.0.1:3306/seata_server"
user = "XXXX"
password = "XXXX"
minConn = 5
maxConn = 30
globalTable = "global_table"
branchTable = "branch_table"
lockTable = "lock_table"
queryLimit = 100
maxWait = 5000
}
}
需要注意,这里数据库需要用5.7+的版本。
第二步、按照上面文件所写的,创建一个seata_server
的数据库
第三步、导入建表语句,官网sql链接,我们可以将这个下载下来然后放在seata目录下,sql位置: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_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