SpringCloud Alibaba - Seata 实现高可用和异地容灾

目录

[一、Seata 高可用和异地容灾](#一、Seata 高可用和异地容灾)

1.1、理论

[1.2、模拟异地容灾 TC 集群](#1.2、模拟异地容灾 TC 集群)

1.2.1、模拟实现两个机房

1.2.2、配置事务组映射

[1.2.3、微服务拂去 nacos 配置](#1.2.3、微服务拂去 nacos 配置)

1.2.4、启动所有微服务


一、Seata 高可用和异地容灾


1.1、理论

Seata 的高可用实现比较简单,只需要把他搭建成一个集群即可,然后将这些服务都注册到 注册中心 nacos 上即可,这样就可以对多个服务进行一个负载均衡.

这里不仅仅要实现高可用,还需要实现异地容灾. 异地容灾就是说,如果你整了好几个节点部署起来,全部放到一个机房里面,那么如果这个机房出了故障,就意味着整个集群就完了,所以对于一个大型的集群来讲,都会把这些服务异地部署.

例如,把一部分服务器部署到上海,另一部分服务器部署到杭州. 这样,即使一个机房出了问题,还有另一个机房可以继续使用,起到了一个容灾的效果.

问题1:如果机房越来越多,那微服务该访问哪个呢?

可以回想一下,在前面的章节中,Seata 的 TC 服务器,我们是注册到 nacos 中,并在代码中配置过 namespace、group、服务名称、cluster映射集群,这样就可以确定对应的集群了.

问题2:如果我们要实现异地容灾,也就说某一个机房挂了,需要快速的切换到另一个可用的机房,但是这个配置在配置文件中写死了,如果要改配置文件,还需要重启服务器,这是我们不希望看到的,怎么办?

在微服务中有一个组件叫 nacos,通过他就可以实现配置的热更新. 我们把这个配置放到 nacos 上,微服务就可以动态监听 nacos,将来一旦进行了修改集群名称,就可以实现动态切换.

1.2、模拟异地容灾 TC 集群

1.2.1、模拟实现两个机房

这里我们计划启动两台 Seata 的 TC 服务节点:

|--------|-----------|------|------|
| 节点名称 | ip地址 | 端口号 | 集群名称 |
| seata | 127.0.0.1 | 8091 | SH |
| seata2 | 127.0.0.1 | 8092 | HZ |

这里需要去官网下载 seata-server 包,Seata | Seata

将 seata-server 解压,复制一份,起名为 seata2.

分别修改 seata 和 seata2 目录下的 conf/registry.conf 文件.

seata 配置内容如下(集群名称:SH):

复制代码
registry {
  # tc服务的注册中心类,这里选择nacos,也可以是eureka、zookeeper等
  type = "nacos"

  nacos {
    # seata tc 服务注册到 nacos的服务名称,可以自定义
    application = "seata-tc-server"
    serverAddr = "127.0.0.1:8848"
    group = "DEFAULT_GROUP"
    namespace = ""
    cluster = "SH"
    username = "nacos"
    password = "nacos"
  }
}

config {
  # 读取tc服务端的配置文件的方式,这里是从nacos配置中心读取,这样如果tc是集群,可以共享配置
  type = "nacos"
  # 配置nacos地址等信息
  nacos {
    serverAddr = "127.0.0.1:8848"
    namespace = ""
    group = "SEATA_GROUP"
    username = "nacos"
    password = "nacos"
    dataId = "seataServer.properties"
  }
}

seata2 配置内容如下(集群名称:HZ):

复制代码
registry {
  # tc服务的注册中心类,这里选择nacos,也可以是eureka、zookeeper等
  type = "nacos"

  nacos {
    # seata tc 服务注册到 nacos的服务名称,可以自定义
    application = "seata-tc-server"
    serverAddr = "127.0.0.1:8848"
    group = "DEFAULT_GROUP"
    namespace = ""
    cluster = "HZ"
    username = "nacos"
    password = "nacos"
  }
}

config {
  # 读取tc服务端的配置文件的方式,这里是从nacos配置中心读取,这样如果tc是集群,可以共享配置
  type = "nacos"
  # 配置nacos地址等信息
  nacos {
    serverAddr = "127.0.0.1:8848"
    namespace = ""
    group = "SEATA_GROUP"
    username = "nacos"
    password = "nacos"
    dataId = "seataServer.properties"
  }
}

进入 seata/bin 目录,运行 seata-server.bat 文件,默认端口为 8091

然后进入 seata2/bin 目录,通过 8092 端口打开

复制代码
seata-server.bat -p 8092

打开 nacos 控制台,就可以查看服务,如下:

1.2.2、配置事务组映射

接下来,我们需要将 tx-service-group 与 cluster 的映射关系都配置到 nacos 配置中心。

1.2.3、微服务拂去 nacos 配置

接下来,修改每一个微服务的 application.yml 文件,让微服务读取 nacos 中的 client.properties 文件.

复制代码
seata:
  config:
    type: nacos
    nacos:
      server-addr: 127.0.0.1:8848
      username: nacos
      password: nacos
      group: SEATA_GROUP
      data-id: seataServer2.properties

1.2.4、启动所有微服务

可以看到 8091 这边日志信息,服务全部注册成功.

现在修改 nacos 上修改为 HZ 事务组映射.

可以观察到 8092 这边服务也注册成功.

相关推荐
码事漫谈9 分钟前
FDE 的起源、形态与真实边界
后端
行百里er12 分钟前
Spring Insight 里如何画出服务拓扑
spring boot·spring cloud·监控
Wang's Blog18 分钟前
Java框架快速入门: Spring Security+OAuth2之核心角色与授权流程
java·spring·github
ServBay22 分钟前
Grok Bot 还是 OpenClaw?聊聊真正能替人打杂的 AI 智能体
后端·aigc·grok
掘金挖土33 分钟前
前端手摸手跑路之 AI 应用开发(五)
前端·后端
弈栈录1 小时前
LangGraph 入门:用状态机设计可靠的 Agent 工作流
后端·程序员
Wang's Blog1 小时前
Java框架快速入门: Spring Security+OAuth2之RBAC与角色分层实践
java·网络·spring
LEE2 小时前
前端转型全栈 00:AI 时代该学哪些,不该学哪些
前端·后端
Go_error2 小时前
上下文取消链:摧毁我们支付系统的 bug
后端·go
无限压榨切图仔3 小时前
一个优惠券需求改了三端,我才明白全栈不是多学一门语言
前端·后端