10.8. 事务恢复


恢复是 XA 事务的一个功能,它处理资源的最终性,甚至是事务管理器失败,并从这种情况进行相应的恢复。

10.8.1. 何时使用恢复

考虑一个分布式交易,其中资金从存储在外部数据库中的帐户转移到 Data Grid 中存储的帐户。当调用 TransactionManager.commit () 时,两个资源都会成功准备(1st 阶段)。在提交(2nd)阶段,数据库在从事务管理器接收提交请求前成功应用更改 whilst Data Grid 失败。此时系统处于不一致的状态:从外部数据库中的帐户获得资金,但还没有在 Data Grid (因为锁定仅在双阶段提交协议的 2nd 阶段发布)。恢复处理这种情况,以确保数据库和数据网格都处于一致状态。

10.8.2. 它如何工作

恢复由事务管理器协调。事务管理器与 Data Grid 合作,以确定需要人工干预并告知系统管理员(通过电子邮件、日志警报等)的异常事务列表。这个过程是特定于事务管理器的,但通常需要在事务管理器中进行一些配置。  

知道 in-doubt 事务 ID,系统管理员现在可以连接到 Data Grid 集群,并重播事务提交或强制回滚。Data Grid 提供 JMX 工具 - 这在 Transaction recovery and reconciliation 部分中进行了广泛阐述。

10.8.3. 配置恢复   

Data Grid 中不默认启用恢复。如果禁用,TransactionManager 将无法与 Data Grid 一起使用,以确定 in-doubt 事务。Transaction configuration 部分演示了如何启用它。

注意: recovery-cache 属性不是强制的,它被配置为每个缓存。

注意

若要恢复工作,必须将 mode 设置为 FULL_XA,因为需要全线 XA 事务。

10.8.3.1. 启用 JMX 支持

为了可以使用 JMX 管理恢复支持,必须明确启用。

10.8.4. 恢复缓存

为了跟踪新的交易并能够回复它们,数据网格会缓存所有事务,供未来使用。这个状态仅为 in-doubt 事务保存,在提交/滚动阶段完成后,会删除成功完成事务。

这种不疑的交易数据保存在本地缓存中:这样,在它太大时,可以通过缓存加载程序将这些信息交换到磁盘。此缓存可以通过 recovery-cache 配置属性指定。如果没有指定 Data Grid,则会为您配置本地缓存。

(尽管强制)可以在启用了恢复的所有 Data Grid 缓存之间共享相同的恢复缓存。如果覆盖默认恢复缓存,则指定的恢复缓存必须使用 TransactionManagerLookup,它返回一个与缓存本身所使用的不同的事务管理器。

10.8.5. 与事务管理器集成

虽然这是特定于事务管理器的,但通常需要一个事务管理器对 XAResource 实现的引用,才能在其上调用 XAResource.recover ()。要获得对 Data Grid XAResource 的引用,可以使用以下 API:

XAResource xar = cache.getAdvancedCache().getXAResource();

常见做法是在与运行事务的不同进程中运行恢复。

10.8.6. 协调

事务管理器将以专有方式通知系统管理员不疑事务。在此阶段,系统管理员知道事务的 XID (字节阵列)。

普通的恢复流程是:

  • STEP 1: 系统管理员通过 JMX 连接到数据网格服务器,并列出了重大交易。下图显示了 JConsole 连接到具有重大事务的 Data Grid 节点。

图 10.1. show in-doubt 事务

showInDoubtTx

此时会显示每个 in-doubt 事务的状态(在本示例中" PREPARED ")。status 字段中可能存在多个元素,例如:在某些节点上提交但不是所有节点上的事务时,"PREPARED"和"COMMITTED"。  

  • STEP 2: 系统管理员视觉地将从事务管理器接收的 XID 映射到 Data Grid 内部 ID,以数字表示。此步骤是必需的,因为 XID (一个字节阵列)无法方便地传递给 JMX 工具(如 JConsole),然后在 Data Grid 的侧重新集合。
  • STEP 3 :系统管理员根据内部 ID 强制事务的提交/滚动通过相应的 jmx 操作。以下镜像是通过根据其内部 ID 强制提交事务来获取的。

图 10.2. 强制提交

forceCommit
提示

以上描述的所有 JMX 操作都可以在任何节点上执行,无论事务来自哪里。

10.8.6.1. 根据 XID 强制提交/滚动

也提供基于 XID 的 JMX 操作,以强制进行内部事务的提交/滚动:这些方法接收 XID 阵列,而不是与事务关联的数字(如第 2 步所述)。例如,如果想要为某些不疑事务设置自动完成作业,则这非常有用。这个过程插入事务管理器的恢复中,并可以访问事务管理器的 XID 对象。

10.8.7. 想要了解更多信息?

恢复设计文档 更详细地描述了事务恢复实现内部。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.