12.4Seata Server部署

分类: Seata分布式事务

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 部署步骤:

  1. 使用 Docker Compose 启动(推荐):

    cd mall-microservices/docker/seata docker-compose -f docker-compose-nacos.yml up -d
  2. 验证 Seata Server 启动

    # 查看容器状态 docker ps | grep seata # 查看日志 docker logs seata-server
  3. 验证注册到 Nacos

存储模式选择(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 部署指南

  1. 部署模式选择:官方文档详细说明了 Seata Server 的两种部署模式:File 模式和 DB 模式。File 模式适合单机开发环境,使用文件存储;DB 模式适合生产环境,使用数据库存储,支持集群部署和高可用。

  2. 存储模式配置:官方文档详细说明了如何配置不同的存储模式,包括 MySQL、PostgreSQL、Oracle 等数据库的配置方法。文档强调,生产环境必须使用 DB 模式,并配置数据库连接池参数以优化性能。

  3. 高可用部署:官方文档提供了 Seata Server 的高可用部署方案,包括如何配置注册中心、如何配置配置中心、如何实现负载均衡等。文档特别强调了集群部署的注意事项和最佳实践。

参考资源

本节小结

在本节中,我们学习了:

第一个是 TC 部署。 如何部署事务协调者。

第二个是存储模式选择。 File 模式和 DB 模式。

第三个是配置说明。 主要配置项说明。

第四个是高可用部署。 集群部署方案。

这就是 Seata Server 部署。完成部署后,我们就可以使用 Seata 了。

在下一节,我们将学习 AT 模式原理。