安装
3.部署集群TC Server
以
seata1.4.2
为例,linux
系统安装
3.1下载Seata软件包
打开Seata 下载页面,选择想要的 Seata 版本。我们选择 v1.4.2 最新版本。
#下载
wget https://github.com/seata/seata/releases/download/v1.4.2/seata-server-1.4.2.tar.gz
#解压
tar -zxvf seata-server-1.4.2.tar.gz
#查看目录下文件
ll
drwxr-xr-x. 3 root root 90 2月 17 10:08 bin #执行脚本
drwxr-xr-x. 4 502 games 156 2月 16 13:52 conf #配置文件
drwxr-xr-x. 3 502 games 8192 2月 16 13:52 lib #seata-*.jar + 依赖库
-rw-r--r--. 1 502 games 11365 5月 13 2019 LICENSE
drwxr-xr-x. 2 502 games 26 2月 16 17:15 logs
3.2 初始化数据库
① 使用 mysql.sql脚本,初始化 Seata TC Server 的 db 数据库。脚本内容如下:
-- -------------------------------- The script used when storeMode is 'db' --------------------------------
-- the table to store GlobalSession data
CREATE DATABASE seata;
use seata;
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;
在 MySQL 中,创建 seata 数据库,并在该库下执行该脚本。最终结果如下图:
② 修改 conf/file
配置文件,修改使用 db
数据库,实现 Seata TC Server
的全局事务会话信息的共享。如下图所示:
③ MySQL8 的支持
如果使用的 MySQL 是 8.X 版本,则需要看该步骤。否则,可以直接跳过。
首先,需要下载 MySQL 8.X JDBC 驱动,命令行操作如下:
cd lib
wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.19/mysql-connector-java-8.0.19.jar
然后,修改 conf/file
配置文件,使用该 MySQL 8.X JDBC 驱动。如下图所示:
3.3 设置使用 Nacos 注册中心
修改 conf/registry.conf
配置文件,设置使用 Nacos 注册中心。如下图所示:
3.4 启动 TC Server
① 执行 nohup sh bin/seata-server.sh -h 10.0.0.50 -p 18091 -n 1 &
命令,启动第一个 TC Server
在后台。
- -h: 监听的ip,设置主要原因使用docker nacos 采用默认网卡,只是外网访问不到
- -p:Seata TC Server 监听的端口。
- -n:Server node。在多个 TC Server 时,需区分各自节点,用于生成不同区间的 transactionId 事务编号,以免冲突。
在 nohup.out 文件中,我们看到如下日志,说明启动成功:
# 使用 DB 存储器
2020-04-05 16:54:12.793 INFO [main]io.seata.common.loader.EnhancedServiceLoader.loadFile:247 -load DataSourceGenerator[dbcp] extension by class[io.seata.server.store.db.DbcpDataSourceGenerator]
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
2020-04-05 16:54:13.442 INFO [main]io.seata.common.loader.EnhancedServiceLoader.loadFile:247 -load LogStore[DB] extension by class[io.seata.core.store.db.LogStoreDataBaseDAO]
2020-04-05 16:54:13.442 INFO [main]io.seata.common.loader.EnhancedServiceLoader.loadFile:247 -load TransactionStoreManager[DB] extension by class[io.seata.server.store.db.DatabaseTransactionStoreManager]
2020-04-05 16:54:13.442 INFO [main]io.seata.common.loader.EnhancedServiceLoader.loadFile:247 -load SessionManager[DB] extension by class[io.seata.server.session.db.DataBaseSessionManager]
# 启动成功
2020-04-05 16:54:13.779 INFO [main]io.seata.core.rpc.netty.RpcServerBootstrap.start:155 -Server started ...
# 使用 Nacos 注册中心
2020-04-05 16:54:13.788 INFO [main]io.seata.common.loader.EnhancedServiceLoader.loadFile:247 -load RegistryProvider[Nacos] extension by class[io.seata.discovery.registry.nacos.NacosRegistryProvider]
② 执行 nohup sh bin/seata-server.sh -p 28091 -n 2 &
命令,启动第二个 TC Server
在后台。
③ 打开 Nacos 注册中心的控制台,我们可以看到有两个 Seata TC Server 示例。如下图所示: