dromara / raincat

强一致分布式事务框架
https://dromara.org/
GNU Lesser General Public License v3.0
1.91k stars 663 forks source link

解决极端情况下TxManager故障转移失败的问题 #46

Closed 0000005 closed 5 years ago

0000005 commented 5 years ago

问题描述:

假设TxManager突然死机(用kill -9来模拟),该主机的下线无法及时通知集群中的所有机器。但是参与者的netty确实及时感知到了与TxManager的断链,于是开始使用doConnect来试图重新建立新的链接。doConnect中有一些流程,其中一个子流程需要获取所有TxManager的具体信息(为了获取连接数最多的服务,想要把所有的业务长连接,连接到同一个tm,但是又不能超过最大的连接)。但是因为TxManager突然死机没有通知到其他机器,所以此时调用死机的哪个TxManager获取信息,是调不通的,会有异常。 整个doConnect会失败。所有的分布式事务会瘫痪。

解决办法:

如果获取那个TxManager失败,则将他剔除。

0000005 commented 5 years ago

不合并吗,这个是确实有bug