zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    爬虫(4)_代码分析
    python(32)——【shelve模块】【xml模块】
    python(31)——【sys模块】【json模块 & pickle模块】
    python(30)——【random模块】【if __name__ =='__main__'】【os模块】
    机器学习与Tensorflow(7)——tf.train.Saver()、inception-v3的应用
    机器学习与Tensorflow(6)——LSTM的Tensorflow实现、Tensorboard简单实现、CNN应用
    机器学习与Tensorflow(5)——循环神经网络、长短时记忆网络
    机器学习与Tensorflow(4)——卷积神经网络与tensorflow实现
    机器学习与Tensorflow(3)—— 机器学习及MNIST数据集分类优化
    机器学习与Tensorflow(2)——神经网络及Tensorflow实现
  • 原文地址:https://www.cnblogs.com/linjiqin/p/15407386.html
Copyright © 2011-2022 走看看