seata-server 集群搭建

seata-server 集群搭建

介绍

Seata分TC、TM和RM三个角色,TC(Server端)为单独服务端部署,TM和RM(Client端)由业务系统集成。
Seata-server 的高可用依赖于注册中心配置中心数据库来实现。

Server端存储模式(store.mode)现有file、db、redis三种(后续将引入raft,mongodb),file模式无需改动,直接启动即可,下面专门讲下db启动步骤。

注: file模式为单机模式,全局事务会话信息内存中读写并持久化本地文件root.data,性能较高;

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

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

下面主要介绍一下基于nacos注册中心和mysql 数据库的集群高可用的搭建和实现。

原理和架构图

seata-server 的高可用的实现,主要基于db和注册中心,通过db获取全局事务,实现多实例事务共享。通过注册中心来实现seata-server多实例的动态管理。架构图原理图如 下:

未命名文件.png

安装步骤

安装环境:centos7、jdk8

  • 下载安装包

    点击下载最新的seata-server安装包,目前最新的为Seata 1.4.2

uTools_1623378971538.png

  • 解压安装

    解压安装包:

image.png

新建seata-server 数据库,名称:seata,数据库脚本:mysql
,下载执行后:

image.png

然后进入seata-server 的conf目录,修改配置file.conf 和 registry.conf 两个配置文件。

修改file.conf文件:把seata-server的存储模式改为db 模式,修改db的数据库连接信息。

image.png

修改registry.conf 文件:把seata-server 的注册中心和配置中心都修改使用nacos 如下图

注册中心

image.png

配置中心

image.png

初始化配置到 nacos, 新建一个config.txt 的文件,内容如下:

service.vgroupMapping.sharding_jdbc_group=default
store.mode=db
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/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.queryLimit=100
store.db.lockTable=lock_table
store.db.maxWait=5000
复制代码

下载执行脚本:nacos-config.sh, 然后执行下面的命令:

sh nacos-config.sh -h localhost -p 8848 -g SEATA_GROUP -t 5a3c7d6c-f497-4d68-a71a-2e5e3340b3ca -u username -w password
复制代码

执行成功后,会把config.txt中的配置推送到nacos中,进行管理,效果如:

image.png

其他机器,安装seata-server 只需要重复以上步骤即可。

  • 启动seata-server

启动master节点,启动命令:sh seata-server.sh -h ip -p 8091 -m db -n 1

启动slave节点,启动命令: sh seata-server.sh -h ip -p 8091 -m db -n 2

    -h: 注册到注册中心的ip
    -p: Server rpc 监听端口
    -m: 全局事务会话信息存储模式,file、db、redis,优先读取启动参数 (Seata-Server 1.3及以上版本支持redis)
    -n: Server node,多个Server时,需区分各自节点,用于生成不同区间的transactionId,以免冲突
复制代码

启动成功

image.png

在nacos上查看注册情况

image.png
以上说明,seata-server集群已经搭建成功。

SpringCloud集成Seata集群

这里其实和单个seata 集成springcloud 的配置类似,就不多说了,主要提一下,springcloud如何连接seata集群的配置:

seata:
  enabled: true # seata 的开关
  application-id: ${spring.application.name}
  tx-service-group: sharding_jdbc_group
  enable-auto-data-source-proxy: false
  service:
    vgroup-mapping:
      sharding_jdbc_group: 'seata-cluster' # seata-server 注册到nacos上时设置的集群名称。
  registry:
    type: nacos
    nacos:
      application: seata-server # seata-server 实例的名称
      server-addr: ${spring.cloud.nacos.discovery.server-addr}
      namespace: 777a9882-1ec7-45bb-9a68-a54b9dee89ac
      group: SEATA_GROUP
  transport:
    compressor: gzip
复制代码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享