Sentinel初步研究的差不多了,今儿研究分布式事务seata。
Apache Seata(incubating) 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。
老规矩,先放官方文档:
一:生成seata配置文件
如题,这玩意该怎么生成呢?很简单。用docker创建一个seata容器。将容器中的配置文件复制出来不就行了嘛。
真是神操作……
1:创建临时seata容器
docker run -d \
--name seata \
seataio/seata-server:1.5.2
2:将配置文件从容器中复制出来
docker cp seata:/seata-server/resources /opt/docker/seata
3:删除临时容器
至此,临时seata容器的作用就结束了,可以将他删除了,我这里使用图形化界面操作。当然,你也可以使用docker命令删除。
二:导入seata配置到nacos
我这里使用nacos作为配置中心。
1:下载配置文件
配置中心的配置,我们需要先行导入,先访问以下网站,下载config.txt文件
2:配置导入配置中心
(1):创建命名空间seata,如下图所示:
(2):在seata命名空间下创建配置文件seata-server.properties,如下图所示:
(3):将配置导入seata-server.properties中
官网提供的是全套的配置,但是呢,我们不需要那些玩意,我们只需要配置重点的就可以了。
seata 的 TC 端的事务信息存储模式(store.mode)现有file、db、redis三种,file模式无需改动,直接启动即可。
我这里使用的事DB模式,具体配置如下:重点的基本上就是下方有注释中的部分。修改对应的部分就可以。
service.vgroupMapping.default-tx-group=default
store.mode=db # 采用DB的形式存储。还可选redis 和file
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
(4):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
三:修改application.yml配置文件
server:
port: 7091
spring:
application:
name: seata-server
logging:
config: classpath:logback-spring.xml
file:
path: ${user.home}/logs/seata
extend:
logstash-appender:
destination: 127.0.0.1:4560
kafka-appender:
bootstrap-servers: 127.0.0.1:9092
topic: logback_to_logstash
console:
user:
username: xxxx # web 控制台登录账号
password: xxxx # web 控制台登录密码
seata:
config: # 配置配置中心
# support: nacos 、 consul 、 apollo 、 zk 、 etcd3
type: nacos
nacos:
server-addr: 127.0.0.1:8848 # nacos地址
username: xxx # 用户名
password: xxx # 密码
namespace: 60f677d3-3d41-4ffb-ae1f-931af47f93bb # 命名空间
data-id: seata-server.properties # 配置文件名称
registry: # 配置注册中心
# support: nacos 、 eureka 、 redis 、 zk 、 consul 、 etcd3 、 sofa
type: nacos
nacos:
application: seata-server
server-addr: 127.0.0.1:8848 # nacos地址
username: xxx # 用户名
password: xxx # 密码
namespace: 60f677d3-3d41-4ffb-ae1f-931af47f93bb # 命名空间
store:
# support: file 、 db 、 redis
mode: file
# server:
# service-port: 8091 #If not configured, the default is '${server.port} + 1000'
security:
secretKey: SeataSecretKey0c382ef121d778043159209298fd40bf3850a017
tokenValidityInMilliseconds: 1800000
ignore:
urls: /,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/api/v1/auth/login
如果你想修改到时候生成的web登陆的账号密码,就修改console里的username和password即可。
四:创建seata所需mysql数据库及对应数据表
数据库sql文件下载地址:
我这里使用的是mysql,需要下载mysql.sql。
导入数据库之后,数据表如下图所示:
² global_table:全局事务表,每当有一个全局事务发起后,就会在该表中记录全局事务的ID
² branch_table:分支事务表,记录每一个分支事务的ID,分支事务操作的哪个数据库等信息
² lock_table:全局锁
² distributed_lock:分布式锁
五:使用docker-compose创建容器
1:docker-compose.yml
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=39.99.144.212
volumes:
- /opt/docker/seata/resources:/seata-server/resources
2:还可以配置以下参数:
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 这样的配置
3:运行docker-compose.yml文件
docker compose up -d
4:访问nacos控制台
登录nacos控制台,如下图所示:
我们发现,seata已经咋nacos注册成功。说明配置没有问题。
5:访问seata控制台
浏览器访问:
输入账号密码:默认都是seata
如下图所示:
至此,docker部署seata到这里就完成了。
有好的建议,请在下方输入你的评论。