第 7 章 高级教程


7.1. 工作流示例:在扩展集群时自动恢复功能

重要

此功能仅作为技术预览提供。不支持在生产环境中使用,它可能会受到未来的显著更改。如需有关技术预览功能支持范围的信息,请参阅红帽客户门户网站中的技术预览功能支持范围。

注意

本教程仅适用于 OpenShift 3,也适用于不使用 EAP 操作器来恢复事务。

本教程演示了在缩减集群时 JBoss EAP OpenShift 镜像的自动事务恢复功能。本教程使用 jta-crash-rec-eap 快速启动示例和 eap73-tx-recovery-s2i 应用模板显示 OpenShift pod 上发布的 XA 事务如何在集群缩减内终止时,由专用迁移容器集恢复。JDK 11 镜像的等效应用模板为 eap73-openjdk11-tx-recovery-s2i

本教程使用 amq-broker-72-openshift:1.1 镜像流来提供符合 JMS 的消息代理。设置初始代理 Pod 后,您可以使用 OpenShift Container Platform 功能快速部署快速入门。

注意

作为使用快速启动的先决条件,您必须从 AMQ Long Term Support(LTS)镜像创建一个镜像流,并将镜像流命名为 amq-broker-72-openshift:1.1。您可以通过从 红帽生态系统目录 下载 amq7/amq-broker-lts-rhel7:7.4 容器镜像来访问 LTS 镜像。有关安装 AMQ Broker 的更多信息 ,请参阅部署基本代理

注意

jta-crash-rec-eap7 快速启动使用 JBoss EAP 随附的 H2 数据库。它是轻型关系示例数据源,仅用于示例。它不可靠或扩展,不受支持,不应在生产环境中使用。

7.1.1. 准备部署

  1. 使用 oc login 命令登录 您的 OpenShift 实例。
  2. 创建一个新项目。

    $ oc new-project eap-tx-demo
    Copy to Clipboard Toggle word wrap
  3. 将 view 角色添加到 default 服务帐户,用于运行底层容器集。这使得服务帐户能够查看 eap-tx-demo 命名空间中的所有资源,这是管理集群所必需的。

    $ oc policy add-role-to-user view system:serviceaccount:$(oc project -q):default
    Copy to Clipboard Toggle word wrap
  4. 若要使自动化事务恢复发挥作用,JBoss EAP 应用必须使用 ReadWriteMany 持久卷

    调配 eap73-tx-recovery-s2i 应用模板预期的持久卷,以存放 ${APPLICATION_NAME}-eap-claim 持久卷 声明 的数据。

    本例使用通过以下定义的 NFS 方法置备的持久性卷对象:

    $ cat txpv.yaml
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: txpv
    spec:
      capacity:
        storage: 1Gi
      accessModes:
        - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      nfs:
        path: /mnt/mountpoint
        server: 192.168.100.175
    Copy to Clipboard Toggle word wrap
  5. 为您的环境更新上述定义中 的路径 和服务器 字段,并使用以下命令置备持久性卷:

    $ oc create -f txpv.yaml
    persistentvolume "txpv" created
    Copy to Clipboard Toggle word wrap
    $ oc get pv
    NAME      CAPACITY   ACCESSMODES   RECLAIMPOLICY   STATUS      CLAIM     STORAGECLASS   REASON    AGE
    txpv      1Gi        RWX           Retain         Available                                      26s
    Copy to Clipboard Toggle word wrap
    重要

    在使用 NFS 方法为 eap73-tx-recovery-s2i 应用模板调配持久卷对象时,请确保已导出具有足够权限的挂载点。在从中导出挂载点的主机上执行以下操作:

    # chmod -R 777 /mnt/mountpoint
    Copy to Clipboard Toggle word wrap
    # cat /etc/exports
    /mnt/mountpoint *(rw,sync,anonuid=185,anongid=185)
    Copy to Clipboard Toggle word wrap
    # exportfs -va
    exporting *:/mnt/mountpoint
    Copy to Clipboard Toggle word wrap
    # setsebool -P virt_use_nfs 1
    Copy to Clipboard Toggle word wrap

    根据您的环境替换上面的 /mnt/mountpoint 路径。

7.1.2. Deployment

  1. 使用 eap73 -tx-recovery-s2i 应用模板部署 jta-crash-rec-eap7 快速启动。指定以下内容:

    示例: eap73-tx-recovery-s2i 应用模板(JDK 8)

    $ oc new-app --template=eap73-tx-recovery-s2i \
    --name=eap-app
    Copy to Clipboard Toggle word wrap

    示例: eap73-openjdk11-tx-recovery-s2i 应用模板(JDK 11)

    $ oc new-app --template=eap73-openjdk11-tx-recovery-s2i \
    --name=eap-app
    Copy to Clipboard Toggle word wrap

  2. 等待构建完成。您可以使用 oc logs -f bc/eap-app 命令来查看构建的状态。
  3. 使用 JAVA_OPTS_APPEND 和 JBOSS_MODULES_ SYSTEM_PKGS_APPEND 环境变量定义修改 eap-app 部署配置。

    $ oc get dc
    NAME                REVISION   DESIRED   CURRENT   TRIGGERED BY
    eap-app             1          1         1         config,image(eap-app:latest)
    eap-app-amq         1          1         1     config,image(amq-broker-72-openshift:1.1)
    eap-app-migration   1          1         1         config,image(eap-app:latest)
    Copy to Clipboard Toggle word wrap
    $ oc set env dc/eap-app \
    -e JBOSS_MODULES_SYSTEM_PKGS_APPEND="org.jboss.byteman" \
    -e JAVA_OPTS_APPEND="-javaagent:/tmp/src/extensions/byteman/byteman.jar=script:/tmp/src/src/main/scripts/xa.btm"
    deploymentconfig "eap-app" updated
    Copy to Clipboard Toggle word wrap

    此设置将通知 Byteman 跟踪和监控工具以以下方式修改 XA 事务处理:

    • 第一次事务总是被允许成功。
    • 当 XA 资源执行第二个事务的阶段 2 时,特定 pod 的 JVM 进程将停止。

7.1.3. 使用 JTA 清理恢复应用程序

  1. 列出当前命名空间中正在运行的 pod:

    $ oc get pods | grep Running
    NAME                        READY     STATUS      RESTARTS   AGE
    eap-app-2-r00gm             1/1       Running     0          1m
    eap-app-amq-1-mws7x         1/1       Running     0          2m
    eap-app-migration-1-lvfdt   1/1       Running     0          2m
    Copy to Clipboard Toggle word wrap
  2. 签发新的 XA 事务。

    1. 打开浏览器并导航到 启动应用
    2. Key 字段中输入 Mercedes,在 Value 字段中输入 Benz。单击 提交 按钮。
    3. 等待片刻,然后单击 Refresh Table 链接。
    4. 注意包含 Mercedes 条目的表行如何通过 JMS 更新。如果尚未更新,请多次单击 Refresh Table 链接。或者,您可以检查 eap-app-2-r00gm pod 的日志,以验证事务是否已正确处理:

      $ oc logs eap-app-2-r00gm | grep 'updated'
      INFO  [org.jboss.as.quickstarts.xa.DbUpdaterMDB] (Thread-0 (ActiveMQ-client-global-threads-1566836606)) JTA Crash Record Quickstart: key value pair updated via JMS.
      Copy to Clipboard Toggle word wrap
  3. 使用浏览器( http://eap-app-eap-tx-demo.openshift.example.com/jboss-jta-crash-rec )发出第二个 XA 事务。

    1. Key 字段中输入 Sign,再将 Rover 放入 Value 字段。单击 提交 按钮。
    2. 等待片刻,然后单击 Refresh Table 链接。
    3. 注意在未 更新通过 …​ 后缀的情况下添加 lint Rover 条目的方式。
  4. 缩减群集。

    $ oc scale --replicas=0 dc/eap-app
    deploymentconfig "eap-app" scaled
    Copy to Clipboard Toggle word wrap
    1. 注意 eap-app-2-r00gm 容器集如何调度终止。

      $ oc get pods
      NAME                        READY     STATUS        RESTARTS   AGE
      eap-app-1-build             0/1       Completed     0          4m
      eap-app-2-r00gm             1/1       Terminating   0          2m
      eap-app-amq-1-mws7x         1/1       Running       0          3m
      eap-app-migration-1-lvfdt   1/1       Running       0          3m
      Copy to Clipboard Toggle word wrap
  5. 观察迁移 pod 的日志,并注意如何执行事务恢复。等待恢复完成:

    $ oc logs -f eap-app-migration-1-lvfdt
    Finished Migration Check cycle, pausing for 30 seconds before resuming
    ...
    Finished, recovery terminated successfully
    Migration terminated with status 0 (T)
    Releasing lock: (/opt/eap/standalone/partitioned_data/split-1)
    Finished Migration Check cycle, pausing for 30 seconds before resuming
    ...
    Copy to Clipboard Toggle word wrap
  6. 纵向扩展群集。

    $ oc scale --replicas=1 dc/eap-app
    deploymentconfig "eap-app" scaled
    Copy to Clipboard Toggle word wrap
  7. 使用浏览器返回 http://eap-app-eap-tx-demo.openshift.example.com/jboss-jta-crash-rec
  8. 注意表中含有两个事务的条目。它类似于以下输出:

    Expand
    表 7.1. 示例:数据库表内容
    数据库表内容 

    Mercedes

    通过 JMS 更新 Benz.

    Logress

    Rover 通过 JMS 更新.

    上表中的内容表明,虽然集群在第二个 XA 事务有机会完成前缩减,但迁移 pod 执行了事务恢复,事务已成功完成。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat