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 这边服务也注册成功.

相关推荐
NiNg_1_2344 小时前
SpringBoot整合SpringSecurity实现密码加密解密、登录认证退出功能
java·spring boot·后端
Chrikk5 小时前
Go-性能调优实战案例
开发语言·后端·golang
幼儿园老大*5 小时前
Go的环境搭建以及GoLand安装教程
开发语言·经验分享·后端·golang·go
canyuemanyue5 小时前
go语言连续监控事件并回调处理
开发语言·后端·golang
杜杜的man5 小时前
【go从零单排】go语言中的指针
开发语言·后端·golang
Wx-bishekaifayuan7 小时前
django电商易购系统-计算机设计毕业源码61059
java·spring boot·spring·spring cloud·django·sqlite·guava
customer087 小时前
【开源免费】基于SpringBoot+Vue.JS周边产品销售网站(JAVA毕业设计)
java·vue.js·spring boot·后端·spring cloud·java-ee·开源
小白冲鸭8 小时前
【报错解决】使用@SpringJunitConfig时报空指针异常
spring·java后端开发