搜索

8.15.2.3. 流程

download PDF
重要

以下流程只详细描述了数据源的手动交易恢复过程。

  1. 使用数据库供应商工具列出内部分支的 XID(事务分支标识符)。需要列出 由 pod 上运行或已缩减的 pod 上运行的任何部署使用的所有数据源 的 XID。有关使用的数据库产品,请参阅供应商文档。
  2. 对于每个这样的 XID,确定哪个 pod 创建了事务,并检查该 pod 是否仍然在运行。

    1. 如果正在运行,则让该分支单独保留。
    2. 如果 pod 没有运行,假设它已从集群中移除,您必须应用此处所述的手动解析流程。查看失败 pod 使用的事务日志存储,以查看是否有对应的事务日志:

      1. 如果有日志,则使用供应商工具手动提交 XID。
      2. 如果没有日志,请假定它是一个孤立分支,并使用供应商工具回滚 XID。

此过程的其余部分详细说明了如何执行这些步骤。

8.15.2.3.1. 解决 In-doubt 分支

首先,查找部署使用的所有资源。

建议您使用 JBoss EAP 管理 CLI 执行此操作。尽管这些资源应该在 JBoss EAP standalone-openshift.xml 配置文件中定义,但也可以使用其他方式供应用服务器内的事务子系统使用。例如,这可以通过部署中的文件来实现,或者在运行时使用管理 CLI 动态完成。

  1. 在失败的 pod 群集中运行 JBoss EAP 实例的 pod 上打开一个终端。如果没有这样的 pod,请向上扩展为一个 pod。
  2. 使用 /opt/eap/bin/add-user.sh 脚本创建管理用户。
  3. 使用 /opt/eap/bin/jboss-cli.sh 脚本登录管理 CLI。
  4. 列出服务器上配置的数据源。这些可能包含doubt 事务分支。

    /subsystem=datasources:read-resource
    {
        "outcome" => "success",
        "result" => {
        	"data-source" => {
            	"ExampleDS" => undefined,
            	...
        	},
      ...
    }
  5. 拥有列表后,查找每个数据源的连接 URL。例如:

    /subsystem=datasources/data-source=ExampleDS:read-attribute(name=connection-url)
    {
        "outcome" => "success",
        "result" => "jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE",
        "response-headers" => {"process-state" => "restart-required"}
    }
  6. 连接到每个数据源并列出任何 in-doubt 事务分支。

    注意

    存储 in-doubt 分支的表名称会因数据源供应商而异。

    JBoss EAP 具有默认的 SQL 查询工具(H2),可用于检查每个数据库。例如:

    java -cp /opt/eap/modules/system/layers/base/com/h2database/h2/main/h2-1.3.173.jar \
    -url "jdbc:postgresql://localhost:5432/postgres" \
    -user sa \
    -password sa \
    -sql "select gid from pg_prepared_xacts;"

    或者,您可以使用资源的原生工具。例如,对于名为 sampledb 的 PostGreSQL 数据源,您可以使用 OpenShift 客户端工具远程登录到 pod 并查询 in-doubt 事务表:

    $ oc rsh postgresql-2-vwf9n # rsh to the named pod
    sh-4.2$ psql sampledb
    psql (9.5.7)
    Type "help" for help.
    
    sampledb=# select gid from pg_prepared_xacts;
    131077_AAAAAAAAAAAAAP//rBEAB440GK1aJ72oAAAAGHAtanRhLWNyYXNoLXJlYy0zLXAyY2N3_AAAAAAAAAAAAAP//rBEAB440GK1aJ72oAAAAGgAAAAEAAAAA
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.