8.7. 集群


8.7.1. 配置 JGroups 发现机制

要在 OpenShift 上启用 JBoss EAP 集群,请在 JBoss EAP 配置中配置 JGroups 协议堆栈,以使用 kubernetes.KUBE_PINGdns.DNS_PING 发现机制。

虽然您可以使用自定义 standalone-openshift.xml 配置文件,但 建议您使用环境变量 在镜像构建中配置 JGroups。

以下说明使用环境变量来配置 JBoss EAP 用于 OpenShift 镜像的发现机制。

重要

如果您使用其中一个可用的应用模板在 JBoss EAP for OpenShift 镜像基础上部署应用,则默认发现机制为 dns.DNS_PING

dns.DNS_PINGkubernetes.KUBE_PING 发现机制彼此不兼容。无法从两个独立的子集群组成一个超级集群,一个使用 dns.DNS_PING 机制进行 发现,另一个使用 kubernetes.KUBE_PING 机制。同样,在执行滚动升级时,对源和目标集群的发现机制需要相同。

8.7.1.1. Configuring KUBE_PING

使用 KUBE_PING JGroups 发现机制:

  1. JGroups 协议堆栈必须配置为使用 KUBE_PING 作为发现机制。

    您可以通过将 JGROUPS_PING_PROTOCOL 环境变量设置为 kubernetes.KUBE_PING 来做到这一点

    JGROUPS_PING_PROTOCOL=kubernetes.KUBE_PING
    Copy to Clipboard Toggle word wrap
  2. KUBERNETES_NAMESPACE 环境变量必须设置为您的 OpenShift 项目名称。如果没有设置,服务器会作为单节点集群("一个群集")的行为。例如:

    KUBERNETES_NAMESPACE=PROJECT_NAME
    Copy to Clipboard Toggle word wrap
  3. 应设置 KUBERNETES_LABELS 环境变量。这应该与在服务级别设置的标签匹配。如果没有设置,则应用程序之外的 pod(您的命名空间中的某个 pod)将尝试加入。例如:

    KUBERNETES_LABELS=application=APP_NAME
    Copy to Clipboard Toggle word wrap
  4. 必须将授权授予 Pod 在 下运行的服务帐户,以允许访问 Kubernetes 的 REST API。这通过 OpenShift CLI 完成。以下示例在当前项目命名空间中使用 default 服务帐户:

    oc policy add-role-to-user view system:serviceaccount:$(oc project -q):default -n $(oc project -q)
    Copy to Clipboard Toggle word wrap

    在项目命名空间中使用 eap-service-account:

    oc policy add-role-to-user view system:serviceaccount:$(oc project -q):eap-service-account -n $(oc project -q)
    Copy to Clipboard Toggle word wrap
    注意

8.7.1.2. 配置 DNS_PING

使用 DNS_PING JGroups 发现机制:

  1. JGroups 协议堆栈必须配置为使用 DNS_PING 作为发现机制。

    您可以通过将 JGROUPS_PING_PROTOCOL 环境变量设置为 dns.DNS_PING 来做到这一点

    JGROUPS_PING_PROTOCOL=dns.DNS_PING
    Copy to Clipboard Toggle word wrap
  2. OPENSHIFT_DNS_PING_SERVICE_NAME 环境变量必须设置为集群的 ping 服务的名称。

    OPENSHIFT_DNS_PING_SERVICE_NAME=PING_SERVICE_NAME
    Copy to Clipboard Toggle word wrap
  3. OPENSHIFT_DNS_PING_SERVICE_PORT 环境变量应设置为公开 ping 服务的端口号。DNS_PING 协议尝试从 SRV 记录辨别端口,否则默认为 8888

    OPENSHIFT_DNS_PING_SERVICE_PORT=PING_PORT
    Copy to Clipboard Toggle word wrap
  4. 必须定义公开 ping 端口的 ping 服务。这个服务应该是无头的(ClusterIP=None),且必须具有以下内容:

    1. 端口必须命名为。
    2. 该服务必须使用 service. alpha.kubernetes.io/tolerate-unready-endpointspublishNotReadyAddresses 属性进行注解,两者都设置为 true

      注意
      • 使用 service.alpha.kubernetes.io/tolerate-unready-endpointspublishNotReadyAddresses 属性来确保 ping 服务在较旧和较新的 OpenShift 版本中正常工作。
      • 省略这些注解会导致每个节点在启动过程中形成自己的"集群"。然后,每个节点在启动后将其集群合并到其他节点的集群中,因为其他节点在启动后才会检测到。
      kind: Service
      apiVersion: v1
      spec:
          publishNotReadyAddresses: true
          clusterIP: None
          ports:
          - name: ping
            port: 8888
          selector:
              deploymentConfig: eap-app
      metadata:
          name: eap-app-ping
          annotations:
              service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
              description: "The JGroups ping port for clustering."
      Copy to Clipboard Toggle word wrap
注意

DNS_PING 不需要对服务帐户进行任何修改,并使用默认权限。

8.7.2. 将 JGroups 配置为加密集群流量

若要加密 OpenShift 上 JBoss EAP 的集群流量,您必须在 JBoss EAP 配置中配置 JGroups 协议堆栈,以使用 SYM_ENCRYPTASYM_ENCRYPT 协议。

虽然您可以使用自定义 standalone-openshift.xml 配置文件,但 建议您使用环境变量 在镜像构建中配置 JGroups。

以下说明使用环境变量来配置用于 OpenShift 镜像的 JBoss EAP 集群流量加密的协议。

重要

SYM_ENCRYPTASYM_ENCRYPT 协议彼此不兼容。无法从两个独立的子集群组成一个超级集群,一个使用 SYM_ENCRYPT 协议加密集群流量,另一个使用 ASYM_ENCRYPT 协议加密。同样,在执行滚动升级时,该协议对于源和目标集群需要相同。

8.7.2.1. Configuring SYM_ENCRYPT

使用 SYM_ENCRYPT 协议加密 JGroups 集群流量:

  1. JGroups 协议堆栈必须配置为使用 SYM_ENCRYPT 作为加密协议。

    您可以通过将 JGROUPS_ENCRYPT_PROTOCOL 环境变量设置为 SYM_ENCRYPT 来做到这一点

    JGROUPS_ENCRYPT_PROTOCOL=SYM_ENCRYPT
    Copy to Clipboard Toggle word wrap
  2. JGROUPS_ENCRYPT_SECRET 环境变量必须设置为包含用于保护 JGroups 通信的 JGroups 密钥存储文件的机密的名称。如果没有设置,则不会加密群集通信并发出警告。例如:

    JGROUPS_ENCRYPT_SECRET=eap7-app-secret
    Copy to Clipboard Toggle word wrap
  3. JGROUPS_ENCRYPT_KEYSTORE_DIR 环境变量必须设置为通过 JGROUPS_ENCRYPT_SECRET 变量指定的机密中密钥存储文件的目录路径。如果没有设置,则不会加密群集通信并发出警告。例如:

    JGROUPS_ENCRYPT_KEYSTORE_DIR=/etc/jgroups-encrypt-secret-volume
    Copy to Clipboard Toggle word wrap
  4. JGROUPS_ENCRYPT_KEYSTORE 环境变量必须设置为通过 JGROUPS_ENCRYPT_SECRET 变量指定的机密中的密钥存储文件的名称。如果没有设置,则不会加密群集通信并发出警告。例如:

    JGROUPS_ENCRYPT_KEYSTORE=jgroups.jceks
    Copy to Clipboard Toggle word wrap
  5. JGROUPS_ENCRYPT_NAME 环境变量必须设置为与服务器证书关联的名称。如果没有设置,则不会加密群集通信并发出警告。例如:

    JGROUPS_ENCRYPT_NAME=jgroups
    Copy to Clipboard Toggle word wrap
  6. JGROUPS_ENCRYPT_PASSWORD 环境变量必须设置为用于访问密钥存储和证书的密码。如果没有设置,则不会加密群集通信并发出警告。例如:

    JGROUPS_ENCRYPT_PASSWORD=mypassword
    Copy to Clipboard Toggle word wrap

8.7.2.2. Configuring ASYM_ENCRYPT

注意

JBoss EAP 7.4 包括新版本的 ASYM_ENCRYPT 协议。之前版本的协议已被弃用。如果指定 JGROUPS_CLUSTER_PASSWORD 环境变量,则使用已弃用的协议版本,并在 pod 日志中显示警告。

要使用 ASYM_ENCRYPT 协议加密 JGroups 集群流量,请指定 ASYM_ENCRYPT 作为加密协议,并将它配置为使用 elytron 子系统中配置的密钥存储。

-e JGROUPS_ENCRYPT_PROTOCOL="ASYM_ENCRYPT" \
-e JGROUPS_ENCRYPT_SECRET="encrypt_secret" \
-e JGROUPS_ENCRYPT_NAME="encrypt_name" \
-e JGROUPS_ENCRYPT_PASSWORD="encrypt_password" \
-e JGROUPS_ENCRYPT_KEYSTORE="encrypt_keystore" \
-e JGROUPS_CLUSTER_PASSWORD="cluster_password"
Copy to Clipboard Toggle word wrap

8.7.3. 扩展 pod 的注意事项

根据 JGroups 中的发现机制,启动节点将搜索现有集群协调器节点。如果在给定超时内找不到协调器节点,则起始节点会假定它是第一个成员,它会占用协调器状态。

当多个节点同时启动时,它们都假定第一个成员为第一个成员,从而导致使用多个分区的分割集群。例如,使用 DeploymentConfig API 扩展从 0 到 2 个 pod 可能会导致分割集群创建。为避免这种情况,您需要启动第一个 pod,然后再扩展至所需 pod 数量。

注意

默认情况下,EAP Operator 使用 StatefulSet API,按顺序启动 pod,即逐个启动 pod,从而防止创建拆分集群。

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2026 Red Hat
返回顶部