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多实例的动态管理。架构图原理图如 下:
安装步骤
安装环境:centos7、jdk8
-
下载安装包
点击下载最新的seata-server安装包,目前最新的为Seata 1.4.2
-
解压安装
解压安装包:
新建seata-server 数据库,名称:seata,数据库脚本:mysql
,下载执行后:
然后进入seata-server 的conf目录,修改配置file.conf 和 registry.conf 两个配置文件。
修改file.conf文件:把seata-server的存储模式改为db 模式,修改db的数据库连接信息。
修改registry.conf 文件:把seata-server 的注册中心和配置中心都修改使用nacos 如下图
注册中心
配置中心
初始化配置到 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中,进行管理,效果如:
其他机器,安装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,以免冲突
复制代码
启动成功
在nacos上查看注册情况
以上说明,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
复制代码