0%

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)的通信方式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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 地址映射:

1
2
3
4
5
6
7
8
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 模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
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 注册到哪里,供客户端发现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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 等):

1
2
3
4
5
6
7
8
9
10
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 文件夹下执行:

1
2
3
4
5
# 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
    2
    3
    4
    # 节点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 等注册中心,支持动态发现和扩缩容;
  • 合理配置线程池、超时重试等参数,平衡性能与稳定性

欢迎关注我的其它发布渠道

表情 | 预览
快来做第一个评论的人吧~
Powered By Valine
v1.3.10