接上一篇:Seata 单机环境搭建_01
文章目录
- 一、整体架构
- 二、安装步骤
- 2.1. 创建数据库
- 2.2. 初始化表结构
- 2.3. 修改配置文件
- 2.4. 调整数据库驱动
- 2.5. 修改配置中心
- 三、 启动和验证
- 3.1. 启动nacos
- 3.2. 启动TC Server
- 3.3. 验证高可用
一、整体架构
我们来学习部署集群 Seata TC Server,实现高可用,生产环境下必备。在集群时,多个 Seata TC Server 通过 db 数据库,实现全局事务会话信息的共享。
同时,每个 Seata TC Server 可以注册自己到注册中心上,方便应用从注册中心获得到他们。最终我们部署 集群 TC Server 如下图所示:
Seata TC Server 对主流的注册中心都提供了集成,包括zk,sofa,redis,eureka等主流的中间件。考虑到本课程的内容,我们这边使用 Nacos 作为注册中心给大家进行讲解。
二、安装步骤
2.1. 创建数据库
创建名称为seata
的数据库
2.2. 初始化表结构
之前我们搭建的seata是基于文件系统的,这次我们搭建高可用集群,需要使用db模式运行seata,就避免不了需要用到一些基本的数据库表。先执行下面的sql语句创建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 = InnoDBDEFAULT 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 = InnoDBDEFAULT 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 = InnoDBDEFAULT CHARSET = utf8;
2.3. 修改配置文件
进入seata的安装目录conf文件夹,修改文件file.conf
[root@localhost app]# cd /app/seata/conf/
[[root@localhost conf]# vim file.conf
调整驱动类,url、用户名。密码为自己的
driverClassName = "com.mysql.cj.jdbc.Driver"url = "jdbc:mysql://127.0.0.1:3306/seata"user = "root"password = "123456"
2.4. 调整数据库驱动
本机安装的是mysql 8.X, 需要下载8.0的connect-java驱动,其他版本的请自行下载。8.X版本的java-mysql的驱动包下载 先进入到lib文件夹,执行wget下载命令
[root@localhost ~]# cd /app/seata/lib/
[root@localhost lib]# wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.19/mysql-connector-java-8.0.20.jar
如果网速慢,也可以直接去本地仓库中复制,然后上传到/lib目录下面即可
再次修改配置文件file.conf 将mysql的driverClassName修改为mysql8.0的驱动类
2.5. 修改配置中心
修改 conf/registry.conf 配置文件,设置使用 Nacos 注册中心。如下图所示
[root@node2 ~]# vim /app/seata/conf/registry.conf
将file调整为nacos,nacos信息调整为自己的nacos信息
命名空间获取方式
三、 启动和验证
3.1. 启动nacos
3.2. 启动TC Server
执行 nohup sh bin/seata-server.sh -p 8091 -n 1
& 命令,启动第一个 TC Server 在后台。
[root@localhost conf]# cd /app/seata
[root@localhost seata]# nohup sh bin/seata-server.sh -p 8091 -n 1 &
[root@localhost seata]# tail -f nohup.out
-p:Seata TC Server 监听的端口。
-n:Server node。在多个 TC Server 时,需区分各自节点,用于生成不同区间的 transactionId 事务编号,以免冲突。
在 nohup.out 文件中,我们看到如下日志,说明启动成功:
之后我们启动另一个节点
执行 nohup sh bin/seata-server.sh -p 8092 -n 2 &
命令,启动第二个 TC Server 在后台
[root@localhost seata]# nohup sh bin/seata-server.sh -p 8092 -n 2 &
[root@localhost seata]# tail -f nohup.out
在 nohup.out 文件中,我们看到如下日志,说明启动成功:
3.3. 验证高可用
之后我们登录到nacos,可以查看到在服务列表中,seata已经成功注册到nacos
并且是两个高可用的节点
接下一篇:Seata 与 Nacos Config配置中心整合_03