7.10. 用于 Safe 事务恢复的 EAP Operator
对于特定类型的事务,EAP 操作器会在终止应用程序集群前确保数据一致性,方法是验证所有事务在缩减副本前完成,并将 pod 标记为 clean 用于终止。
不支持某些场景。有关不支持的场景的更多信息,请参阅 不支持的事务恢复方案。
这意味着,如果要在没有数据不一致的情况下安全地删除部署,您必须首先将 pod 数量缩减为 0,等待所有 pod 终止,然后才删除 wildflyserver 实例。
如果您决定删除整个 wildflyserver 定义(oc delete wildflyserver <deployment_name>),则不会启动事务恢复过程,无论未完成的交易都会终止 pod。此操作结果的未完成工作可能会阻止您稍后启动的数据更改。涉及与此 wildflyserver 交易企业 Bean 远程调用的其他 JBoss EAP 实例的数据更改也可能被阻止。
当扩展过程开始 pod 状态(oc get pod <pod_name>)仍然标记为 Running,因为 pod 必须完成所有未完成事务,包括针对它的远程企业 beans 调用。
如果要监控 scaledown 进程的状态,请观察 wildflyserver 实例的状态。如需更多信息,请参阅监控缩减过程。有关扩展过程中 pod 状态的信息,请参阅 Pod 在缩减期间的状态。
7.10.1. Stable Network Host Names 的 StatefulSets 复制链接链接已复制到粘贴板!
管理 wildflyserver 的 EAP 操作器将创建 StatefulSet 作为管理 JBoss EAP pod 的底层对象。
StatefulSet 是管理有状态应用程序的工作负载 API 对象。它管理一组容器集的部署和扩展,并且对这些容器集的顺序和唯一性提供保证。
StatefulSet 可确保以预定义的顺序命名集群中的 pod。它也确保 pod 终止遵循相同的顺序。例如,让我们说,pod-1 具有具有启发式结果的交易,因此处于 SCALING_DOWN_RECOVERY_DIRTY 状态。即使 pod-0 处于 SCALING_DOWN_CLEAN 状态,它也不会在 pod-1 之前终止。在 pod-1 被 清理 并被终止前,pod-0 仍然处于 SCALING_DOWN_CLEAN 状态。但是,即使 pod-0 处于 SCALING_DOWN_CLEAN 状态,它也不会收到任何新的请求,实际上也没有闲置。
减少 StatefulSet 的副本大小或删除 pod 本身无效,并会恢复此类更改。
7.10.2. 监控扩展过程 复制链接链接已复制到粘贴板!
如果要监控 scaledown 进程的状态,您必须观察 wildflyserver 实例的状态。如需有关扩展过程中不同 pod 状态的更多信息,请参阅 Pod 在缩减期间的状态。
流程
观察缩减过程的状态:
oc describe wildflyserver <name>
oc describe wildflyserver <name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - WildFlyServer.Status.Scalingdown Pod 和 WildFlyServer.Status.Replicas 字段显示活跃和非主动 Pod 的整体状态。
- Scalingdown Pods 字段显示所有未完成事务完成后将终止的 pod 数量。
- WildFlyServer.Status.Replicas 字段显示当前运行的容器集数量。
- WildFlyServer.Spec.Replicas 字段显示处于 ACTIVE 状态的 pod 数量。
- 如果没有缩放过程中的 pod,则 WildFlyServer.Status.Replicas 和 WildFlyServer.Spec.Replicas 字段中的 pod 数量是相等的。
7.10.2.1. 横向扩展期间的 Pod 状态 复制链接链接已复制到粘贴板!
下表描述了扩展过程中的不同 pod 状态:
| Pod 状态 | 描述 |
|---|---|
| ACTIVE | pod 处于活跃状态,并处理请求。 |
| SCALING_DOWN_RECOVERY_INVESTIGATION | pod 即将缩减。纵向缩减流程正在调查 JBoss EAP 中的事务状态。 |
| SCALING_DOWN_RECOVERY_DIRTY | JBoss EAP 包含一些不完整的交易。在清理完 pod 前,pod 不会被终止。事务恢复过程在 JBoss EAP 定期运行,它会等待事务完成 |
| SCALING_DOWN_CLEAN |
pod 通过缩减事务处理来处理,标记为 |
7.10.3. 使用 Heuristic Outcomes 在事务期间缩减 复制链接链接已复制到粘贴板!
当交易的结果未知时,无法自动恢复交易。然后必须手动恢复您的事务。
先决条件
-
pod 的状态停留在
SCALING_DOWN_RECOVERY_DIRTY。
流程
- 使用 CLI 访问您的 JBoss EAP 实例。
- 解决事务对象存储中的所有启发式事务记录。如需更多信息,请参阅 JBoss EAP 管理事务中的恢复 Heuristic Outcomes。
从企业 bean 客户端恢复文件夹中删除所有记录。
从 pod enterprise bean 客户端恢复目录中删除所有文件:
$JBOSS_HOME/standalone/data/ejb-xa-recovery oc exec <podname> rm -rf $JBOSS_HOME/standalone/data/ejb-xa-recovery
$JBOSS_HOME/standalone/data/ejb-xa-recovery oc exec <podname> rm -rf $JBOSS_HOME/standalone/data/ejb-xa-recoveryCopy to Clipboard Copied! Toggle word wrap Toggle overflow
-
pod 的状态变为
SCALING_DOWN_CLEAN,pod 将被终止。
7.10.4. 配置事务子系统以将 JDBC 存储用于事务日志 复制链接链接已复制到粘贴板!
如果系统不提供文件系统来存储 事务日志,请使用 JBoss EAP S2I 镜像配置 JDBC 对象存储。
当 JBoss EAP 部署为可引导 JAR 时,S2I 环境变量不可用。在这种情况下,您必须创建 Galleon 层,或配置 CLI 脚本以进行必要的配置更改。
JDBC 对象存储可以使用环境变量 TX_DATABASE_PREFIX_MAPPING 进行设置。此变量的结构与 DB_SERVICE_PREFIX_MAPPING 相同。
前提条件
- 您已基于环境变量的值创建了数据源。
-
您已确保数据库和通过 JDBC 对象存储通信
的交易管理器之间存在一致的数据读取和写入权限。如需更多信息,请参阅配置 JDBC 数据源
流程
通过 S2I 环境变量设置和配置 JDBC 对象存储。
示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
您可以通过检查
standalone-openshift.xml配置文件oc rsh <podname> cat /opt/eap/standalone/configuration/standalone-openshift.xml来验证数据源配置和事务子系统配置。预期输出:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow