12.4、Seata Server部署
Seata Server 部署
Seata Server(TC)是 Seata 的核心组件。本节将学习如何部署 Seata Server。
本节将学习:TC(事务协调者)部署、存储模式选择(File、DB)、配置说明,以及高可用部署。
在本地搭建 Seata Server
方式1:使用 Docker Compose(推荐)
文件路径: mall-microservices/docker/seata/docker-compose.yml
version: '3.8' services: seata-server: image: seataio/seata-server:latest container_name: seata-server ports: - "8091:8091" - "7091:7091" environment: - SEATA_PORT=8091 - STORE_MODE=file volumes: - ./conf:/root/seata/conf - ./logs:/root/seata/logs networks: - mall-network depends_on: - mysql mysql: image: mysql:8.0 container_name: seata-mysql environment: - MYSQL_ROOT_PASSWORD=root - MYSQL_DATABASE=seata ports: - "3308:3306" volumes: - mysql-data:/var/lib/mysql - ./init-seata-mysql.sql:/docker-entrypoint-initdb.d/init.sql networks: - mall-network volumes: mysql-data: networks: mall-network: driver: bridge
启动 Seata Server:
cd mall-microservices/docker/seata docker-compose up -d # 查看日志 docker-compose logs -f seata-server
方式2:使用 Nacos 注册中心(推荐用于开发环境)
文件路径: mall-microservices/docker/seata/docker-compose-nacos.yml
version: '3.8' services: seata-server: image: seataio/seata-server:latest container_name: seata-server ports: - "8091:8091" - "7091:7091" environment: - SEATA_PORT=8091 - STORE_MODE=file - SEATA_CONFIG_NAME=file:/root/seata-config/registry volumes: - ./conf/registry.conf:/root/seata-config/registry.conf - ./logs:/root/seata/logs networks: - mall-network depends_on: - nacos nacos: image: nacos/nacos-server:v2.3.0 container_name: nacos-server environment: - MODE=standalone ports: - "8848:8848" networks: - mall-network networks: mall-network: driver: bridge
Seata 注册中心配置:
文件路径: mall-microservices/docker/seata/conf/registry.conf
registry { type = "nacos" nacos { application = "seata-server" serverAddr = "nacos:8848" group = "SEATA_GROUP" namespace = "" cluster = "default" username = "nacos" password = "nacos" } } config { type = "nacos" nacos { serverAddr = "nacos:8848" namespace = "" group = "SEATA_GROUP" username = "nacos" password = "nacos" dataId = "seataServer.properties" } }
TC(事务协调者)部署
部署步骤
TC 部署步骤:
-
使用 Docker Compose 启动(推荐):
cd mall-microservices/docker/seata docker-compose -f docker-compose-nacos.yml up -d -
验证 Seata Server 启动:
# 查看容器状态 docker ps | grep seata # 查看日志 docker logs seata-server -
验证注册到 Nacos:
- 访问 Nacos 控制台:http://localhost:8848/nacos
- 查看服务列表,应该能看到
seata-server
存储模式选择(File、DB)
File 模式(开发环境推荐)
File 模式特点:
- 单机模式
- 文件存储
- 简单易用
- 适合开发环境
Docker 环境变量配置:
environment: - STORE_MODE=file
DB 模式(生产环境推荐)
DB 模式特点:
- 集群模式
- 数据库存储
- 高可用
- 适合生产环境
Seata 数据库初始化:
文件路径: mall-microservices/docker/seata/init-seata-mysql.sql
CREATE DATABASE IF NOT EXISTS seata DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; USE seata; -- 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=utf8mb4; -- Seata 分支事务表 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; -- Seata 锁表 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), `gmt_create` DATETIME, `gmt_modified` DATETIME, PRIMARY KEY (`row_key`), KEY `idx_branch_id` (`branch_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
DB 模式配置:
文件路径: mall-microservices/docker/seata/conf/application.yml(挂载到容器)
store: mode: db db: datasource: druid dbType: mysql driverClassName: com.mysql.cj.jdbc.Driver url: jdbc:mysql://mysql:3306/seata?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai user: root password: root minConn: 5 maxConn: 100 globalTable: global_table branchTable: branch_table lockTable: lock_table queryLimit: 100 maxWait: 5000
配置说明
主要配置
主要配置项:
- 存储模式
- 数据库配置
- 服务端口
- 注册中心配置
高可用部署
集群部署
高可用部署:
- 多节点部署
- 数据库存储
- 负载均衡
官方资源
-
部署模式选择:官方文档详细说明了 Seata Server 的两种部署模式:File 模式和 DB 模式。File 模式适合单机开发环境,使用文件存储;DB 模式适合生产环境,使用数据库存储,支持集群部署和高可用。
-
存储模式配置:官方文档详细说明了如何配置不同的存储模式,包括 MySQL、PostgreSQL、Oracle 等数据库的配置方法。文档强调,生产环境必须使用 DB 模式,并配置数据库连接池参数以优化性能。
-
高可用部署:官方文档提供了 Seata Server 的高可用部署方案,包括如何配置注册中心、如何配置配置中心、如何实现负载均衡等。文档特别强调了集群部署的注意事项和最佳实践。
参考资源:
- Seata Server 部署:https://seata.io/docs/ops/deploy-guide-beginner/
本节小结
在本节中,我们学习了:
第一个是 TC 部署。 如何部署事务协调者。
第二个是存储模式选择。 File 模式和 DB 模式。
第三个是配置说明。 主要配置项说明。
第四个是高可用部署。 集群部署方案。
这就是 Seata Server 部署。完成部署后,我们就可以使用 Seata 了。
在下一节,我们将学习 AT 模式原理。