Seata Server配置

Seata Server 配置详解:从基础设置到生产环境部署

Seata Server 作为分布式事务的协调者(TC),其配置直接影响分布式事务的稳定性和性能。本文将详细解析 Seata Server 的核心配置文件(file.confregistry.conf),并介绍启动与部署的关键注意事项。

核心配置文件概述

Seata Server 的配置主要通过两个文件管理:

  • file.conf:配置事务存储模式、通信协议、线程池等核心参数;
  • registry.conf:配置服务注册与配置中心(如 Nacos、Eureka、Zookeeper 等)。

默认配置文件位于 Seata 安装目录的 conf 文件夹下。

file.conf 配置详解

file.conf 是 Seata Server 的核心配置文件,包含通信传输、服务配置、事务存储等关键设置。

1. 传输配置(transport

定义 Seata Server 与客户端(TM/RM)的通信方式:

transport {
  type = "TCP"  # 通信协议(TCP/UDT/unix-domain-socket)
  server = "NIO"  # 服务端 IO 模型(NIO/NATIVE)
  heartbeat = true  # 启用心跳检测(保持连接)
  enableClientBatchSendRequest = false  # 禁用客户端批量发送请求(默认关闭,高并发场景可开启)
  
  # 线程池配置
  threadFactory {
    bossThreadPrefix = "NettyBoss"  # Boss 线程名前缀
    workerThreadPrefix = "NettyServerNIOWorker"  # Worker 线程名前缀
    bossThreadSize = 1  # Boss 线程数(TCP 监听线程)
    workerThreadSize = "default"  # Worker 线程数(默认 CPU 核心数 * 2)
  }
  
  serialization = "seata"  # 序列化方式(seata/kryo/fastjson等)
  compressor = "none"  # 压缩方式(none/gzip等)
}

优化建议

  • 高并发场景下可开启 enableClientBatchSendRequest = true,减少网络交互;
  • 序列化方式推荐 kryo(性能优于默认的 seata)。

2. 服务配置(service

定义事务分组与 Seata Server 地址映射:

service {
  # 事务分组映射(客户端需与此处保持一致)
  vgroupMapping.my_test_tx_group = "default"  # 分组名 -> 集群名
  # 集群地址列表(仅当 registry.type=file 时生效)
  default.grouplist = "127.0.0.1:8091"  # Seata Server 地址(多个用逗号分隔)
  enableDegrade = false  # 禁用降级(不建议开启)
  disableGlobalTransaction = false  # 启用全局事务(默认开启)
}

关键说明

  • 事务分组(vgroupMapping):客户端通过事务分组关联到具体集群,格式为 vgroupMapping.分组名 = 集群名
  • grouplist:当注册中心为 file 时,直接指定 Seata Server 地址;若使用 Nacos 等注册中心,此配置无效。

3. 事务存储配置(store

定义全局事务会话的存储方式(filedb),生产环境推荐 db 模式

store {
  mode = "db"  # 存储模式(file/db)

  # 文件存储(仅 mode=file 时生效)
  file {
    dir = "sessionStore"  # 存储目录
    maxBranchSessionSize = 16384  # 分支事务最大缓存数
    flushDiskMode = async  # 异步刷盘(性能优先)
  }

  # 数据库存储(mode=db 时生效)
  db {
    datasource = "dbcp"  # 数据源类型(dbcp/druid等)
    dbType = "mysql"  # 数据库类型(mysql/oracle等)
    driverClassName = "com.mysql.jdbc.Driver"  # 驱动类
    url = "jdbc:mysql://127.0.0.1:3306/seata"  # 数据库地址
    user = "mysql"  # 用户名
    password = "mysql"  # 密码
    minConn = 1  # 最小连接数
    maxConn = 10  # 最大连接数
    # 事务表名(需提前创建)
    globalTable = "global_table"  # 全局事务表
    branchTable = "branch_table"  # 分支事务表
    lockTable = "lock_table"  # 锁表
  }
}

数据库存储配置步骤

  1. 在 MySQL 中创建 seata 数据库;
  2. 执行 conf/db_seata.sql 脚本创建表(global_tablebranch_tablelock_table);
  3. 配置 urluserpassword 与数据库匹配。

4. 服务器配置(server

定义事务恢复、超时等参数:

server {
  recovery {
    committingRetryPeriod = 1000  # 提交重试间隔(毫秒)
    rollbackingRetryPeriod = 1000  # 回滚重试间隔(毫秒)
    timeoutRetryPeriod = 1000  # 超时重试间隔(毫秒)
  }
  undo {
    logSaveDays = 7  # undo日志保留天数
    logDeletePeriod = 86400000  # 日志删除周期(毫秒,默认1天)
  }
  maxCommitRetryTimeout = "-1"  # 最大提交重试超时(-1表示无限制)
  maxRollbackRetryTimeout = "-1"  # 最大回滚重试超时(-1表示无限制)
}

registry.conf 配置详解

registry.conf 用于配置 Seata Server 的注册中心和配置中心,支持 Nacos、Eureka、Zookeeper 等。

1. 注册中心配置(registry

指定 Seata Server 注册到哪里,供客户端发现:

registry {
  type = "nacos"  # 注册中心类型(file/nacos/eureka/zk等)

  # Nacos 注册中心配置
  nacos {
    serverAddr = "localhost:8848"  # Nacos 地址
    namespace = ""  # 命名空间(默认public)
    cluster = "default"  # 集群名(需与 service 中的集群名一致)
    username = "nacos"  # Nacos 用户名(若开启认证)
    password = "nacos"  # Nacos 密码
  }

  # 其他注册中心配置(如Eureka)
  eureka {
    serviceUrl = "http://localhost:8761/eureka"  # Eureka地址
    application = "seata-server"  # 服务名
  }
}

推荐配置:生产环境优先使用 nacoszk,避免 file 模式(不支持动态扩缩容)。

2. 配置中心配置(config

指定 Seata Server 的配置来源(如 Nacos、Apollo 等):

config {
  type = "nacos"  # 配置中心类型(file/nacos/apollo等)

  # Nacos 配置中心
  nacos {
    serverAddr = "localhost:8848"  # Nacos 地址
    namespace = ""  # 命名空间
    group = "SEATA_GROUP"  # 配置分组(默认SEATA_GROUP)
  }
}

优势:使用 Nacos 作为配置中心时,可动态修改 Seata 配置(如事务分组),无需重启 Server。

启动 Seata Server

1. 单机启动

在 Seata 安装目录的 bin 文件夹下执行:

# Linux/Mac
sh seata-server.sh -p 8091 -h 127.0.0.1 -m db

# Windows
seata-server.bat -p 8091 -h 127.0.0.1 -m db

参数说明

  • -p:端口号(默认 8091);
  • -h:绑定 IP(默认 0.0.0.0);
  • -m:存储模式(file/db,需与 file.conf 一致)。

2. 集群启动

  1. 确保所有节点的 file.confregistry.conf 配置一致(尤其是事务分组和数据库连接);

  2. 分别在不同节点启动 Seata Server,指定不同端口:

    # 节点1
    sh seata-server.sh -p 8091 -m db
    # 节点2
    sh seata-server.sh -p 8092 -m db
  3. 若使用 Nacos 注册中心,客户端通过事务分组自动发现所有节点。

生产环境配置建议

  1. 存储模式:必须使用 db 模式,避免 file 模式导致的集群数据不一致;
  2. 数据库高可用:Seata 依赖的 MySQL 建议部署主从架构,配合读写分离;
  3. 注册中心:优先选择 Nacos 或 Zookeeper,支持动态扩缩容和服务发现;
  4. 线程池优化:根据服务器 CPU 核心数调整 workerThreadSize,避免线程过多导致上下文切换开销;
  5. 日志清理:定期清理 undo_log 表和 Seata 日志,避免磁盘空间溢出;
  6. 端口与防火墙:开放 Seata 端口(默认 8091)和数据库端口,确保节点间通信正常。

总结

Seata Server 的配置核心在于 file.conf(事务存储、通信)和 registry.conf(注册与配置中心)。生产环境需重点关注:

  • 采用 db 模式存储事务数据,保证集群一致性;
  • 使用 Nacos 等注册中心,支持动态发现和扩缩容;
  • 合理配置线程池、超时重试等参数,平衡性能与稳定性