第 9 章 在 OpenShift Container Platform 上部署您的 Jboss EAP 应用程序
9.1. 用于在 OpenShift 上自动化应用程序部署的 JBoss EAP operator 复制链接链接已复制到粘贴板!
EAP 操作器是扩展 OpenShift API 的 JBoss EAP 特定控制器。您可以使用 EAP 操作器创建、配置、管理和无缝升级复杂有状态应用的实例。
EAP 操作器在集群中管理多个 JBoss EAP Java 应用实例。它还通过在缩减副本前验证所有事务完成,并将 pod 标记为 clean 以进行终止,确保应用程序集群中的安全事务恢复。EAP 操作器使用 StatefulSet 来适当处理 Jakarta Enterprise Beans 远程和事务恢复处理。StatefulSet 确保持久性存储和网络主机名稳定性,即使 pod 重启后也是如此。
您必须使用 OperatorHub 安装 EAP 操作器,供 OpenShift 集群管理员用于发现、安装和升级操作器。
在 OpenShift Container Platform 4 中,您可以使用 Operator Lifecycle Manager (OLM)安装、更新和管理所有 Operator 以及在多个集群中运行的关联服务的生命周期。
OLM 在 OpenShift Container Platform 4 中默认运行。它帮助集群管理员对集群上运行的操作器进行安装、升级和授予访问权。OpenShift Container Platform Web 控制台为集群管理员提供管理界面,用于安装 Operator,以及授予特定项目访问权限以使用集群中可用的 Operator 目录。
如需有关 Operator 和 OLM 的更多信息,请参阅 OpenShift 文档。
9.1.1. 使用 Web 控制台安装 EAP Operator 复制链接链接已复制到粘贴板!
作为 JBoss EAP 集群管理员,您可以使用 OpenShift Container Platform Web 控制台从 Red Hat OperatorHub 安装 EAP operator。然后,您可以将 EAP 操作器订阅到一个或多个命名空间,供集群上的开发人员使用。
在使用 Web 控制台安装 EAP operator 之前,您必须注意以下几个点:
- Installation Mode :选择 All namespaces on the cluster (default),以在所有命名空间上安装 Operator,或者选择单独的命名空间(如果可用),仅在所选命名空间中安装 Operator。
- 更新频道: 如果 EAP 操作器可以通过多个频道获得,您可以选择您要订阅的频道。例如,要通过 stable 频道部署(如果可用),则从列表中选择这个选项。
- 批准策略:您可以选择自动或手动更新。如果选择自动更新 EAP 操作器,则当有新版本 Operator 可用时,Operator Lifecycle Manager(OLM)会自动升级正在运行的 EAP 实例。如果选择手动更新,则当有新版 Operator 可用时,OLM 会创建更新请求。然后,您必须手动批准更新请求,以便 Operator 更新至新版本。
以下流程可能会根据 OpenShift Container Platform Web 控制台中的修改而有所变化。有关最新和最准确的流程,请参阅 OpenShift Container Platform 指南中的使用 Web 控制台从 OperatorHub 安装 部分。
先决条件
-
使用具有
cluster-admin权限的账户访问 OpenShift Container Platform 集群。
流程
- 在 OpenShift Container Platform Web 控制台中导航至 Operators→ OperatorHub。
-
向下滚动或在 Filter by keyword 框中输入
EAP,以查找 EAP 操作器。 - 选择 JBoss EAP operator 并单击 Install。
在 Create Operator Subscription 页面:
任选以下一项:
-
All namespaces on the cluster(default),将 operator 安装至默认
openshift-operators命名空间,以便供集群中的所有命名空间监视和使用。该选项并非始终可用。 - 集群中的特定命名空间会将 Operator 安装到您选择的特定命名空间中。Operator 仅可在该单一命名空间中使用。
-
All namespaces on the cluster(default),将 operator 安装至默认
- 选择一个 Update Channel。
- 如前面所述,选择自动或手动批准策略。
点 Subscribe 使 EAP Operator 可供此 OpenShift Container Platform 集群上的所选命名空间使用。
- 如果选择了手动批准策略,订阅的升级状态将保持在 Upgrading,直至您审核并批准了它的安装计划。批准 Install Plan 页面中的安装计划后,订阅升级状态将变为 Up to date。
- 如果您选择了一个自动批准策略,则升级状态会在不干预的情况下变为 Up to date。
在订阅的升级状态变为 Up to date 后,选择 Operators
Installed Operators 来验证 EAP ClusterServiceVersion(CSV)是否显示为 up,其 Status 会在相关命名空间中变为 InstallSucceeded。 注意对于 All namespaces… 安装模式,
openshift-operators命名空间中显示的状态为 InstallSucceeded。在其他命名空间中,显示的状态是 Copied。如果 Status 字段没有更改为 InstallSucceeded,请检查openshift-operators项目(如果选择了 A specific namespace… 安装模式)中的 openshift-operators 项目中的 pod 的日志,这会在 WorkloadsPods 页面中报告问题以便进一步排除故障。
9.1.2. 使用 CLI 安装 EAP Operator 复制链接链接已复制到粘贴板!
作为 JBoss EAP 集群管理员,您可以使用 OpenShift Container Platform CLI 从 Red Hat OperatorHub 安装 EAP operator。然后,您可以将 EAP 操作器订阅到一个或多个命名空间,供集群上的开发人员使用。
使用 CLI 从 OperatorHub 安装 EAP Operator 时,请使用 oc 命令创建 Subscription 对象。
先决条件
-
可以使用具有
cluster-admin权限的账户访问 OpenShift Container Platform 集群。 -
您已在本地系统中安装了
oc工具。
流程
查看 OperatorHub 中集群可用的 Operator 列表:
oc get packagemanifests -n openshift-marketplace | grep eap NAME CATALOG AGE ... eap Red Hat Operators 43d ...
$ oc get packagemanifests -n openshift-marketplace | grep eap NAME CATALOG AGE ... eap Red Hat Operators 43d ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个
Subscription对象 YAML 文件(例如,eap-operator-sub.yaml)来向 EAP operator 订阅命名空间。以下是Subscription对象 YAML 文件示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关频道和批准策略的详情,请查看此流程的 Web 控制台 版本。
从 YAML 文件创建
Subscription对象:oc apply -f eap-operator-sub.yaml oc get csv -n openshift-operators NAME DISPLAY VERSION REPLACES PHASE eap-operator.v1.0.0 JBoss EAP 1.0.0 Succeeded
$ oc apply -f eap-operator-sub.yaml $ oc get csv -n openshift-operators NAME DISPLAY VERSION REPLACES PHASE eap-operator.v1.0.0 JBoss EAP 1.0.0 SucceededCopy to Clipboard Copied! Toggle word wrap Toggle overflow EAP 操作器已经安装成功。此时,OLM 知道 EAP 操作器。Operator 的 ClusterServiceVersion(CSV)出现在目标命名空间中,由 EAP 操作器提供的 API 可用于创建。
9.1.3. 使用 EAP 操作器在 OpenShift 上部署 Java 应用 复制链接链接已复制到粘贴板!
EAP 操作员有助于在 OpenShift 上自动化 Java 应用程序部署。如需有关 EAP 操作器 API 的信息,请参阅 EAP Operator: API Information。
先决条件
- 已安装 EAP operator。有关安装 EAP 操作器的更多信息,请参阅使用 Web 控制台安装 EAP 操作器, 以及使用 CLI 安装 EAP 操作器。
- 您已使用 JBoss EAP for OpenShift Source-to-Image (S2I)构建镜像,构建了 user 应用的 Docker 镜像。
-
如果应用程序的 CustomResourceDefinition(CRD)文件引用了一个
Secret对象,则已创建了 Secret。有关创建新Secret对象的更多信息,请参阅创建 Secret。 -
如果您的应用程序的 CRD 文件引用了
ConfigMap,则已创建了 ConfigMap。有关创建ConfigMap的详情,请参考 创建 ConfigMap。 -
如果选择这样做,则已从
standalone.xml文件创建了ConfigMap。有关从standalone.xml文件创建ConfigMap的详情,请参考 从 standalone.xml 文件创建 ConfigMap。
JBoss EAP 8.0 不支持从 ConfigMap 提供 standalone.xml 文件。
流程
- 打开 Web 浏览器并登录到 OperatorHub。
- 选择您要用于 Java 应用程序的 Project 或命名空间。
- 进入到 Installed Operator,再选择 JBoss EAP operator。
- 在 Overview 选项卡上,单击 Create Instance 链接。
指定应用程序镜像详情。
应用镜像指定包含 Java 应用的 Docker 镜像。该镜像必须使用 JBoss EAP for OpenShift Source-to-Image (S2I)构建镜像来构建。如果
applicationImage字段与 imagestreamtag 对应,对镜像的任何更改都会触发应用程序的自动升级。您可以为 OpenShift 应用程序镜像提供以下 JBoss EAP 参考:
- 镜像的名称:mycomp/myapp
- tag: mycomp/myapp:1.0
- 摘要:mycomp/myapp:@sha256:0af38bc38be93116b6a1d86a9c78bd14cd527121970899d719baf78e5dc7bfd2
- imagestreamtag: my-app:latest
指定应用程序的大小。例如:
spec: replicas:2
spec: replicas:2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
env spec配置应用程序环境。环境变量 可以直接来自值,如 POSTGRESQL_SERVICE_HOST 或来自Secret对象,如 POSTGRESQL_USER。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 完成与应用程序部署相关的以下可选配置:
- 指定服务器数据目录的存储要求。如需更多信息,请参阅为应用程序配置持久性存储。
指定您在
WildFlyServerSpec中创建的Secret名称,将其挂载为运行应用的 pod 中的卷。例如:spec: secrets: - my-secretspec: secrets: - my-secretCopy to Clipboard Copied! Toggle word wrap Toggle overflow Secret挂载到/etc/secrets/<secret name>,每个键/值存储为一个文件。文件的名称是键,内容是值。Secret作为一个卷在 pod 中挂载。以下示例演示了可用于查找键值的命令:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意修改
Secret对象可能会导致项目不一致。红帽建议创建一个与旧内容相同的新对象,而不是修改现有Secret对象。然后,您可以根据需要更新内容,并将 operator 自定义资源(CR)中的引用从 old 改为 new。这被视为一个新的 CR 更新,pod 被重新加载。指定您在
WildFlyServerSpec中创建的ConfigMap名称,将其挂载为运行应用程序的 pod 中的卷。例如:spec: configMaps: - my-config
spec: configMaps: - my-configCopy to Clipboard Copied! Toggle word wrap Toggle overflow ConfigMap挂载于/etc/configmaps/<configmap name>,每个键/值都存储为一个文件。文件的名称是键,内容是值。ConfigMap作为一个卷在 pod 中挂载。查找键值:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意修改
ConfigMap可能会导致项目不一致。红帽建议创建一个与旧内容相同的新ConfigMap,而不是修改现有ConfigMap。然后,您可以根据需要更新内容,并将 operator 自定义资源(CR)中的引用从 old 改为 new。这被视为一个新的 CR 更新,pod 被重新加载。如果您选择拥有自己的独立
ConfigMap,请提供ConfigMap的名称以及standalone.xml文件的密钥:standaloneConfigMap: name: clusterbench-config-map key: standalone.xmlstandaloneConfigMap: name: clusterbench-config-map key: standalone.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意JBoss EAP 8.0 不支持从
standalone.xml文件创建ConfigMap。如果要在 OpenShift 中禁用默认的 HTTP 路由创建,请将
disableHTTPRoute设置为true:spec: disableHTTPRoute: true
spec: disableHTTPRoute: trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
9.1.3.1. 创建 secret 复制链接链接已复制到粘贴板!
如果应用程序的 CustomResourceDefinition (CRD)文件引用 Secret,则必须在使用 EAP operator 在 OpenShift 上部署应用程序前创建 Secret。
流程
-
创建
Secret:
oc create secret generic my-secret --from-literal=my-key=devuser --from-literal=my-password='my-very-secure-pasword'
$ oc create secret generic my-secret --from-literal=my-key=devuser --from-literal=my-password='my-very-secure-pasword'
9.1.3.2. 创建 configMap 复制链接链接已复制到粘贴板!
如果应用程序的 CustomResourceDefinition (CRD)文件引用了 spec.ConfigMaps 字段中的 ConfigMap,则必须在使用 EAP operator 在 OpenShift 上部署应用程序前创建 ConfigMap。
流程
- 创建 configmap:
oc create configmap my-config --from-literal=key1=value1 --from-literal=key2=value2 configmap/my-config created
$ oc create configmap my-config --from-literal=key1=value1 --from-literal=key2=value2
configmap/my-config created
9.1.3.3. 从 standalone.xml 文件创建 configMap 复制链接链接已复制到粘贴板!
您可以创建自己的 JBoss EAP 独立配置,而不使用来自 JBoss EAP for OpenShift Source-to-Image (S2I)的应用镜像中的一个。standalone.xml 文件必须放在可由 Operator 访问的 ConfigMap 中。
JBoss EAP 8.0 不支持从 ConfigMap 提供 standalone.xml 文件。
流程
-
从
standalone.xml文件创建ConfigMap:
oc create configmap clusterbench-config-map --from-file examples/clustering/config/standalone.xml configmap/clusterbench-config-map created
$ oc create configmap clusterbench-config-map --from-file examples/clustering/config/standalone.xml
configmap/clusterbench-config-map created
9.1.3.4. 为应用程序配置持久性存储 复制链接链接已复制到粘贴板!
如果您的应用程序需要一些数据的持久性存储,如在 pod 重启后必须保留的事务或消息日志,请配置存储规格。如果存储 spec 为空,则应用程序的每个 pod 都会使用 EmptyDir 卷。但是,这个卷在对应的 pod 停止后不会保留。
流程
指定
volumeClaimTemplate来配置资源要求,以存储 JBoss EAP 独立数据目录。模板的名称派生自 JBoss EAP 的名称。对应的卷以ReadWriteOnce访问模式挂载。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 满足此存储要求的持久性卷挂载到
/eap/standalone/data目录中。
9.1.4. 使用 EAP 操作器查看应用的指标 复制链接链接已复制到粘贴板!
您可以使用 EAP 操作器查看 OpenShift 上部署的应用的指标。
当集群管理员在项目中启用指标监控时,EAP 操作器会自动显示 OpenShift 控制台中的指标。
先决条件
- 您的集群管理员已为项目启用了监控。如需更多信息,请参阅 为用户定义的项目启用监控。
流程
- 在 OpenShift Container Platform Web 控制台中进入 Monitoring→ Metrics。
- 在 Metrics 屏幕上,在文本框中键入应用程序的名称以选择您的应用程序。您的应用程序的指标会出现在屏幕上。
9.1.5. 使用 Web 控制台卸载 EAP operator 复制链接链接已复制到粘贴板!
您可以从集群中删除或卸载 EAP Operator,您可以删除订阅来将其从订阅的命名空间中删除。您还可以删除 EAP Operator 的 ClusterServiceVersion(CSV)和部署。
为确保数据一致性和安全性,请在卸载 EAP 操作器前将集群中的 pod 数量缩减为 0。
您可以使用 Web 控制台卸载 EAP 操作器。
如果您决定删除整个 wildflyserver 定义(oc delete wildflyserver <deployment_name>),则不会启动事务恢复过程,无论未完成的事务是什么,pod 都会被终止。此操作中未完成的结果可能会阻止您稍后启动的数据更改。其他涉及事务性企业所涉及的 JBoss EAP 实例的数据变化也会被利用这个 wildflyserver 进行远程调用。
流程
- 在 Operators→ Installed Operators 页面中,选择 JBoss EAP。
- 在 Operator Details 页面的右侧,从 Actions 下拉菜单中选择 Uninstall Operator。
- 如果要删除所有安装相关组件,则在看到 Remove Operator Subscription 窗口提示时,勾选 Also completely remove the Operator from the selected namespace 复选框。这会删除 CSV,并删除与 Operator 关联的 pod、部署、自定义资源定义(CRD)和自定义资源(CR)。
- 单击 Remove。EAP 操作器将停止运行,并且不再接收更新。
9.1.6. 使用 CLI 卸载 JBoss EAP operator 复制链接链接已复制到粘贴板!
您可以从集群中删除或卸载 EAP Operator,您可以删除订阅来将其从订阅的命名空间中删除。您还可以删除 EAP Operator 的 ClusterServiceVersion(CSV)和部署。
为确保数据一致性和安全性,请在卸载 EAP 操作器前将集群中的 pod 数量缩减为 0。
您可以使用命令行卸载 EAP 操作器。
使用命令行时,您可以通过从目标命名空间中删除订阅和 CSV 来卸载 Operator。
如果您决定删除整个 wildflyserver 定义(oc delete wildflyserver <deployment_name>),则不会启动事务恢复过程,无论未完成的事务是什么,pod 都会被终止。此操作中未完成的结果可能会阻止您稍后启动的数据更改。其他涉及事务性企业所涉及的 JBoss EAP 实例的数据变化也会被利用这个 wildflyserver 进行远程调用。
流程
在
currentCSV字段中检查 EAP operator 订阅的当前版本:oc get subscription eap-operator -n openshift-operators -o yaml | grep currentCSV currentCSV: eap-operator.v1.0.0
$ oc get subscription eap-operator -n openshift-operators -o yaml | grep currentCSV currentCSV: eap-operator.v1.0.0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除 EAP Operator 的订阅:
oc delete subscription eap-operator -n openshift-operators subscription.operators.coreos.com "eap-operator" deleted
$ oc delete subscription eap-operator -n openshift-operators subscription.operators.coreos.com "eap-operator" deletedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用上一步中的
currentCSV值删除目标命名空间中 EAP Operator 的 CSV:oc delete clusterserviceversion eap-operator.v1.0.0 -n openshift-operators clusterserviceversion.operators.coreos.com "eap-operator.v1.0.0" deleted
$ oc delete clusterserviceversion eap-operator.v1.0.0 -n openshift-operators clusterserviceversion.operators.coreos.com "eap-operator.v1.0.0" deletedCopy to Clipboard Copied! Toggle word wrap Toggle overflow
9.1.7. 用于安全事务恢复的 JBoss EAP operator 复制链接链接已复制到粘贴板!
JBoss EAP 操作器在终止应用程序集群前确保数据一致性。要做到这一点,Operator 会在缩减副本前验证所有事务是否都完成,并将 pod 标记为 干净 以终止。
这意味着,如果要在没有数据不一致的情况下安全地删除部署,您必须首先将 pod 数量缩减为 0,等待所有 pod 终止,然后只删除 wildflyserver 实例。
如果您决定删除整个 wildflyserver 定义(oc delete wildflyserver <deployment_name>),则不会启动事务恢复过程,无论未完成的事务是什么,pod 都会被终止。此操作中未完成的结果可能会阻止您稍后启动的数据更改。其他涉及事务性企业所涉及的 JBoss EAP 实例的数据变化也会被利用这个 wildflyserver 进行远程调用。
当 scaledown 进程启动 pod 状态(oc get pod <pod_name>)时,pod 仍标记为 Running,因为 pod 必须完成所有未完成的事务,包括针对它的远程企业级 Bean 调用。
如果要监控 scaledown 进程的状态,请观察 wildflyserver 实例的状态。如需更多信息 ,请参阅监控扩展进程。有关缩减期间 pod 状态的信息,请参阅扩展 过程中 Pod 状态。
9.1.7.1. stable 网络主机名的 StatefulSets 复制链接链接已复制到粘贴板!
管理 wildflyserver 的 EAP 操作器将创建一个 StatefulSet 作为管理 JBoss EAP pod 的底层对象。
StatefulSet 是管理有状态应用程序的工作负载 API 对象。它管理一组 pod 的部署和扩展,并为这些 pod 的排序和唯一性提供保证。
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 本身无效,并会恢复此类更改。
9.1.7.2. 监控 scaledown 进程 复制链接链接已复制到粘贴板!
如果要监控 scaledown 进程的状态,您必须观察 wildflyserver 实例的状态。有关 scaledown 期间不同 pod 状态的更多信息,请参阅 在扩展过程中 Pod 状态。
流程
观察 scaledown 进程的状态:
oc describe wildflyserver <name>
oc describe wildflyserver <name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - WildFlyServer.Status.Scalingdown Pods 和 WildFlyServer.Status.Replicas 字段显示 active 和 non-active pod 的整体状态。
- Scalingdown Pods 字段显示所有未完成事务时要终止的 pod 数量。
- WildFlyServer.Status.Replicas 字段显示当前运行的 pod 数量。
- WildFlyServer.Spec.Replicas 字段显示处于 ACTIVE 状态的 pod 数量。
- 如果没有 pod 在 scaledown 处理 WildFlyServer.Status.Replicas 和 WildFlyServer.Spec.Replicas 字段中的 pod 数量。
9.1.7.2.1. scaledown 期间的 Pod 状态 复制链接链接已复制到粘贴板!
下表描述了 scaledown 期间的不同 pod 状态:
| Pod 状态 | 描述 |
|---|---|
| ACTIVE | pod 处于活跃状态并处理请求。 |
| SCALING_DOWN_RECOVERY_INVESTIGATION | pod 即将缩减。缩减流程正在调查 JBoss EAP 中的事务状态。 |
| SCALING_DOWN_RECOVERY_DIRTY | JBoss EAP 包含一些不完整的事务。在清理前 pod 无法被终止。事务恢复过程在 JBoss EAP 中定期运行,它会等待事务完成。 |
| SCALING_DOWN_CLEAN |
pod 由事务缩减处理处理,并标记为 |
9.1.7.3. 在处理人员的交易期间缩减 复制链接链接已复制到粘贴板!
当事务的结果未知时,无法自动事务恢复。然后,您必须手动恢复您的事务。
先决条件
-
您的 pod 的状态一直处于
SCALING_DOWN_RECOVERY_DIRTY中。
流程
- 使用 CLI 访问您的 JBoss EAP 实例。
- 解决事务对象存储中的所有 heuristics 事务记录。如需更多信息,请参阅 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 被终止。
9.1.7.4. 配置 transactions 子系统,以使用 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.xml配置文件oc rsh <podname> cat /opt/server/standalone/configuration/standalone.xml来验证数据源配置和事务子系统配置。预期输出:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.1.7.5. 缩减过程中的事务恢复 复制链接链接已复制到粘贴板!
当您在 JBoss EAP 应用服务器中使用事务部署应用程序时,务必要了解集群缩减过程中发生的情况。减少活动 JBoss EAP 副本的数量可能会离开需要完成(或解决)需要完成的事务的 in-doubt (或更高)。这种情况是 XA 标准的结果,即交易声明为成功完成事务。此外,XA 事务还可以完成,其结果需要手动解决。关闭正在管理此类事务(即 in-doubt 或 heuristic 事务)的 pod 可能会导致数据不一致/术语或数据锁定。
JBoss EAP 操作器提供缩减功能,以确保所有事务在减少副本数前完成。此功能验证 pod 中的所有事务是否已完成/解决,仅 Operator 会将 pod 标记为 clean 以进行终止。
如需更多信息,请参阅 WildFly Operator 用户指南。
流程
要减少 JBoss EAP 应用服务器中的副本大小,请执行以下操作之一:
对副本大小进行补丁:
oc patch wildflyserver <name> -p '[{"op":"replace", "path":"/spec/replicas", "value":0}]' --type jsonoc patch wildflyserver <name> -p '[{"op":"replace", "path":"/spec/replicas", "value":0}]' --type jsonCopy to Clipboard Copied! Toggle word wrap Toggle overflow 手动编辑副本大小:
oc edit wildflyserver <name>
oc edit wildflyserver <name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
直接减少 StatefulSet 中的副本大小,或删除 pod 将无效。此类更改将自动恢复。
删除整个 JBoss EAP 服务器定义(oc delete wildflyserver <deployment_name>')不会启动事务恢复过程。无论未完成的事务是什么,pod 都会终止。要在没有数据不一致的情况下安全地删除部署,首先将 pod 数量缩减为零,等待所有 pod 终止,然后删除 JBoss EAP 实例。
确保在 JBoss EAP 事务子系统中启用 Narayana recovery 侦听器。如果不这样做,缩减事务恢复处理会跳过该特定 JBoss EAP pod。
9.1.7.6. 缩减过程 复制链接链接已复制到粘贴板!
当 scaledown 进程启动时,您会看到 oc get pod <pod_name> 的 pod 状态仍显示为 Running。在此状态下,操作员允许 Pod 完成所有未完成事务,包括针对它的远程 EJB 调用。要观察 scaledown 进程,您可以监控 JBoss EAP 实例的状态。使用 oc describe wildflyserver <name& gt; 来查看 pod 状态。
| Name | 描述 |
|---|---|
| ACTIVE | pod 主动处理请求。 |
| SCALING_DOWN_RECOVERY_INVESTIGATION | pod 正在调查,以找出是否有无法成功完成其生命周期的事务。 |
| SCALING_DOWN_RECOVERY_PROCESSING | 日志存储中有 in-doubt 事务。在完成或清理这些事务前,pod 无法终止。 |
| SCALING_DOWN_RECOVERY_HEURISTICS | 日志存储中有一些事务。在手动解决或清理这些事务前,pod 无法终止。 |
| SCALING_DOWN_CLEAN | pod 已完成事务缩减过程,并在从集群中删除时清除。 |
9.1.7.7. 在扩展过程中禁用事务恢复 复制链接链接已复制到粘贴板!
如果要在缩减过程中禁用事务恢复,您可以将属性 WildFlyServerSpec.DeactivateTransactionRecovery 配置为 true (默认为 false)。当您启用 DeactivateTransactionRecovery, in-doubt 和 heuristic 事务不会被完成或报告时,在使用分布式事务时可能会导致数据不一致或丢失。
- heuristic Transactions
XA 事务的结果可以是
提交、回滚或更高。后一结果代表了根据双阶段协议(用于完成 XA 事务)的第一阶段的结果,对分布式交易的参与者没有完成的确认。因此,Huristic 事务需要人工干预才能强制执行正确的结果(在第一阶段,事务协调员强制给所有参与者)。如果 JBoss EAP pod 正在处理异常事务,则该 pod 将被标记为
SCALING_DOWN_RECOVERY_HEURISTICS。管理员必须手动连接到特定的 JBoss EAP pod (使用jboss-cli),并手动解决高度事务。从事务对象存储解决/删除所有这些记录后,Operator 会将 pod 标记为SCALING_DOWN_CLEAN,pod 将被终止。- StatefulSet 行为
-
StatefulSet确保 stable 网络主机名,这取决于 pod 的排序。Pod 以定义的顺序命名,需要在 pod-0 之前终止 pod-1。如果 pod-1 处于SCALING_DOWN_RECOVERY_HEURISTICS和 pod-0 处于SCALING_DOWN_CLEAN,pod-0 将处于其状态,直到 pod-1 终止为止。即使 pod 处于SCALING_DOWN_CLEAN,也不会接收新请求并保持闲置。
9.1.8. 使用 pod 横向自动扩展 HPA 自动扩展 pod 复制链接链接已复制到粘贴板!
通过 EAP 操作器,您可以使用 pod 横向自动扩展 HPA 根据属于该 EAP 应用的 pod 收集的指标自动增加或减少 EAP 应用的规模。
使用 HPA 确保在 pod 缩减时仍处理事务恢复。
流程
配置资源:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要您必须为 pod 中的容器指定资源限值和请求,以便自动扩展按预期工作。
创建 Horizontal pod 自动缩放器:
oc autoscale wildflyserver/eap-helloworld --cpu-percent=50 --min=1 --max=10
oc autoscale wildflyserver/eap-helloworld --cpu-percent=50 --min=1 --max=10Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
- 您可以通过检查副本来验证 HPA 行为。副本数量会根据工作负载的增加或减少而进行相应的增加或减少。
9.1.9. OpenShift 上的 Jarkarta 企业 Bean remoting 复制链接链接已复制到粘贴板!
9.1.9.1. Jakarta Enterprise Beans 在 openShift 上的远程 复制链接链接已复制到粘贴板!
要使 JBoss EAP 能够在 OpenShift 上的不同 JBoss EAP 集群之间正确地使用企业 bemoting 调用,您必须了解 OpenShift 上的企业 bean remoting 配置选项。
在 OpenShift 上部署时,请考虑使用 EAP 操作器。EAP 操作员使用 StatefulSet 来处理企业 bean remoting 和事务恢复处理。StatefulSet 确保持久性存储和网络主机名稳定性,即使 pod 重启后也是如此。
当使用带有事务传播的企业 bean 远程调用联系 JBoss EAP 实例时,需要网络主机名稳定性。即使 pod 重启,JBoss EAP 实例必须可以被同一主机名访问。事务管理器(有状态组件)将持久事务数据绑定到特定的 JBoss EAP 实例。由于事务日志绑定到特定的 JBoss EAP 实例,它必须在同一实例中完成。
要在使用 JDBC 事务日志存储时防止数据丢失,请确保您的数据库提供了数据一致性的读取和写入。当数据库通过多个实例水平扩展时,一致数据读取和写入非常重要。
企业 bean 远程调用者有两个选项来配置远程调用:
- 定义远程出站连接。
- 对远程服务器上的 bean 使用编程 JNDI 查找。如需更多信息,请参阅使用远程 Jakarta Enterprise Beans 客户端。
您必须重新配置代表目标节点地址的值,具体取决于企业 bean 远程调用配置方法。
远程调用的目标企业 bean 的名称必须是第一个 pod 的 DNS 地址。
StatefulSet 的行为取决于 pod 的排序。pod 以预定义的顺序命名。例如,如果您将应用扩展为三个副本,则您的 pod 具有名称,如 eap-server-0、eap-server-1 和 eap-server-2。
EAP 操作器也使用 无头服务 来确保将特定的 DNS 主机名分配给 pod。如果应用使用 EAP 操作器,则使用名称(如 eap-server-headless )创建一个无头服务。在本例中,第一个 pod 的 DNS 名称为 eap-server-0.eap-server-headless。
使用主机名 eap-server-0.eap-server-headless 确保企业 bean 调用达到连接到集群的任何 EAP 实例。bootstrap 连接用于初始化 Jakarta Enterprise Beans 客户端,它会在下一步中收集 EAP 集群的结构。
9.1.9.1.1. 在 OpenShift 上配置 Jakarta Enterprise Beans 复制链接链接已复制到粘贴板!
您必须配置作为企业级补救的调用者的 JBoss EAP 服务器。目标服务器必须配置一个具有权限的用户,才能接收企业 bean 远程调用。
先决条件
- 您已使用 EAP 操作器和支持的 OpenShift S2I 镜像,用于在 OpenShift 中部署和管理 JBoss EAP 应用实例。
- 集群设置正确。有关 JBoss EAP 集群的更多信息,请参阅 集群 部分。
流程
在目标服务器上创建一个用户,并有权接收企业 bean 远程调用:
$JBOSS_HOME/bin/add-user.sh
$JBOSS_HOME/bin/add-user.shCopy to Clipboard Copied! Toggle word wrap Toggle overflow 配置调用 JBoss EAP 应用服务器。
-
使用自定义配置功能,在
$JBOSS_HOME/standalone/configuration中创建eap-config.xml文件。如需更多信息,请参阅 自定义配置。 使用
wildfly.config.url属性配置调用器 JBoss EAP 应用服务器:JAVA_OPTS_APPEND="-Dwildfly.config.url=$JBOSS_HOME/standalone/configuration/eap-config.xml"
JAVA_OPTS_APPEND="-Dwildfly.config.url=$JBOSS_HOME/standalone/configuration/eap-config.xml"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果您的配置使用以下示例,请将
>>PASTE_…_HERE<<替换为您配置的用户名和密码。配置示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
使用自定义配置功能,在