Seata Server配置
Seata Server 配置详解:从基础设置到生产环境部署
Seata Server 作为分布式事务的协调者(TC),其配置直接影响分布式事务的稳定性和性能。本文将详细解析 Seata Server 的核心配置文件(file.conf 和 registry.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)
定义全局事务会话的存储方式(file 或 db),生产环境推荐 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" # 锁表
}
}
数据库存储配置步骤:
- 在 MySQL 中创建
seata数据库; - 执行
conf/db_seata.sql脚本创建表(global_table、branch_table、lock_table); - 配置
url、user、password与数据库匹配。
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" # 服务名
}
}
推荐配置:生产环境优先使用 nacos 或 zk,避免 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. 集群启动
确保所有节点的
file.conf和registry.conf配置一致(尤其是事务分组和数据库连接);分别在不同节点启动 Seata Server,指定不同端口:
# 节点1 sh seata-server.sh -p 8091 -m db # 节点2 sh seata-server.sh -p 8092 -m db若使用 Nacos 注册中心,客户端通过事务分组自动发现所有节点。
生产环境配置建议
- 存储模式:必须使用
db模式,避免file模式导致的集群数据不一致; - 数据库高可用:Seata 依赖的 MySQL 建议部署主从架构,配合读写分离;
- 注册中心:优先选择 Nacos 或 Zookeeper,支持动态扩缩容和服务发现;
- 线程池优化:根据服务器 CPU 核心数调整
workerThreadSize,避免线程过多导致上下文切换开销; - 日志清理:定期清理
undo_log表和 Seata 日志,避免磁盘空间溢出; - 端口与防火墙:开放 Seata 端口(默认 8091)和数据库端口,确保节点间通信正常。
总结
Seata Server 的配置核心在于 file.conf(事务存储、通信)和 registry.conf(注册与配置中心)。生产环境需重点关注:
- 采用
db模式存储事务数据,保证集群一致性; - 使用 Nacos 等注册中心,支持动态发现和扩缩容;
- 合理配置线程池、超时重试等参数,平衡性能与稳定性