seata的部署与微服务集成(包含多集群异地容灾配置)
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的部署与微服务集成(包含多集群异地容灾配置)相关推荐
- 从单机架构------》到现在复杂的微服务,分布式,集群,云平台途中是遇到了什么问题,又如何解决的?
本文转载地址服务端高并发分布式架构演进之路 写的很清楚,全面,顺序的话,肯定不是完全正确,如Docker,redis 等 但不重要,过程就是这莫个过程,根据公司业务不同,架构演变自然不同.转载记录一 ...
- 什么是微服务?分布式和集群又是什么?
什么是微服务? 微服务(Microservice Architecture)是架构设计方式的一种. 简单来说就是将传统的一站式应用,根据业务拆分成一个一个的服务, 每一个微服务提供单个业务功能的服务, ...
- dubbo k8s 服务发现_将Dubbo微服务迁移到k8s集群环境中前的思考与落地
将Dubbo微服务迁移到k8s中的思考与落地 说到容器化,不得不提kubernetes这个集群编排系统,它是一个开源系统,用于容器化应用的自动部署.扩缩和管理. Kubernetes 将构成应用的容器 ...
- nginx工作笔记005---nginx配置负载均衡_在微服务中实现网关集群_实现TCP传输层协议__http协议的负载均衡
技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 我们在微服务中,由于网关的存在,后来,在nginx中都不需要在配置其他服务的地址了,只需要,配置一 ...
- 【微服务】搭建Consul集群服务和Consul配置中心
文章目录 一.传统配置文件的弊端 二.微服务配置中心 三.主流的配置中心 四.Consul 配置操作 1.添加配置信息 2.获取配置信息 五.单点服务器Consul集群 一.传统配置文件的弊端 静态化 ...
- 基于docker部署的微服务架构(九): 分布式服务追踪 Spring Cloud Sleuth
为什么80%的码农都做不了架构师?>>> 前言 微服务架构中完成一项功能经常会在多个服务之间远程调用(RPC),形成调用链.每个服务节点可能在不同的机器上甚至是不同的集群上,需 ...
- 基于JBoss Fuse 6.2的JBoss BPM微服务集成指南
今年年初,我们宣布了JBoss BPM Suite令人兴奋的示例项目,该项目围绕一个正在运行的在线Travel Agency项目展开. 最初是利用Web服务,后来我们在JBoss Fuse的帮助下迁移 ...
- Docker实战-部署GPE微服务的监控体系(二)
前言 上篇文章:我们介绍了GPE体系中,grafana的部署和安装(<Docker实战-部署GPE微服务的监控体系>),今天这个文章,我们继续介绍GPE体系中,Prometheus和Exp ...
- 微服务集成SkyWalking
title: 微服务集成SkyWalking date: 2019-11-24 09:59:21 categories: 微服务 tags: SkyWalking 最近做的一个项目使用了Spring ...
最新文章
- 安装MindStudio
- 从FTP服务器进行文件的上传和下载
- Python爬虫之旅_TWO
- 机器学习中一阶段网络是啥_机器学习项目的各个阶段
- 7天减排超万吨 特斯拉十一出行报告带来纯电出行全新视角
- opengl png图片 qt_QT中使用OpenGL绘图
- dumpsys使用方法
- 用python实现的仿真程序_如何实现疫情扩散仿真程序?
- MSP430项目设计:2020年TI杯大学生电子设计竞赛 坡道行驶电动小车(C题)循迹小车(分享项目展示视频与源码)
- 淘宝小程序开发注意点
- python定义矩形类_Python3面向对象—点和矩形类
- linux 跨平台查询 lxr,利用LXR来生成Linux内核代码的交叉索引页面
- skywalking本地配置探针 打TID
- 快递鸟代收货款接口demo-order
- OpenType字库文件
- 关于IOS delegate的weak和assign 探讨
- golang中获取字符串长度的办法
- to_date的用法
- 移动端SEO该如何做?--甲由科技
- 教学论文计算机,计算机教学论文
热门文章
- WPF遍历视觉树与逻辑树
- Spring Data JDBC、引用和聚合
- 初中不读学计算机难吗,为什么初中生更加适合学习计算机编程?
- 入职地府后我成了人生赢家_129、新鬼入职|入职地府后我成了人生赢家|入职地府后我成了人生赢家章节阅读-龙族小说网...
- 今日总结------技术是最不值钱的
- 抽象代数 04.01 群的生成元组
- iOS 直播流程概述
- 直播间搭建实现iOS直播聊天消息界面
- android跳转qq群代码,Android app 跳 QQ 群界面
- Maya根据模型建立乐高模型