cetus/doc/cetus-xa.md
2019-02-28 16:09:08 +08:00

2.6 KiB
Raw Blame History

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中如下
CONFIG = {"logs": "/data/cetus/xa_suspension_logs/xa-suspension.log",
          "backend": "/home/mysql-cetus/cetus_install/conf/cetus.conf",
          "user": "/home/mysql-cetus/cetus_install/conf/users.json",
          "temp_file": "/data/cetus/xa_suspension_logs/"
         }
  • 启动将xa悬挂处理工具设置为可执行文件并在后台运行指令如下
chmod +x xa-suspension.py
nohup ./xa-suspension.py &

注意事项

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