Cetus xa悬挂处理工具

简介

中间件Cetus处理分布式事务可能会由于网络、节点错误而中断,导致xa事务悬挂。Cetus xa悬挂处理工具是由python语言开发的,主要是在Cetus遇到分布式事务悬挂时自动处理悬挂事务的修复工具。

原理

该工具主要包括悬挂事务查找模块和悬挂事务处理模块。其中悬挂事务查找模块是通过读取MySQL中xa recover的结果,获取长时间处于悬挂的事务xid列表,将所有后端的xa悬挂事务对应的xid汇总并去重,再读取后端binlog日志的内容获得所有后端xa悬挂事务的xid对应的最终状态;悬挂事务处理模块主要是根据悬挂事务查找模块获取的最终状态,对悬挂事务进行简单的处理,即当悬挂事务的最终状态为PREPARE、ROLLBACK、END或START时进行回滚操作,当悬挂事务的最终状态为COMMIT时进行提交操作。

安装启动步骤

安装依赖

  • python

  • python需要的模块Pool

  • python需要的模块MySQLdb

请确保在使用Cetus xa悬挂处理工具前已安装好相应的依赖。

启动步骤

  • 配置:将xa悬挂处理工具记录的日志路径、Cetus的启动配置文件路径、Cetus的用户设置文件和临时文件的存放路径等信息填入xa悬挂处理工具前部的CONFIG中,如下:
  1. CONFIG = {"logs": "/data/cetus/xa_suspension_logs/xa-suspension.log",
  2. "backend": "/home/mysql-cetus/cetus_install/conf/cetus.conf",
  3. "user": "/home/mysql-cetus/cetus_install/conf/users.json",
  4. "temp_file": "/data/cetus/xa_suspension_logs/"
  5. }
  • 启动:将xa悬挂处理工具设置为可执行文件,并在后台运行,指令如下:
  1. chmod +x xa-suspension.py
  2. nohup ./xa-suspension.py &

注意事项

  • 由于该工具主要是结合Cetus软件处理xa悬挂事务的,因此请确保使用该工具前已运行Cetus。
  • 由于该工具主要是针对当天的悬挂事务进行处理,若需要在开启Cetus软件的同时处理悬挂事务,请确保及时开启该工具。
  • 要确保cetus服务器和MySQL服务器的时间是同步的,且在同一个时区。
  • 如果cetus端和MySQL端连接需要采用保活机制,请在cetus端的tcp层面设置keepalive,MySQL请不要设置,否则会出现网络隔离情况下数据不一致的情况。
  • 一旦cetus所在的网络和MySQL的网络相隔离(互相不通),悬挂事务处理工具已经无法去rollback悬挂事务,请关闭悬挂事务处理工具,并杀死MySQL端的僵死线程或者重启MySQL,然后根据cetus的xa log来xa rollback MySQL的悬挂事务。