有道无术,术尚可求,有术无道,止于术。
本系列Seata 版本 2.0.0
本系列Spring Boot 版本 3.2.0
本系列Spring Cloud 版本 2023.0.0
源码地址:https://gitee.com/pearl-organization/study-seata-demo
文章目录
- 1. 概述
- 2. 搭建演示
- 2.1 注册中心、配置中心、数据库
- 2.2 安装文件
- 2.3 修改配置
- 2.4 启动集群
1. 概述
Seata
在生产环境应当采用集群部署,主节点宕机后继续正常运行,常见的方式是通过部署多个提供相同服务的节点。不然一旦单机的Seata
服务端宕机,接入的业务系统也会变得不可用。
2. 搭建演示
搭建主从集群,每个集群分组包含两个服务端实例,业务系统连接主集群分组,当集群不可用时,切换到备用集群分组,部署架构图如下:
2.1 注册中心、配置中心、数据库
Seata
集群依赖于注册中心,需要通过注册实时感知主节点的上下线情况,以便及时切换到可用的节点,这里使用Nacos
作为注册中心。
Seata
集群依赖于数据库,使用计算与存储分离的架构,将数据存储在共享的存储中间件中,任何一个节点都可以通过访问该公共存储区域获取所有节点操作的事务信息,从而实现高可用的能力。也就是之前有说过的事务会话存储,支持db
、redis
、raft
,但是由于目前raft
集成不够成熟,db
需要建库建表,这里使用redis
。
Seata
可不依赖配置中心,但是最好还是使用配置中心,因为集群所有节点的配置项需要保持一致,这里使用Nacos
作为配置中心。
综上,这里使用Nacos
作为注册、配置中心,redis
作为事务会话存储中间件,关于它们的搭建这里就不赘述了。
2.2 安装文件
这里直接使用一台电脑模拟集群环境,将Seata 2.x 系列【7】服务端集成 Nacos 2.x中配置好的Seata
部署文件,复制到下面目录中:
├── seata-cluster
│ ├── master
├── ── └──seata01
├── ── └──seata02
│ ├── slave
├── ── └──seata03
├── ── └──seata04
2.3 修改配置
启动Nacos
,在seata.properties
文件中,修改存储模式为reids
,并配置reids
连接信息:
#Transaction storage configuration, only for the server. The file, db, and redis configuration values are optional.
store.mode=redis
store.lock.mode=redis
store.session.mode=redis
#Used for password encryption
store.publicKey=
#These configurations are required if the `store mode` is `redis`. If `store.mode,store.lock.mode,store.session.mode` are not equal to `redis`, you can remove the configuration block.
store.redis.mode=single
store.redis.type=pipeline
store.redis.single.host=127.0.0.1
store.redis.single.port=6379
store.redis.sentinel.masterName=
store.redis.sentinel.sentinelHosts=
store.redis.sentinel.sentinelPassword=
store.redis.maxConn=10
store.redis.minConn=1
store.redis.maxTotal=100
store.redis.database=0
store.redis.password=123456
store.redis.queryLimit=100
修改每个Seata
节点配置文件,主要是启动端口、集群名称:
seata01
:启动端口7091
,通信端口自动偏移为7091+1000
,集群名称master
seata02
:启动端口7092
,通信端口自动偏移为7092+1000
,集群名称master
seata03
:启动端口7093
,通信端口自动偏移为7093+1000
,集群名称slave
seata04
:启动端口7094
,通信端口自动偏移为7094+1000
,集群名称slave
server:port: 7091
spring:application:name: seata-server
console:user:username: seatapassword: seata
seata:# 配置中心config:# 类型: nacos 、 consul 、 apollo 、 zk 、 etcd3type: nacosnacos:# nacos 服务端地址server-addr: 127.0.0.1:8848# 命名空间namespace: 7032916a-19f1-482e-a3eb-8a62226c2e4d# 分组group: SEATA_GROUP# 配置IDdata-id: seata.properties# 注册中心registry:# 类型: nacos 、 eureka 、 redis 、 zk 、 consul 、 etcd3 、 sofatype: nacosnacos:# 指定注册至nacos注册中心的服务名application: seata-serverserver-addr: 127.0.0.1:8848group: DEFAULT_GROUPnamespace: 7032916a-19f1-482e-a3eb-8a62226c2e4d# 指定注册至nacos注册中心的集群名cluster: master
2.4 启动集群
运行每个节点下的seata-server.bat
启动脚本,都启动成功后,在Nacos
服务列表,可以查看到当前存在两个集群,四个节点实例:
查看详情,可以看到当前一个master
集群,一个slave
集群,以及节点实例的详细信息: