前言
Seata分TC、TM和RM三个角色,TC(Server端)为单独服务端部署,TM和RM(Client端)由业务系统集成。
本文档内容为TC的搭建与配置。
更多详细介绍请参考官方文档:Seata官方文档
seata-server官方下载地址:https://github.com/seata/seata/releases
由于官方地址网络不稳定,本文档提供window环境seata-server-1.4.0版本下载链接
百度网盘下载地址:
请注意,本文档使用版本为seata-server1.4.0
,不同版本参数配置可能不一致,如以本文档为参考,请最好使用seata-server1.4.0版本。
官方给的一些数据库脚本和配置文件地址:https://github.com/seata/seata/tree/develop/script/server
安装配置
(一)环境准备
- Windows:7
- JDK: 8
- seata-server:1.4.0
- nacos-server:1.4.0
- Mysql : 5.7
- Git : 2.29.2 windows
本文档只关注seata-server的配置和安装,在开始之前,请确保上述其它环境正常。
(二)下载配置与安装
选择上述下载链接,下载seata-server1.4.0.zip文件;
下载解压后目录如下:
1、导入Seata默认配置到Nacos配置中心
- 在目录下新建nacos-config.sh脚本文件
- 将文件内容复制到该目录下新建的的nacos-config.sh文件中
- 在目conf同级目录下新建config.txt文件
- 将文件内容复制到该目录下新建的config.txt文件中,其中有关数据库连接信息部分修改为自己的数据库信息,例如:
#For details about configuration items, see https://seata.io/zh-cn/docs/user/configurations.html
#Transport configuration, for client and server
transport.type=TCP
transport.server=NIO
transport.heartbeat=true
transport.enableTmClientBatchSendRequest=false
transport.enableRmClientBatchSendRequest=true
transport.enableTcServerBatchSendResponse=false
transport.rpcRmRequestTimeout=30000
transport.rpcTmRequestTimeout=30000
transport.rpcTcRequestTimeout=30000
transport.threadFactory.bossThreadPrefix=NettyBoss
transport.threadFactory.workerThreadPrefix=NettyServerNIOWorker
transport.threadFactory.serverExecutorThreadPrefix=NettyServerBizHandler
transport.threadFactory.shareBossWorker=false
transport.threadFactory.clientSelectorThreadPrefix=NettyClientSelector
transport.threadFactory.clientSelectorThreadSize=1
transport.threadFactory.clientWorkerThreadPrefix=NettyClientWorkerThread
transport.threadFactory.bossThreadSize=1
transport.threadFactory.workerThreadSize=default
transport.shutdown.wait=3
transport.serialization=seata
transport.compressor=none
#Transaction routing rules configuration, only for the client
service.vgroupMapping.default_tx_group=default
#If you use a registry, you can ignore it
service.default.grouplist=127.0.0.1:8091
service.enableDegrade=false
service.disableGlobalTransaction=false
#Transaction rule configuration, only for the client
client.rm.asyncCommitBufferLimit=10000
client.rm.lock.retryInterval=10
client.rm.lock.retryTimes=30
client.rm.lock.retryPolicyBranchRollbackOnConflict=true
client.rm.reportRetryCount=5
client.rm.tableMetaCheckEnable=true
client.rm.tableMetaCheckerInterval=60000
client.rm.sqlParserType=druid
client.rm.reportSuccessEnable=false
client.rm.sagaBranchRegisterEnable=false
client.rm.sagaJsonParser=fastjson
client.rm.tccActionInterceptorOrder=-2147482648
client.tm.commitRetryCount=5
client.tm.rollbackRetryCount=5
client.tm.defaultGlobalTransactionTimeout=60000
client.tm.degradeCheck=false
client.tm.degradeCheckAllowTimes=10
client.tm.degradeCheckPeriod=2000
client.tm.interceptorOrder=-2147482648
client.undo.dataValidation=true
client.undo.logSerialization=jackson
client.undo.onlyCareUpdateColumns=true
server.undo.logSaveDays=7
server.undo.logDeletePeriod=86400000
client.undo.logTable=undo_log
client.undo.compress.enable=true
client.undo.compress.type=zip
client.undo.compress.threshold=64k
#For TCC transaction mode
tcc.fence.logTableName=tcc_fence_log
tcc.fence.cleanPeriod=1h
#Log rule configuration, for client and server
log.exceptionRate=100
#Transaction storage configuration, only for the server. The file, DB, and redis configuration values are optional.
store.mode=DB
store.lock.mode=DB
store.session.mode=DB
#Used for password encryption
store.publicKey=
#If `store.mode,store.lock.mode,store.session.mode` are not equal to `file`, you can remove the configuration block.
store.file.dir=file_store/data
store.file.maxBranchSessionSize=16384
store.file.maxGlobalSessionSize=512
store.file.fileWriteBufferCacheSize=16384
store.file.flushDiskMode=async
store.file.sessionReloadReadSize=100
#These configurations are required if the `store mode` is `db`. If `store.mode,store.lock.mode,store.session.mode` are not equal to `db`, you can remove the configuration block.
store.db.datasource=druid
store.db.dbType=mysql
store.db.driverClassName=com.mysql.jdbc.Driver
store.db.url=jdbc:mysql://127.0.0.1:3306/mallplus_seata?useUnicode=true&rewriteBatchedStatements=true
store.db.user=root
store.db.password=123456
store.db.minConn=5
store.db.maxConn=30
store.db.globalTable=global_table
store.db.branchTable=branch_table
store.db.distributedLockTable=distributed_lock
store.db.queryLimit=100
store.db.lockTable=lock_table
store.db.maxWait=5000
#These configurations are required if the `store mode` is `redis`. If `store.mode,store.lock.mode,store.session.mode` are not equal to `redis`, you can remove the configuration block.
store.redis.mode=single
store.redis.single.host=127.0.0.1
store.redis.single.port=6379
store.redis.sentinel.masterName=
store.redis.sentinel.sentinelHosts=
store.redis.maxConn=10
store.redis.minConn=1
store.redis.maxTotal=100
store.redis.database=0
store.redis.password=
store.redis.queryLimit=100
#Transaction rule configuration, only for the server
server.recovery.committingRetryPeriod=1000
server.recovery.asynCommittingRetryPeriod=1000
server.recovery.rollbackingRetryPeriod=1000
server.recovery.timeoutRetryPeriod=1000
server.maxCommitRetryTimeout=-1
server.maxRollbackRetryTimeout=-1
server.rollbackRetryTimeoutUnlockEnable=false
server.distributedLockExpireTime=10000
server.xaerNotaRetryTimeout=60000
server.session.branchAsyncQueueSize=5000
server.session.enableBranchAsyncRemove=false
server.enableParallelRequestHandle=false
#Metrics configuration, only for the server
metrics.enabled=false
metrics.registryType=compact
metrics.exporterList=prometheus
metrics.exporterPrometheusPort=9898
config.txt就是seata各种详细的配置,配置详解可参考:seata官方配置详解,执行 nacos-config.sh 即可将这些配置导入到nacos,这样就不需要将file.conf和registry.conf放到我们的项目中了,需要什么配置就直接从nacos中读取。(注意:文件路径不能有空格
)
上面的文件夹会报错。
5. 当前目录右键->选择Git Bash Here,打开命令行窗口,执行命令:
sh nacos-config.sh -h 120.77.255.131 -p 8848 -g SEATA_GROUP -t fed273be-0659-402e-8879-dbb9e1721f34
-h 配置中心地址,即nacos地址
-p 指定nacos的端口地址;
-g 指定配置的分组,注意,是配置的分组;
-t 指定命名空间id,在nacos界面可以查看命名空间id
- 最终显示如下,边表示Seata配置导入Nacos成功
- 访问Nacos查看导入的配置
这个seata的命名空间是我自己创建的,各位按需求自行创建即可。
2、启动Seata Server
进入…/seata/conf目录
- 修改file.conf
- 修改registry.conf
registry{}中是注册中心相关配置,config{}中是配置中心相关配置。seata中,注册中心和配置中心是分开实现的,是两个东西。本文档使用Nacos-server作为seata的注册中心和配置中心.。
registry {
# file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
type = "nacos"
loadBalance = "RandomLoadBalance"
loadBalanceVirtualNodes = 10
nacos {
application = "seata-server"
serverAddr = "120.77.255.131:8848"
group = "SEATA_GROUP"
namespace = ""
cluster = "default"
username = ""
password = ""
}
}
config {
# file、nacos 、apollo、zk、consul、etcd3
type = "nacos"
nacos {
serverAddr = "120.77.255.131:8848"
namespace = "seata"
group = "SEATA_GROUP"
username = ""
password = ""
}
}
- 导入数据库文件
数据库与file.conf中配置的数据库对应,导入成功,数据库表如下:
- 启动seata-server
进入bin目录,单击seata-server.bat即可
- 启动成功画面如下:
- 访问Nacos Server,在服务列表中查看。由于我并没有配置命名空间默认,只指定了分组,命名空间默认为public,各位按需要在registry.conf修改即可。