8.7. Safe Transaction Recovery 的 EAP Operator
EAP 操作器在终止应用集群之前确保数据一致性,方法是验证所有事务在缩减副本之前已完成,并将 pod 标记为 干净 以进行终止。
这意味着,如果要在没有数据不一致的情况下安全地删除部署,您必须首先将 pod 数量缩减为 0,等待所有 pod 终止,然后才删除 wildflyserver 实例。
如果您决定删除整个 wildflyserver 定义(oc delete wildflyserver <deployment_name>),则不会启动事务恢复过程,无论未完成的交易都会终止 pod。此操作结果的未完成工作可能会阻止您稍后启动的数据更改。涉及与此 wildflyserver 交互 EJB 远程调用的其他 JBoss EAP 实例的数据更改也可能被阻止。
当扩展过程开始 pod 状态(oc get pod <pod_name>)仍然标记为 Running,因为 pod 必须完成所有未完成事务,包括针对它的远程 EJB 调用。
如果要监控 scaledown 进程的状态,请观察 wildflyserver 实例的状态。如需更多信息,请参阅监控缩减过程。有关扩展过程中 pod 状态的信息,请参阅 Pod 在缩减期间的状态。
当运行可引导 JAR 应用镜像的 pod 缩减时,EAP 操作器不会恢复事务。EAP 操作器记录一个跟踪,描述在 pod 缩减时无法恢复事务。
8.7.1. Stable 网络主机名的 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 本身无效,并会恢复此类更改。