目录
[一、Seata 高可用和异地容灾](#一、Seata 高可用和异地容灾)
[1.2、模拟异地容灾 TC 集群](#1.2、模拟异地容灾 TC 集群)
[1.2.3、微服务拂去 nacos 配置](#1.2.3、微服务拂去 nacos 配置)
一、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 这边服务也注册成功.