问题描述
事务回滚失败,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
日志详见附件:
期待结果
正常应该回滚成功
复制回顾
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:
环境信息
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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。