美文网首页
阿里云企业级互联网架构实践系列(4)

阿里云企业级互联网架构实践系列(4)

作者: 技术与健康 | 来源:发表于2020-08-06 10:35 被阅读0次

一、 GTS产品概述

二、 GTS常见问题

1.专有云环境下,默认事务分组default/default_8092 无法识别。

一般出现此问题原因为:EDAS和GTS在两个集群,EDAS的diamond列表找不到GTS的gts diamond ip,需要手动添加。如果部署在同一集群则不需要这么做。

排查方式:

1. 先获取edas 使用diamond的ip列表

curl "[http://jmenv.tbsite.net:8080/diamond-server/diamond](http://jmenv.tbsite.net:8080/diamond-server/diamond)"

2. 获取gts使用的diamond 的ip列表

curl "[http://jmenv.tbsite.net:8080/diamond-server/diamond](http://jmenv.tbsite.net:8080/diamond-server/diamond)"

3. 查询是否存在配置项com.taobao.txc.jvm.opts

curl "[http://edas-diamond-id:8080/diamond-server/config.co?dataId=com.taobao.txc.jvm.opts&group=TXC_GROUP](http://edas-diamond-id:8080/diamond-server/config.co?dataId=com.taobao.txc.jvm.opts&group=TXC_GROUP)"

4. 不存在就需要添加配置项

在edas节点运行(将ip列表替换为gts使用的diamond ip列表)

curl "[http://edas-diamond-ip:8080/diamond-server/basestone.do?method=syncUpdateAll](http://edas-diamond-ip:8080/diamond-server/basestone.do?method=syncUpdateAll)" -d "dataId=com.taobao.txc.jvm.opts&group=TXC_GROUP&content=-Ddiamond.txc.server.ip=192.168.81.48,192.168.81.46,192.168.81.47 -Ddiamond.txc.server.port=8080"

2. 多个TXC服务注册到edas上,其中一个可以使用,另一个TXC注册失效

解决方案:需要为txc指定appname以进行区分,appname可以为不重复的任意字符串,建议以服务名命名。

3.内网开发环境无法连接txc,找不到diamond

解决方案:启动参数加

-Ddiamond.txc.server.ip=20.20.196.39 -Ddiamond.txc.server.port=8080

4.使用GTS后,数据库数据已更新,却无法回滚。

排查方案:

  1. 检查数据源类型,如使用GTS必须使用以下数据源类型

spring.datasource.type=com.taobao.txc.datasource.cobar.TxcDataSource

  1. 注解是否使用正确 @TxcTransaction

  2. 包含注解@TxcTransaction方法所在的类是否已加载以bean方式加载。

5.使用GTS后,操作数据库时报txc_undo_log表不存在

解决方案:

除drds数据库外,其他支持GTS的数据库使用GTS前需手动创建txc_undo_log表。建表语句参考附节。

6.MQ使用GTS后显示发送成功,却无法在MQ后台查询到。

解决方案:MQ使用GTS发送消息,需要声明TxcMQProducer,如下

@Autowired

TxcMQProducer txcMQProducer;

7.开发或运维中遇到问题,希望排查GTS全局事务,请问GTS的日志记录在哪儿, 怎么查看 GTS 日志?

GTS的事务日志名称为txcXXXX.log,其中XXXX为GTS客户端进程的进程号, 其路径为:{user.home}/logs/txcXXXX.log,其中{user.home}为启动 GTS 客 户端的用户账户的根目录

8.找不到逻辑组系统报错****can't fetch real group name from diamond!vgroup_mapping_default

排查方案:

导致该异常一般有5种可能性:

 1 应用当前环境连接的diamond和gts使用的不是同一套diamond。

 2 gts服务端启动失败导致gts的物理组注册失败。

 3 当前环境连不通gts的服务器。

 4  当前不存在default的事务逻辑分组。

5.txc server没有开启

8.1 当前环境和gts访问的不是同一套diamond

8.1.1 定位方法:

        在当前环境和gts服务器的任意一个节点运行命令:

                 curl  "http://jmenv.tbsite.net:8080/diamond-server/diamond"

       该命令会返回一个ip地址列表。如果在两条机器上运行该命令返回的ip地址列表不同,则确定当前环境和gts使用的不是同一套diamond。该问题常见与edas应用,一般edas和gts会使用两套独立的diamond。

8.1.2 解决方式

在当前环境的diamond中添加配置项com.taobao.txc.jvm.opts
1) 先获取edas 使用diamond的ip列表。
在报错节点运行命令:

 curl  "http://jmenv.tbsite.net:8080/diamond-server/diamond"

2)获取gts服务使用的diamond的ip列表
在任意gts服务节点运行命令:

 curl  "http://jmenv.tbsite.net:8080/diamond-server/diamond"

3)添加配置项com.taobao.txc.jvm.opts到报错节点所在diamond环境
在报错节点运行命令:

curl "http://$edas-diamond-ip:8080/diamond-server/basestone.do?method=syncUpdateAll" -d "dataId=com.taobao.txc.jvm.opts&group=TXC_GROUP&content=-Ddiamond.txc.server.ip=$edas-diamond-iplist  -Ddiamond.txc.server.port=8080" 

命令实例:

curl "http://192.168.21.29:8080/diamond-server/basestone.do?method=syncUpdateAll" -d "dataId=com.taobao.txc.jvm.opts&group=TXC_GROUP&content=-Ddiamond.txc.server.ip=192.168.81.48,192.168.81.46,192.168.81.47 -Ddiamond.txc.server.port=8080"

4)查询 com.taobao.txc.jvm.opts

curl "http://edas-diamond-id:8080/diamond-server/config.co?dataId=com.taobao.txc.jvm.opts&group=TXC_GROUP"

8.2 gts服务端启动失败导致gts的物理组注册失败
8.2.1 问题定位
登陆三台gts的服务器,运行 ps -elf|grep txc,查询txc的进程是否在运行。如果查询不到txc的进程说明gts服务端启动失败。如果三台节点txc的进程都在 一般情况下gts是正常运行的。也不排斥gts进程在单注册失败的情况,这个时候需要通过查看日志进一步确定。日志位置:/home/admin/logs/txc或者/root/logs/txc。

8.2.2 问题解决
启动gts服务

8.3 当前环境连不通gts的服务器

8.3.1 问题定位
在vpc环境下经常会出现vpc机器与gts 服务不同的情况,可以通过ping命令测试

8.3.1 问题解决

如果ping不同说明当前节点和gts服务器无法联通,需要将起联通。

8.4 当前不存在default的事务逻辑分组

8.4.1 问题定位
1)查询diamond地址

curl  "http://jmenv.tbsite.net:8080/diamond-server/diamond"

2)查询逻辑组是否存在

 curl "http://diamond-ip:8080/diamond-server/config.co?dataId=vgroup_mapping_default&group=TXC_GROUP"

8.4.2 问题解决
添加事务逻辑分组映射,运行命令

curl "http://diamond-ip:8080/diamond-server/basestone.do?method=syncUpdateAll" -d "dataId=vgroup_mapping_default&group=TXC_GROUP&content=$rgoupname" 
 $rgoupname需要向管理员获取,专有云环境下一般是default

8.5查看txc server进程是否启动 ps -ef|grep 8091 如果没有需要重启txc server容器。

## **Oracle数据库建****txc_undo_log****表语句:**

--oracle建表语句

CREATE TABLE txc_undo_log (

  id number(20) NOT NULL,

  gmt_create date NOT NULL,

  gmt_modified date NOT NULL,

  xid varchar(100) NOT NULL,

  branch_id number(20) NOT NULL,

  rollback_info blob NOT NULL,

  status number(11) NOT NULL,

  server varchar(32) NOT NULL,

  PRIMARY KEY  (id)

);

alter table txc_undo_log add constraint txc_undo_log_unionkey unique(xid, branch_id);

## **Mysql****数据库建****txc_undo_log****表语句:**

CREATE TABLE `txc_undo_log` (

  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',

  `gmt_create` datetime NOT NULL COMMENT '创建时间',

  `gmt_modified` datetime NOT NULL COMMENT '修改时间',

  `xid` varchar(100) NOT NULL COMMENT '全局事务ID',

  `branch_id` bigint(20) NOT NULL COMMENT '分支事务ID',

  `rollback_info` longblob NOT NULL COMMENT 'LOG',

  `status` int(11) NOT NULL COMMENT '状态',

  `server` varchar(32) NOT NULL COMMENT '分支所在DB IP',

  PRIMARY KEY (`id`),

  KEY `unionkey` (`xid`,`branch_id`)

) ENGINE=InnoDB AUTO_INCREMENT=211225994 DEFAULT CHARSET=utf8 COMMENT='事务日志表';

相关文章

网友评论

      本文标题:阿里云企业级互联网架构实践系列(4)

      本文链接:https://www.haomeiwen.com/subject/reharktx.html