随笔 - 1357  文章 - 0  评论 - 1104  阅读 - 1941万

Seata-Seata的高可用异地容灾架构搭建

1.模拟异地容灾的TC集群
计划启动两台seata的tc服务节点,分别代表上海和杭州集群:

| 节点名称  | ip地址(具体IP) | 端口号  | 集群名称 |
| -------- | ------------- | ------ | -------- |
| seata    | 192.168.8.118 | 8091   | SH       |
| seata2   | 192.168.8.118 | 8092   | HZ       |

之前我们已经启动了一台seata服务,端口是8091,集群名为SH(注:192.168.8.118用tajia-nacos替代,在host配置)。

现在,将seata目录复制一份,起名为seata-server-2,代表杭州集群

修改seata-server-2/conf/registry.conf内容如下:

复制代码
registry {
  # tc服务的注册中心类,这里选择nacos,也可以是eureka、zookeeper等
  # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
  type = "nacos"
 
  nacos {
    application = "seata-tc-server"
    serverAddr = "tajia-nacos:8848"
    group = "SEATA_GROUP"
    namespace = ""
    cluster = "HZ"
    username = "nacos"
    password = "nacos"
  }  
}

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

 

进入seata2/bin目录,然后运行命令:

D:/dev/seata-server-2/bin/seata-server.bat -p 8092

 

打开nacos控制台,查看服务列表:

点进详情查看:

 

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

 

配置的内容如下(client.properties):

复制代码
# 事务组映射关系SH、HZ
service.vgroupMapping.seata-demo=SH

service.enableDegrade=false
service.disableGlobalTransaction=false
# 与TC服务的通信配置
transport.type=TCP
transport.server=NIO
transport.heartbeat=true
transport.enableClientBatchSendRequest=false
transport.threadFactory.bossThreadPrefix=NettyBoss
transport.threadFactory.workerThreadPrefix=NettyServerNIOWorker
transport.threadFactory.serverExecutorThreadPrefix=NettyServerBizHandler
transport.threadFactory.shareBossWorker=false
transport.threadFactory.clientSelectorThreadPrefix=NettyClientSelector
transport.threadFactory.clientSelectorThreadSize=1
transport.threadFactory.clientWorkerThreadPrefix=NettyClientWorkerThread
transport.threadFactory.bossThreadSize=1
transport.threadFactory.workerThreadSize=default
transport.shutdown.wait=3
# RM配置
client.rm.asyncCommitBufferLimit=10000
client.rm.lock.retryInterval=10
client.rm.lock.retryTimes=30
client.rm.lock.retryPolicyBranchRollbackOnConflict=true
client.rm.reportRetryCount=5
client.rm.tableMetaCheckEnable=false
client.rm.tableMetaCheckerInterval=60000
client.rm.sqlParserType=druid
client.rm.reportSuccessEnable=false
client.rm.sagaBranchRegisterEnable=false
# TM配置
client.tm.commitRetryCount=5
client.tm.rollbackRetryCount=5
client.tm.defaultGlobalTransactionTimeout=60000
client.tm.degradeCheck=false
client.tm.degradeCheckAllowTimes=10
client.tm.degradeCheckPeriod=2000

# undo日志配置
client.undo.dataValidation=true
client.undo.logSerialization=jackson
client.undo.onlyCareUpdateColumns=true
client.undo.logTable=undo_log
client.undo.compress.enable=true
client.undo.compress.type=zip
client.undo.compress.threshold=64k
client.log.exceptionRate=100
View Code
复制代码

 

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

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


seata完整配置如下:

复制代码
seata:
  registry: # TC服务注册中心的配置,微服务根据这些信息去注册中心获取tc服务地址
    # 参考tc服务自己的registry.conf中的配置
    type: nacos
    nacos: # tc
      server-addr: tajia-nacos:8848
      namespace: ""
      group: SEATA_GROUP
      application: seata-tc-server # tc服务在nacos中的服务名称
  tx-service-group: seata-demo # 事务组,根据这个获取tc服务的cluster名称
  #service:
  #  vgroup-mapping: # 事务组与TC服务cluster的映射关系
  #    seata-demo: SH
  config:
    type: nacos
    nacos:
      server-addr: tajia-nacos:8848
      username: nacos
      password: nacos
      group: SEATA_GROUP
      data-id: client.properties
复制代码

 

重启微服务,现在微服务到底是连接tc的SH集群,还是tc的HZ集群,统一由nacos的client.properties来决定。

nacos配置的service.vgroupMapping.seata-demo是SH集群,此时观察微服务和seata-server控制台的日志信息,切换service.vgroupMapping.seata-demo,微服务和seata-server控制台是否也跟着变化。

storage-service、account-service、order-service控制台日志已连接到8091:

10-14 16:32:10:625 INFO 10816 --- [eoutChecker_1_1] i.s.c.r.netty.NettyClientChannelManager : will connect to 192.168.8.118:8091
10-14 16:32:10:628 INFO 10816 --- [eoutChecker_1_1] i.s.core.rpc.netty.NettyPoolableFactory : NettyPool create channel to transactionRole:TMROLE,address:192.168.8.118:8091,msg:< RegisterTMRequest{applicationId='account-service', transactionServiceGroup='seata-demo'} >
10-14 16:32:10:649 INFO 10816 --- [eoutChecker_1_1] i.s.c.rpc.netty.TmNettyRemotingClient : register TM success. client version:1.4.2, server version:1.4.2,channel:[id: 0xa0e148c9, L:/192.168.8.118:65201 - R:/192.168.8.118:8091]
10-14 16:32:10:649 INFO 10816 --- [eoutChecker_1_1] i.s.core.rpc.netty.NettyPoolableFactory : register success, cost 12 ms, version:1.4.2,role:TMROLE,channel:[id: 0xa0e148c9, L:/192.168.8.118:65201 - R:/192.168.8.118:8091]


端口8091的seata-server打印如下信息:

16:32:10.646 INFO --- [ttyServerNIOWorker_1_4_32] i.s.c.r.processor.server.RegTmProcessor : TM register success,message:RegisterTMRequest{applicationId='account-service', transactionServiceGroup='seata-demo'},channel:[id: 0x27316e88, L:/192.168.8.118:8091 - R:/192.168.8.118:65201],client version:1.4.2
16:32:14.902 INFO --- [ttyServerNIOWorker_1_5_32] i.s.c.r.processor.server.RegTmProcessor : TM register success,message:RegisterTMRequest{applicationId='storage-service', transactionServiceGroup='seata-demo'},channel:[id: 0xcf3862b2, L:/192.168.8.118:8091 - R:/192.168.8.118:65206],client version:1.4.2
16:32:55.114 INFO --- [ttyServerNIOWorker_1_6_32] i.s.c.r.processor.server.RegTmProcessor : TM register success,message:RegisterTMRequest{applicationId='order-service', transactionServiceGroup='seata-demo'},channel:[id: 0x137960bb, L:/192.168.8.118:8091 - R:/192.168.8.118:65248],client version:1.4.2

编辑nacos的client.properties配置文件,把service.vgroupMapping.seata-demo设置为HZ,微服务和seata-server控制台是否连接到8092这台seata-server。

storage-service、account-service、order-service控制台日志已连接到8092:

复制代码
10-14 16:32:10:625 INFO 10816 --- [eoutChecker_1_1] i.s.c.r.netty.NettyClientChannelManager : will connect to 192.168.8.118:8091
10-14 16:32:10:628 INFO 10816 --- [eoutChecker_1_1] i.s.core.rpc.netty.NettyPoolableFactory : NettyPool create channel to transactionRole:TMROLE,address:192.168.8.118:8091,msg:< RegisterTMRequest{applicationId='account-service', transactionServiceGroup='seata-demo'} >
10-14 16:32:10:649 INFO 10816 --- [eoutChecker_1_1] i.s.c.rpc.netty.TmNettyRemotingClient : register TM success. client version:1.4.2, server version:1.4.2,channel:[id: 0xa0e148c9, L:/192.168.8.118:65201 - R:/192.168.8.118:8091]
10-14 16:32:10:649 INFO 10816 --- [eoutChecker_1_1] i.s.core.rpc.netty.NettyPoolableFactory : register success, cost 12 ms, version:1.4.2,role:TMROLE,channel:[id: 0xa0e148c9, L:/192.168.8.118:65201 - R:/192.168.8.118:8091]
10-14 16:33:27:778 INFO 10816 --- [h_RMROLE_1_1_32] i.s.c.r.p.client.RmUndoLogProcessor : rm handle undo log process:UndoLogDeleteRequest{resourceId='deduct', saveDays=7, branchType=AT}
10-14 16:33:27:778 WARN 10816 --- [h_RMROLE_1_1_32] io.seata.rm.RMHandlerAT : Failed to get dataSourceProxy for delete undolog on deduct
10-14 16:45:30:628 INFO 10816 --- [eoutChecker_1_1] i.s.c.r.netty.NettyClientChannelManager : will connect to 192.168.8.118:8092
10-14 16:45:30:629 INFO 10816 --- [eoutChecker_1_1] i.s.core.rpc.netty.NettyPoolableFactory : NettyPool create channel to transactionRole:TMROLE,address:192.168.8.118:8092,msg:< RegisterTMRequest{applicationId='account-service', transactionServiceGroup='seata-demo'} >
10-14 16:45:30:636 INFO 10816 --- [eoutChecker_1_1] i.s.c.rpc.netty.TmNettyRemotingClient : register TM success. client version:1.4.2, server version:1.4.2,channel:[id: 0x5c2d7ddb, L:/192.168.8.118:59674 - R:/192.168.8.118:8092]
10-14 16:45:30:636 INFO 10816 --- [eoutChecker_1_1] i.s.core.rpc.netty.NettyPoolableFactory : register success, cost 5 ms, version:1.4.2,role:TMROLE,channel:[id: 0x5c2d7ddb, L:/192.168.8.118:59674 - R:/192.168.8.118:8092]
10-14 16:45:30:683 INFO 10816 --- [eoutChecker_2_1] i.s.c.r.netty.NettyClientChannelManager : will connect to 192.168.8.118:8092
10-14 16:45:30:683 INFO 10816 --- [eoutChecker_2_1] i.s.c.rpc.netty.RmNettyRemotingClient : RM will register :deduct,jdbc:mysql://tajia-mysql:33064/seata_demo
10-14 16:45:30:684 INFO 10816 --- [eoutChecker_2_1] i.s.core.rpc.netty.NettyPoolableFactory : NettyPool create channel to transactionRole:RMROLE,address:192.168.8.118:8092,msg:< RegisterRMRequest{resourceIds='deduct,jdbc:mysql://tajia-mysql:33064/seata_demo', applicationId='account-service', transactionServiceGroup='seata-demo'} >
10-14 16:45:30:697 INFO 10816 --- [eoutChecker_2_1] i.s.c.rpc.netty.RmNettyRemotingClient : register RM success. client version:1.4.2, server version:1.4.2,channel:[id: 0x82653d6a, L:/192.168.8.118:59675 - R:/192.168.8.118:8092]
10-14 16:45:30:698 INFO 10816 --- [eoutChecker_2_1] i.s.core.rpc.netty.NettyPoolableFactory : register success, cost 7 ms, version:1.4.2,role:RMROLE,channel:[id: 0x82653d6a, L:/192.168.8.118:59675 - R:/192.168.8.118:8092]
复制代码

 

端口8092的seata-server打印如下信息:

复制代码
16:30:31.541 INFO --- [ main] i.s.core.rpc.netty.NettyServerBootstrap : Server started, listen port: 8092
16:45:24.980 INFO --- [ttyServerNIOWorker_1_1_32] i.s.c.r.processor.server.RegTmProcessor : TM register success,message:RegisterTMRequest{applicationId='storage-service', transactionServiceGroup='seata-demo'},channel:[id: 0x4e4ca573, L:/192.168.8.118:8092 - R:/192.168.8.118:59664],client version:1.4.2
16:45:24.977 INFO --- [rverHandlerThread_1_1_500] i.s.c.r.processor.server.RegRmProcessor : RM register success,message:RegisterRMRequest{resourceIds='jdbc:mysql://tajia-mysql:33064/seata_demo', applicationId='storage-service', transactionServiceGroup='seata-demo'},channel:[id: 0x18202467, L:/192.168.8.118:8092 - R:/192.168.8.118:59665],client version:1.4.2
16:45:25.112 INFO --- [ttyServerNIOWorker_1_3_32] i.s.c.r.processor.server.RegTmProcessor : TM register success,message:RegisterTMRequest{applicationId='order-service', transactionServiceGroup='seata-demo'},channel:[id: 0x17661c36, L:/192.168.8.118:8092 - R:/192.168.8.118:59667],client version:1.4.2
16:45:25.177 INFO --- [rverHandlerThread_1_2_500] i.s.c.r.processor.server.RegRmProcessor : RM register success,message:RegisterRMRequest{resourceIds='jdbc:mysql://tajia-mysql:33064/seata_demo', applicationId='order-service', transactionServiceGroup='seata-demo'},channel:[id: 0x9a0e8269, L:/192.168.8.118:8092 - R:/192.168.8.118:59668],client version:1.4.2
16:45:30.635 INFO --- [ttyServerNIOWorker_1_5_32] i.s.c.r.processor.server.RegTmProcessor : TM register success,message:RegisterTMRequest{applicationId='account-service', transactionServiceGroup='seata-demo'},channel:[id: 0x02348d6e, L:/192.168.8.118:8092 - R:/192.168.8.118:59674],client version:1.4.2
16:45:30.696 INFO --- [rverHandlerThread_1_3_500] i.s.c.r.processor.server.RegRmProcessor : RM register success,message:RegisterRMRequest{resourceIds='deduct,jdbc:mysql://tajia-mysql:33064/seata_demo', applicationId='account-service', transactionServiceGroup='seata-demo'},channel:[id: 0xd07a4236, L:/192.168.8.118:8092 - R:/192.168.8.118:59675],client version:1.4.2
复制代码

 

posted on   Ruthless  阅读(1063)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
历史上的今天:
2020-10-14 windows环境下elasticsearch安装教程(超详细)
2019-10-14 MySQL5.8下载及安装——免安装版
2018-10-14 Turbine——Hystrix集群监控
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示