Seata 环境搭建

Seata分TC、TM和RM三个角色,TC(Server端)为单独服务端部署,TM和RM(Client端)由业务系统集成。

https://seata.io/zh-cn/docs/ops/deploy-guide-beginner.html

下载安装包

https://github.com/seata/seata/releases

windows 安装 Seata

解压seata-server-1.3.0.zip

Server端存储模式(store.mode)现有file、db、redis三种(后续将引入raft,mongodb),file模式无需改动,直接启动即可,下面专门讲下db和redis启动步骤。
注: file模式为单机模式,全局事务会话信息内存中读写并持久化本地文件root.data,性能较高;

db模式为高可用模式,全局事务会话信息通过db共享,相应性能差些;(mysql 5.7+)

redis模式Seata-Server 1.3及以上版本支持,性能较高,存在事务信息丢失风险,请提前配置合适当前场景的redis持久化配置.

 打开conf目录下的file.conf

 修改 mode = "db"  及数据连接配置信息

修改store.mode

启动包: seata-->conf-->file.conf,修改store.mode="db或者redis"
源码: 根目录-->seata-server-->resources-->file.conf,修改store.mode="db或者redis"

## transaction log store, only used in seata-server
store {
  ## store mode: file、db、redis
  ## mode = "file"
  mode = "db"

  ## file store property
  file {
    ## store location dir
    dir = "sessionStore"
    # branch session size , if exceeded first try compress lockkey, still exceeded throws exceptions
    maxBranchSessionSize = 16384
    # globe session size , if exceeded throws exceptions
    maxGlobalSessionSize = 512
    # file buffer size , if exceeded allocate new buffer
    fileWriteBufferCacheSize = 16384
    # when recover batch read size
    sessionReloadReadSize = 100
    # async, sync
    flushDiskMode = async
  }

  ## database store property
  db {
    ## the implement of javax.sql.DataSource, such as DruidDataSource(druid)/BasicDataSource(dbcp)/HikariDataSource(hikari) etc.
    datasource = "druid"
    ## mysql/oracle/postgresql/h2/oceanbase etc.
    dbType = "mysql"
    driverClassName = "com.mysql.jdbc.Driver"
    url = "jdbc:mysql://127.0.0.1:3406/seata_server"
    user = "root"
    password = "Root&123456"
    minConn = 5
    maxConn = 30
    globalTable = "global_table"
    branchTable = "branch_table"
    lockTable = "lock_table"
    queryLimit = 100
    maxWait = 5000
  }

  ## redis store property
  redis {
    host = "127.0.0.1"
    port = "6379"
    password = ""
    database = "0"
    minConn = 1
    maxConn = 10
    queryLimit = 100
  }

}

修改数据库连接|redis属性配置

启动包: seata-->conf-->file.conf,修改store.db或store.redis相关属性。
源码: 根目录-->seata-server-->resources-->file.conf,修改store.db或store.redis相关属性。

找到sql角本创建上面配置的seata对应数据库

下载解压

建表(仅db)

 全局事务会话信息由3块内容构成,全局事务-->分支事务-->全局锁,对应表global_table、branch_table、lock_table

修改 nacos 注册中心 

 

修改 nacos 配置中心

https://seata.io/zh-cn/docs/user/txgroup/transaction-group-and-ha.html

最佳实践1:TC的异地多机房容灾

  • 假定TC集群部署在两个机房:guangzhou机房(主)和shanghai机房(备)各两个实例
  • 一整套微服务架构项目:projectA
  • projectA内有微服务:serviceA、serviceB、serviceC 和 serviceD

其中,projectA所有微服务的事务分组tx-service-group设置为:projectA,projectA正常情况下使用guangzhou的TC集群(主)

那么正常情况下,client端的配置如下所示:

seata.tx-service-group=projectA
seata.service.vgroup-mapping.projectA=Guangzhou

假如此时guangzhou集群分组整个down掉,或者因为网络原因projectA暂时无法与Guangzhou机房通讯,那么我们将配置中心中的Guangzhou集群分组改为Shanghai,如下:

seata.service.vgroup-mapping.projectA=Shanghai

并推送到各个微服务,便完成了对整个projectA项目的TC集群动态切换。

异地多机房容灾备用集群

配置事务分组,要与客户端配置的事务分组一致

# my_test_tx_group 需要与客户端保持一致    default需要跟客户端和registry.conf中registry中的cluster保持一致

(客户端properties配置:spring.cloud.alibaba.seata.tx-service-group=my_test_tx_group)

将 seata-1.3.0\script 文件夹复制到   seata-server-1.3.0\seata 下

资源目录介绍

点击查看

  • client

存放client端sql脚本 (包含 undo_log表) ,参数配置

  • config-center

各个配置中心参数导入脚本,config.txt(包含server和client,原名nacos-config.txt)为通用参数文件

  • server

server端数据库脚本 (包含 lock_table、branch_table 与 global_table) 及各个容器配置

 

Server端存储模式(store.mode)现有file、db、redis三种(后续将引入raft,mongodb),file模式无需改动,直接启动即可,下面专门讲下db和redis启动步骤。
注: file模式为单机模式,全局事务会话信息内存中读写并持久化本地文件root.data,性能较高;

db模式为高可用模式,全局事务会话信息通过db共享,相应性能差些;

redis模式Seata-Server 1.3及以上版本支持,性能较高,存在事务信息丢失风险,请提前配置合适当前场景的redis持久化配置.

 事务分组:异地机房停电容错机制

my_test_tx_group 可以自定义 比如:(guangzhou、shanghai ...) ,对应的client也要去设置

seata.service.vgroup-mapping.my_test_tx_group=Guangzhou

default 必须要等于  registry.conf    cluster = "default"

 

sh E:\SpringCloud\seata-server-1.3.0\seata\script\config-center\nacos\nacos-config.sh -h 192.168.133.129 -p 8847 -g SEATA_GROUP -t c8296d30-25bc-47f2-95a0-5698e69aa6d7

sh nacos-config.sh -h localhost -p 8848 -g SEATA_GROUP -u nacos -w nacos

 

sh nacos-config.sh -h 192.168.133.129 -p 8847 -g SEATA_GROUP

 

 在nacos添加配置
特别注意,为了让tc服务的集群可以共享配置,我们选择了nacos作为统一配置中心。因此服务端配置文件seataServer.properties文件需要在nacos中配好。

# 数据存储方式,db代表数据库
store.mode=db
store.db.datasource=druid
store.db.dbType=mysql
store.db.driverClassName=com.mysql.cj.jdbc.Driver
store.db.url=jdbc:mysql://127.0.0.1:3406/seata_server?useUnicode=true&rewriteBatchedStatements=true
store.db.user=root
store.db.password=Root&123456
store.db.minConn=5
store.db.maxConn=30
store.db.globalTable=global_table
store.db.branchTable=branch_table
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.undo.logSaveDays=7
server.undo.logDeletePeriod=86400000

# 客户端与服务端传输方式
transport.serialization=seata
transport.compressor=none
# 关闭metrics功能,提高性能
metrics.enabled=false
metrics.registryType=compact
metrics.exporterList=prometheus
metrics.exporterPrometheusPort=9898

注意:其中的数据库地址、用户名、密码都需要修改成你自己的数据库信息。

mysql数据库版本和代码使用的版本不一致导致的,mysql5.x版本和8.x版本驱动不同

所以需要修改数据库连接驱动:

老版本驱动,一般指5.x版本:

driverClassName: com.mysql.jdbc.Driver
新版本驱动,一般指8.x版本:

driverClassName: com.mysql.cj.jdbc.Driver

启动

  • 源码启动: 执行Server.java的main方法
  • 命令启动: seata-server.sh -h 127.0.0.1 -p 8091 -m db -n 1 -e test
    -h: 注册到注册中心的ip
    -p: Server rpc 监听端口
    -m: 全局事务会话信息存储模式,file、db、redis,优先读取启动参数 (Seata-Server 1.3及以上版本支持redis)
    -n: Server node,多个Server时,需区分各自节点,用于生成不同区间的transactionId,以免冲突
    -e: 多环境配置参考 http://seata.io/en-us/docs/ops/multi-configuration-isolation.html

 
原文地址:https://www.cnblogs.com/mingforyou/p/15700336.html