seata的部署与微服务集成

  • 一、部署Seata的tc-server
    • 1.下载与安装
    • 2.配置文件详细讲解
    • 3.创建数据库表
    • 4.启动
  • 二、微服务集成seata
    • 1.引入依赖
    • 2.修改配置文件
    • 3.启动服务
  • 三、TC服务的高可用和异地容灾
    • 1.TC的异地多机房容灾架构
    • 2.多集群的配置与切换
      • 1.多集群的配置
      • 2.将事务组映射配置到nacos
      • 3.微服务读取nacos配置
    • 3.测试切换集群

一、部署Seata的tc-server

1.下载与安装

首先我们要下载seata-server包,地址在https://seata.io/zh-cn/blog/download.html

在非中文目录解压下载下来的zip包,其目录结构如下:

接下来,我们要修改他的配置

2.配置文件详细讲解

conf下的registry.conf

我们打开这个文件,其实里面整体就包括两个部分,一个是registry,一个是config

我们先展示registry里面的内容,顾名思义,registry代表着注册的意思。

这里我选择的还是我比较熟悉的nacos注册中心。(其他的也是可以的,大家可以选择自己熟悉的)所以我修改好的配置文件如下:

配置config: 其实就是我们上面注册到nacos上的seata-tc-server服务的配置文件。

因为上面我们配置文件在nacos中还没有,所以我们需要去Nacos中添加配置文件。

配置内容如下:

# 数据存储方式,db代表数据库
store.mode=db
store.db.datasource=druid
store.db.dbType=mysql
store.db.driverClassName=com.mysql.jdbc.Driver
store.db.url=jdbc:mysql://127.0.0.1:3306/seata?useUnicode=true&rewriteBatchedStatements=true
store.db.user=root
store.db.password=123456
store.db.minConn=5
store.db.maxConn=30
store.db.globalTable=global_table
store.db.branchTable=branch_table
store.db.queryLimit=100
store.db.lockTable=lock_table
store.db.maxWait=5000
# 事务、日志等配置
server.recovery.committingRetryPeriod=1000
server.recovery.asynCommittingRetryPeriod=1000
server.recovery.rollbackingRetryPeriod=1000
server.recovery.timeoutRetryPeriod=1000
server.maxCommitRetryTimeout=-1
server.maxRollbackRetryTimeout=-1
server.rollbackRetryTimeoutUnlockEnable=false
server.undo.logSaveDays=7
server.undo.logDeletePeriod=86400000# 客户端与服务端传输方式
transport.serialization=seata
transport.compressor=none
# 关闭metrics功能,提高性能
metrics.enabled=false
metrics.registryType=compact
metrics.exporterList=prometheus
metrics.exporterPrometheusPort=9898

其中的数据库地址、用户名、密码都需要修改成你自己的数据库信息。

3.创建数据库表

特别注意:tc服务在管理分布式事务时,需要记录事务相关数据到数据库中,你需要提前创建好这些表。分别为分支事务表,全局事务表

mysql语句,注意要在你配置文件里配好的数据库里执行。


SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- 分支事务表
-- ----------------------------
DROP TABLE IF EXISTS `branch_table`;
CREATE TABLE `branch_table`  (`branch_id` bigint(20) NOT NULL,`xid` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`transaction_id` bigint(20) NULL DEFAULT NULL,`resource_group_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`resource_id` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`branch_type` varchar(8) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`status` tinyint(4) NULL DEFAULT NULL,`client_id` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`application_data` varchar(2000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`gmt_create` datetime(6) NULL DEFAULT NULL,`gmt_modified` datetime(6) NULL DEFAULT NULL,PRIMARY KEY (`branch_id`) USING BTREE,INDEX `idx_xid`(`xid`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;-- ----------------------------
-- 全局事务表
-- ----------------------------
DROP TABLE IF EXISTS `global_table`;
CREATE TABLE `global_table`  (`xid` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`transaction_id` bigint(20) NULL DEFAULT NULL,`status` tinyint(4) NOT NULL,`application_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`transaction_service_group` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`transaction_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`timeout` int(11) NULL DEFAULT NULL,`begin_time` bigint(20) NULL DEFAULT NULL,`application_data` varchar(2000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`gmt_create` datetime NULL DEFAULT NULL,`gmt_modified` datetime NULL DEFAULT NULL,PRIMARY KEY (`xid`) USING BTREE,INDEX `idx_gmt_modified_status`(`gmt_modified`, `status`) USING BTREE,INDEX `idx_transaction_id`(`transaction_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;SET FOREIGN_KEY_CHECKS = 1;

到现在为止,我们所有的准备工作已经完成。可以开始启动服务了。

4.启动

进入bin目录,运行其中的seata-server.bat即可:

启动成功后,seata-server应该已经注册到nacos注册中心了。

打开浏览器,访问nacos地址:http://localhost:8848,然后进入服务列表页面,可以看到seata-tc-server的信息:

这样我们的TC服务就搭建并启动好了

二、微服务集成seata

1.引入依赖

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-seata</artifactId><exclusions><!--版本较低,1.3.0,因此排除--><exclusion><artifactId>seata-spring-boot-starter</artifactId><groupId>io.seata</groupId></exclusion></exclusions>
</dependency>
<!--seata starter 采用1.4.2版本-->
<dependency><groupId>io.seata</groupId><artifactId>seata-spring-boot-starter</artifactId><version>${seata.version}</version>
</dependency>

我这里version引用的是夫工程里面配置好的版本信息

2.修改配置文件

seata:registry: # TC服务注册中心的配置,微服务根据这些信息去注册中心获取tc服务地址# 参考tc服务自己的registry.conf中的配置(文章中的第一节的第2步)type: nacosnacos: # tcserver-addr: 127.0.0.1:8848namespace: ""group: DEFAULT_GROUPapplication: seata-tc-server # tc服务在nacos中的服务名称username: nacospassword: nacostx-service-group: seata-demo # 事务组,根据这个获取tc服务的cluster名称service:vgroup-mapping: # 事务组与TC服务cluster的映射关系seata-demo: SH

其中的集群,我们得通过事务组得映射关系来配置。也就是配置文件中得tx-service-group(事务组),vgroup-mapping(映射关系),通过事务组找到对应得集群地址。这里我配置得是seata-demo事务组,对应集群SH。

3.启动服务

这里我是创建了一个seata-demo的工程,里面分别写了三个服务,一个订单服务,一个库存服务,一个余额服务。关于分布式事务的知识点,我会梳理到另一篇文章。想了解的小伙伴,可以点击分布式事务(基于Seata解决分布式事务的四种模式)这里只是演示一下,启动服务后的状态。我是在order-service上引入依赖以及修改配置文件(要做分布式,则这三个都要做一样的步骤:1.引入依赖,2.修改配置)

当我们完成了依赖的引入,以及配置文件的修改,我们启动order-service服务。这时候,我们可以查看seata-tc-service服务的窗口:

这样我们的微服务集成seata就完成了。

三、TC服务的高可用和异地容灾

1.TC的异地多机房容灾架构

TC服务作为Seata的核心服务,一定要保证高可用与异地容灾。

高可用我们可以通过配置集群来达到效果,而异地容灾,我们就需要通过多集群来达到效果。比如在上海配置一个集群,杭州也配置一个集群。如图:

如果上海的集群全没用了,或者被意外销毁了。我们只需要将微服务的配置文件中的集群进行修改即可。(这个是需要重启服务的办法)

不需要重启服务的办法,则是将这段配置,配置到nacos的配置中心上,到时候,我们只需要进行修改nacos的配置,而在微服务中只需要配置读取nacos中的事务组映射配置,从而不用重启服务也可以切换集群,实现热更新。

接下来,我来演示搭建多集群以及更换集群。方法用的是nacos的热更新。

2.多集群的配置与切换

1.多集群的配置

首先我们准备两个seata,配置文件跟上面部署tc-server一样,seata2不一样的地方在于他的集群配置的是在HZ

我们分别进入他们的bin目录,执行他们的seata-server.bat文件,就完成了启动。

这里要注意的是,启动第二个服务的时候,要修改端口号启动,不然会端口冲突

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

seata-server.bat -p 8092

启动完成后,打开nacos控制台,查看服务列表:

点击操作列表里面的详情,我们就能看到集群状态:

2.将事务组映射配置到nacos

现在我们还需要将事务组映射配置到nacos,这样,在微服务中只需要配置读取nacos中的事务组映射配置,从而不用重启服务也可以切换集群,实现热更新。

选择新建配置

**注意要选择properties类型

配置的内容如下:

# 事务组映射关系
service.vgroupMapping.seata-demo=SHservice.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

3.微服务读取nacos配置

我们只需要将一开始在微服务上配置的事务组映射关系,换成读取nacos配置即可,如图:

3.测试切换集群

这样我们就配置好了。只需要重启服务。

我们启动服务后,查看控制后台,可以发现。默认配置的SH集群(8091端口)的连接上了。

然后这个时候,我们不用重启服务,直接去nacos中,修改client.properties配置文件

这时候,我把8091端口的服务停止掉(SH集群)。

这时候我们检查我们启动的order-service服务的控制台日志。可以发现,他连接到8092端口的集群,并且不用重启服务就可以切换集群。

恭喜,这样说明我们就已经成功啦!!!

seata的部署与微服务集成(包含多集群异地容灾配置)相关推荐

  1. 从单机架构------》到现在复杂的微服务,分布式,集群,云平台途中是遇到了什么问题,又如何解决的?

    本文转载地址服务端高并发分布式架构演进之路  写的很清楚,全面,顺序的话,肯定不是完全正确,如Docker,redis 等 但不重要,过程就是这莫个过程,根据公司业务不同,架构演变自然不同.转载记录一 ...

  2. 什么是微服务?分布式和集群又是什么?

    什么是微服务? 微服务(Microservice Architecture)是架构设计方式的一种. 简单来说就是将传统的一站式应用,根据业务拆分成一个一个的服务, 每一个微服务提供单个业务功能的服务, ...

  3. dubbo k8s 服务发现_将Dubbo微服务迁移到k8s集群环境中前的思考与落地

    将Dubbo微服务迁移到k8s中的思考与落地 说到容器化,不得不提kubernetes这个集群编排系统,它是一个开源系统,用于容器化应用的自动部署.扩缩和管理. Kubernetes 将构成应用的容器 ...

  4. nginx工作笔记005---nginx配置负载均衡_在微服务中实现网关集群_实现TCP传输层协议__http协议的负载均衡

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 我们在微服务中,由于网关的存在,后来,在nginx中都不需要在配置其他服务的地址了,只需要,配置一 ...

  5. 【微服务】搭建Consul集群服务和Consul配置中心

    文章目录 一.传统配置文件的弊端 二.微服务配置中心 三.主流的配置中心 四.Consul 配置操作 1.添加配置信息 2.获取配置信息 五.单点服务器Consul集群 一.传统配置文件的弊端 静态化 ...

  6. 基于docker部署的微服务架构(九): 分布式服务追踪 Spring Cloud Sleuth

    为什么80%的码农都做不了架构师?>>>    前言 微服务架构中完成一项功能经常会在多个服务之间远程调用(RPC),形成调用链.每个服务节点可能在不同的机器上甚至是不同的集群上,需 ...

  7. 基于JBoss Fuse 6.2的JBoss BPM微服务集成指南

    今年年初,我们宣布了JBoss BPM Suite令人兴奋的示例项目,该项目围绕一个正在运行的在线Travel Agency项目展开. 最初是利用Web服务,后来我们在JBoss Fuse的帮助下迁移 ...

  8. Docker实战-部署GPE微服务的监控体系(二)

    前言 上篇文章:我们介绍了GPE体系中,grafana的部署和安装(<Docker实战-部署GPE微服务的监控体系>),今天这个文章,我们继续介绍GPE体系中,Prometheus和Exp ...

  9. 微服务集成SkyWalking

    title: 微服务集成SkyWalking date: 2019-11-24 09:59:21 categories: 微服务 tags: SkyWalking 最近做的一个项目使用了Spring ...

最新文章

  1. 安装MindStudio
  2. 从FTP服务器进行文件的上传和下载
  3. Python爬虫之旅_TWO
  4. 机器学习中一阶段网络是啥_机器学习项目的各个阶段
  5. 7天减排超万吨 特斯拉十一出行报告带来纯电出行全新视角
  6. opengl png图片 qt_QT中使用OpenGL绘图
  7. dumpsys使用方法
  8. 用python实现的仿真程序_如何实现疫情扩散仿真程序?
  9. MSP430项目设计:2020年TI杯大学生电子设计竞赛 坡道行驶电动小车(C题)循迹小车(分享项目展示视频与源码)
  10. 淘宝小程序开发注意点
  11. python定义矩形类_Python3面向对象—点和矩形类
  12. linux 跨平台查询 lxr,利用LXR来生成Linux内核代码的交叉索引页面
  13. skywalking本地配置探针 打TID
  14. 快递鸟代收货款接口demo-order
  15. OpenType字库文件
  16. 关于IOS delegate的weak和assign 探讨
  17. golang中获取字符串长度的办法
  18. to_date的用法
  19. 移动端SEO该如何做?--甲由科技
  20. 教学论文计算机,计算机教学论文

热门文章

  1. WPF遍历视觉树与逻辑树
  2. Spring Data JDBC、引用和聚合
  3. 初中不读学计算机难吗,为什么初中生更加适合学习计算机编程?
  4. 入职地府后我成了人生赢家_129、新鬼入职|入职地府后我成了人生赢家|入职地府后我成了人生赢家章节阅读-龙族小说网...
  5. 今日总结------技术是最不值钱的
  6. 抽象代数 04.01 群的生成元组
  7. iOS 直播流程概述
  8. 直播间搭建实现iOS直播聊天消息界面
  9. android跳转qq群代码,Android app 跳 QQ 群界面
  10. Maya根据模型建立乐高模型