文章目录
- 前言
- 准备工作
-
- 生成seata配置文件
-
- 创建文件夹
- 创建临时容器
- 拷贝容器内配置文件
- 删除临时容器
- 导入seata配置到nacos
- 修改application.yml配置文件
- 生成seata所需mysql表
- 修改TC的事务信息存储方式
-
- db(mysql)
- redis
- docker指令安装
- 制作docker-compose.yaml文件
- 查看网站
前言
Apache Seata(incubating) 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。
对于docker安装seata,以下是官网操作手册文档地址:
https://seata.io/zh-cn/docs/ops/deploy-by-docker.html
准备工作
生成seata配置文件
我们通过创建临时容器的方式,直接从中拷贝出自动生成的配置信息,待挂载使用
创建文件夹
mkdir -p /home/docker_home/seata/seata-data
创建临时容器
docker run -d
--name seata
seataio/seata-server:1.5.2
拷贝容器内配置文件
docker cp seata:/seata-server/resources /home/docker_home/seata/seata-data
删除临时容器
docker rm -f seata
导入seata配置到nacos
由于我们需要使用nacos作为seata服务的配置中心和注册中心,其中,配置中心的配置,我们需要先行导入,先访问以下网站,下载config.txt文件
https://github.com/seata/seata/tree/1.5.2/script/config-center
里面有很多配置,但我们只取重点需要的,如下:
service.vgroupMapping.default-tx-group=default
store.mode=db
store.lock.mode=db
store.session.mode=db
store.db.datasource=druid
store.db.dbType=mysql
store.db.driverClassName=com.mysql.jdbc.Driver
store.db.url=jdbc:mysql://localhost:3306/seata?useUnicode=true&rewriteBatchedStatements=true
store.db.user=root
store.db.password=root
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
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
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
tcc.fence.logTableName=tcc_fence_log
tcc.fence.cleanPeriod=1h
log.exceptionRate=100
metrics.enabled=false
metrics.registryType=compact
metrics.exporterList=prometheus
metrics.exporterPrometheusPort=9898
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
将上述配置导入nacos,命名seata-server.properties,如下图
修改application.yml配置文件
- 在完成了nacos配置中心的配置导入后,就可以开始设置application.yml配置文件
- 有一点要说明一下,在随着版本更替,seata使用application.yml统一进行配置管理,旧版本的是registry.conf等文件。
- 在上面从容器中拷贝出来的resources文件夹中找到application.yml文件
- 根据你实际的nacos等配置信息,设置相应的application.yml配置项
console:
user:
username: seata
password: seata
seata:
config:
# support: nacos 、 consul 、 apollo 、 zk 、 etcd3
type: nacos
nacos:
server-addr: 192.168.xxx.xxx:8848
username: nacos
password: nacos
namespace: 7307bce9-3698-45c2-b721-38acea281e7b
data-id: seata-server.properties
registry:
# support: nacos 、 eureka 、 redis 、 zk 、 consul 、 etcd3 、 sofa
type: nacos
nacos:
application: seata-server
server-addr: 192.168.xxx.xxx:8848
username: nacos
password: nacos
namespace: b4d0832b-a7b0-44c2-8ce5-1abe676a4736
如果你想修改到时候生成的web登陆的账号密码,就修改consol服务器托管e里的username和password
生成seata所需mysql表
TC 运行需要将事务信息保存在数据库,因此需要创建一些表
- https://github.com/apache/incubator-seata/tree/1.5.2/script/server/db
访问上面链接,去到源码中,找到scriptserverdb 这个目录。由于是使用mysql的,所以下载mysql.sql
左侧选择版本,右侧下载mysql.sql,直接导入到你的mysq。记得先创建schema,可命名seata
- global_table:全局事务表,每当有一个全局事务发起后,就会在该表中记录全局事务的ID
- branch_table:分支事务表,记录每一个分支事务的ID,分支事务操作的哪个数据库等信息
- lock_table:全局锁
- distributed_lock:分布式锁
修改TC的事务信息存储方式
seata 的 TC 端的事务信息存储模式(store.mode)现有file、db、redis三种,file模式无需改动,直接启动即可,下面专门讲下db和redis启动步骤。
db(mysql)
db模式为高可用模式,全局事务会话信息通过db共享,相应性能差些;上一节的内容已经将所有的配置信息都推送到了Nacos中,TC启动时会从Nacos中读取,因此我们修改也需要在Nacos中修改。需要修改的配置如下:
## 采用db的存储形式
store.mode=db
## druid数据源
store.db.datasource=druid
## mysql数据库
store.db.dbType=mysql
## mysql驱动
store.db.driverClassName=com.mysql.jdbc.Driver
## TC的数据库url
store.db.url=jdbc:mysql://127.0.0.1:3306/seata_server?useUnicode=true
## 用户名
store.db.user=root
## 密码
store.db.password=Nov2014
redis
redis模式 Seata-Server 1.3 及以上版本支持,性能较高,但存在事务信息丢失风险,所以需要提前配置合适当前场景的redis持久化配置,该模式需改动以下配置:
store.mode=redis
store.redis.host=127.0.0.1
store.redis.port=6379
store.redis.password=123456
docker指令安装
上述准备工作都做完后,我们进行正式的容器生成
docker run -d
--name seata
-p 8091:8091
-p 7091:7091
--restart=always
-e SEATA_IP=127.0.0.1
-v /home/docker_home/seata/seata-data/resources:/seata-server/resources
seataio/seata-server:1.5.2
- 以这种方式启动的 seata-server,在注册中心注册的 IP 和 端口就是 SEATA_IP 和 SEATA_PORT 指定的值,除此之外,seata-server 还支持以下环境变量:
SEATA_IP:可选,指定seata-server启动的IP,该IP用于向注册中心注册时使用
SEATA_PORT:可选,指定seata-server启动的端口,默认为 8091
STORE_MODE:可选,指定seata-server的事务日志存储方式,支持 db、file、redis,默认是 file
SERVER_NODE:可选, 用于指定seata-server节点ID, 如 1,2,3…,默认根据IP生成
SEATA_ENV:可选,指定 seata-server 运行环境,如 dev、test 等,服务启动时会使用 registry-dev.conf 这样的配置
制作docker-compose.yaml文件
version: '3.8'
services:
seata:
image: seataio/seata-server:1.5.2
container_na服务器托管me: seata
ports:
- "8091:8091"
- "7091:7091"
restart: always
environment:
- SEATA_IP=47.107.103.145
volumes:
- /home/docker_home/seata/seata-data/resources:/seata-server/resources
查看网站
http://47.107.103.145:7091/#/TransactionInfo
- 默认账号:seata
- 默认密码:seata
- 如果需要修改就改application.yml里的console配置项
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net