Docker Compse 部署 Seata
Docker Compse 部署 Seata

环境准备
本次部署是基于 Nacos 搭建 Seata 服务,因此在安装 Seata 之前,需要先准备好 Nacos 服务器。
拉取镜像
1
docker pull seataio/seata-server:1.3.0启动临时容器
1
docker run --name temp-seata-server -p 8091:8091 seataio/seata-server:1.3.0查看容器ID
1
docker ps -a找到刚才启动的容器,复制容器ID。
导出Seata配置文件
1
2
3
4# 创建配置文件保存目录
mkdir -p /home/seata-config
# 复制配置文件到目标目录
docker cp <容器ID>:/seata-server/resources/* /home/seata-config复制完成后,就可以删除掉临时容器了。
准备数据库
下载Seata源代码,地址:https://github.com/seata/seata/archive/refs/tags/v1.3.0.zip
找到源码目录的
script/server/db/mysql脚本文件,使用脚本创建数据库。创建表之前先创建一个seata-db的数据库。脚本文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56-- -------------------------------- 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;上面的脚本会创建出三个表,这三个表是Seata控制事务时必须的三张表。
修改配置
从Docker容器导出的配置文件很多,我们主要修改两个配置
file.conf和registry.conf。
file.conf:事务日志存储配置
1 | |
重点是 store.mode和store.db。
registry.conf:服务注册发现配置
1 | |
重点是registry.type、registry.nacos、config.type、config.nacos。
初始化配置中心
这一步的目的是将客户端与服务端共享的配置使用 Nacos 来管理。
修改配置
源码目录/script/config-center/config.txt
1 | |
重点关注的配置:
- service.vgroupMapping.<分组名称>=default:配置事务分组,重点是分组名称,Seta通过此名称进行事务编组。如果有多个组,则多复制几行,改一下组名即可。这个组名会在微服务配置中体现。default是集群名称,对应的是Seata Server 的
registry.conf配置文件中的registry.nacos.cluster配置的值。 - service.default.grouplist=
:<端口号>:Seata Server集群地址和端口列表。 - store.db.datasource:使用哪个连接池组件。
- store.db.dbType:使用哪种数据库
- store.db.driverClassName=com.mysql.cj.jdbc.Driver:数据库驱动
- store.db.url:数据库连接地址
- store.db.user:数据库账号
- store.db.password:数据库密码
- store.db.globalTable:全局表,对应前面创建的表名。
- store.db.branchTable:事务分支表,对应前面创建的表名。
- store.db.lockTable:事务锁表,对应前面创建的表名。
其他配置默认即可,如果有场景需要,也可以自行配置。配置方法可以参阅官方文档说明。
初始化配置到 Nacos
编写完配置之后,可以使用源码中的脚本将配置写入到 Nacos 中,这样 Seata 的服务端和客户端就可以共享配置了。
脚本位置:源码目录/script/config-center/nacos/nacos-config.sh
执行命令
1 | |
- -h:Nacos服务器地址。
- -p:Nacos服务器端口。
- -g:Nacos配置文件组名。
- -t:Nacos配置中心命名空间。
- -u:Nacos账号。
- -w:Nacos密码。
执行完命令,会在控制台看到一堆的写入日志。此时打开Nacos控制台,找到配置中心,刷新就可以看到刚才写入的配置了。
Seata服务的编排与部署
编排文件
1 | |
其中 环境变量 SEATA_IP和volumes要注意,按照自己的实际情况去填写。
编写完服务编排之后,就可以启动服务了。
1 | |
启动完成后,查看容器日志,没有报错信息即可。
1 | |