前言

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登陆的账号密码,就修改console里的username和password

生成seata所需mysql表

TC 运行需要将事务信息保存在数据库,因此需要创建一些表

访问上面链接,去到源码中,找到script\server\db 这个目录。由于是使用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_name: 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配置项

在这里插入图片描述

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐