开发者社区 > 云原生 > 正文

事务回滚失败,mysql 使用 loadbalance 进行mysql 负载均衡,RM 调用发起回滚

问题描述

事务回滚失败,mysql 使用 loadbalance 进行mysql 负载均衡,RM 调用发起回滚执行异常

发生的情况

微服务,基础框架:SpringCloud Alibaba 2021.1、数据连接池:Hikari(Druid 也不行),数据库mysql-cluster 8.0 版本,部署了 2个MYSQL 节点 2个 NDB节点,2个MGM管理节点,使用 Seata 作为分布式事务管理 数据库连接:jdbc:mysql:loadbalance://192.168.100.50:3306,192.168.100.51:3306/pinecone-cloud?roundRobinLoadBalance=true&rewriteBatchedStatements=true&allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false

Bug发生经过: 客户端 -> 网关 -> A服务(事务发起者 TM) -> B服务(事务参与者 TC)抛出异常,A事务发起回滚,RM执行发起回滚,执行异常回滚 异常内容:io.seata.core.exception.TransactionException: java.lang.RuntimeException: rm client is not connected. dbkey:jdbc:mysql:loadbalance://192.168.100.50:3306,192.168.100.51:3306/pinecone-cloud,clientId:pinecone-system:192.168.100.221:58865

日志详见附件:

seata-server.9200.all.log

期待结果

正常应该回滚成功

复制回顾

1、Seata 驱动:mysql-connector-java-8.0.19.jar

2、微服务数据库驱动:com.mysql.cj.jdbc.Driver

3、多MySQL节点,数据库连接使用 loadbalance 负载均衡

其他信息

如果换成单mysql 连接就可以 例如:jdbc:mysql://192.168.100.50:3306/pinecone-cloud?rewriteBatchedStatements=true&allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false (已测试,执行正常) 数据库表引擎为 ndb:

提问17.png

提问18.png

环境信息

JDK version : Jdk8 1.8.0_202 Seata version: Seata 1.4.2 OS : Windows 10 DataBase: mysql-cluster 8.0 ( Linux CentOS 7.6、Docker 部署) Others: Nacos 2.0.3 作为注册、配置中心

原提问者GitHub用户ChenXueSong99

展开
收起
学习娃 2023-06-14 17:03:29 110 0
1 条回答
写回答
取消 提交回答
  • 1.4.2不兼容mysql-cluster的连接串,后续修复一下

    原回答者GitHub用户a364176773

    2023-06-14 17:31:40
    赞同 展开评论 打赏

阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。

相关电子书

更多
One Box: 解读事务与分析一体化数据库 HybridDB for MySQL 立即下载
One Box:解读事务与分析一体化数据库HybridDB for MySQL 立即下载
如何支撑HTAP场景-HybridDB for MySQL系统架构和技术演进 立即下载

相关镜像