Data Grid Operator 指南


Red Hat Data Grid 8.2

在 OpenShift 上创建 Data Grid 集群

Red Hat Customer Content Services

摘要

Data Grid Operator 提供操作智能,并减少了在 OpenShift 上部署 Data Grid 的管理复杂性。

Red Hat Data Grid

Data Grid 是一个高性能分布式内存数据存储。

无架构数据结构
将不同对象存储为键值对的灵活性。
基于网格的数据存储
旨在在集群中分发和复制数据。
弹性扩展
动态调整节点数量,以便在不中断服务的情况下满足需求。
数据互操作性
从不同端点在网格中存储、检索和查询数据。

Data Grid 文档

红帽客户门户网站中提供了 Data Grid 的文档。

Data Grid 下载

访问红帽客户门户上的 Data Grid 软件下载

注意

您必须有一个红帽帐户才能访问和下载数据中心软件。

使开源包含更多

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。有关更多详情,请参阅我们的首席技术官 Chris Wright 提供的消息

第 1 章 安装 Data Grid Operator

将 Data Grid Operator 安装到 OpenShift 命名空间中,以创建和管理 Data Grid 集群。

1.1. 在 Red Hat OpenShift 上安装 Data Grid Operator

在 OpenShift 上创建 Data Grid Operator 的订阅,以便您可以安装不同的 Data Grid 版本并接收自动更新。

自动更新首先应用到 Data Grid Operator,然后用于每个 Data Grid 节点。Data Grid Operator 一次更新集群一个节点,安全地关闭每个节点,然后在进入下一节点前,使用更新的版本重新上线。

先决条件

  • 访问在 OpenShift 上运行的 OperatorHub。一些 OpenShift 环境(如 OpenShift Container Platform)可能需要管理员凭证。
  • 如果您计划将其安装到特定命名空间中,则具有 Data Grid Operator 的 OpenShift 项目。

流程

  1. 登录 OpenShift Web 控制台。
  2. 导航到 OperatorHub
  3. 查找并选择 Data Grid Operator。
  4. 选择 Install and continue to Create Operator Subscription
  5. 指定订阅的选项。

    安装模式
    您可以将 Data Grid Operator 安装到 特定命名空间所有命名空间中
    更新频道
    获取 Data Grid Operator 8.2.x 的更新。
    批准策略
    从 8.2.x 频道自动安装更新,或需要在安装前批准。
  6. 选择 Subscribe 来安装 Data Grid Operator。
  7. 进入 Installed Operators 以验证 Data Grid Operator 安装。

1.2. 使用命令行安装 Data Grid Operator

作为通过 OpenShift 上的 OperatorHub 安装 Data Grid Operator 的替代选择,请使用 oc 客户端来创建订阅。

先决条件

  • 有一个 oc 客户端。

流程

  1. 设置项目。

    1. 为 Data Grid Operator 创建一个项目。
    2. 如果您希望 Data Grid Operator 只控制特定的 Data Grid 集群,请为该集群创建一个项目。

      $ oc new-project ${INSTALL_NAMESPACE} 
      1
      
      $ oc new-project ${WATCH_NAMESPACE} 
      2
      Copy to Clipboard Toggle word wrap
      1
      创建一个安装 Data Grid Operator 的项目。
      2
      如果您不希望 Data Grid Operator 监控所有项目,可以选择为特定 Data Grid 集群创建项目。
  2. 创建 OperatorGroup 资源。

    控制所有 Data Grid 集群

    $ oc apply -f - << EOF
    apiVersion: operators.coreos.com/v1
    kind: OperatorGroup
    metadata:
     name: datagrid
     namespace: ${INSTALL_NAMESPACE}
    EOF
    Copy to Clipboard Toggle word wrap

    控制特定 Data Grid 集群

    $ oc apply -f - << EOF
    apiVersion: operators.coreos.com/v1
    kind: OperatorGroup
    metadata:
     name: datagrid
     namespace: ${INSTALL_NAMESPACE}
    spec:
     targetNamespaces:
     - ${WATCH_NAMESPACE}
    EOF
    Copy to Clipboard Toggle word wrap

  3. 为 Data Grid Operator 创建订阅。

    $ oc apply -f - << EOF
    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
     name: datagrid-operator
     namespace: ${INSTALL_NAMESPACE}
    spec:
     channel: 8.2.x
     installPlanApproval: Automatic
     name: datagrid
     source: redhat-operators
     sourceNamespace: openshift-marketplace
    EOF
    Copy to Clipboard Toggle word wrap
    注意

    如果要手动批准来自 8.2.x 频道的更新,请将 spec.installPlanApproval 字段的值更改为 Manual

  4. 验证安装。

    $ oc get pods -n ${INSTALL_NAMESPACE}
    NAME                                   READY   STATUS
    infinispan-operator-<id>               1/1     Running
    Copy to Clipboard Toggle word wrap

1.3. Data Grid 集群升级

当新版本可用时,Data Grid Operator 可以自动升级 Data Grid 集群。如果您希望控制它们的时间,也可以手动执行升级。

升级通知

如果您手动升级 Data Grid 集群,并将 Data Grid Operator 订阅的频道从 8.1.x 升级到 8.2.x,您应该尽快为最新的 Data Grid 8.2.x 版本应用升级,以避免潜在的数据丢失,从而导致 8.2.0 的问题出现问题。如需更多信息,请参阅 Data Grid Operator 8.2 发行注记

第 2 章 Infinispan CR 入门

安装 Data Grid Operator 后,了解如何在 OpenShift 上创建 Data Grid 集群。

2.1. Infinispan 自定义资源(CR)

Data Grid Operator 添加了一个类型为 Infinispan 的新自定义资源(CR),可让您将 Data Grid 集群作为 OpenShift 中的复杂单元处理。

Data Grid Operator 会监视您用于实例化和配置 Data Grid 集群并管理 OpenShift 资源(如 StatefulSets 和 Services)的 Infinispan 自定义资源(CR)。这样,Infinispan CR 是 OpenShift 上 Data Grid 的主要接口。

最小 Infinispan CR 如下:

apiVersion: infinispan.org/v1
kind: Infinispan
metadata:
  name: example-infinispan
spec:
  replicas: 2
Copy to Clipboard Toggle word wrap
Expand
字段描述

apiVersion

声明 Infinispan API 的版本。

kind

声明 Infinispan CR。

metadata.name

为您的 Data Grid 集群指定一个名称。

spec.replicas

指定 Data Grid 集群中的 pod 数量。

2.2. 创建 Data Grid 集群

使用 Data Grid Operator 创建两个或多个 Data Grid pod 的集群。

先决条件

  • 安装 Data Grid Operator。
  • 有一个 oc 客户端。

流程

  1. Infinispan CR 中指定集群中带有 spec.replicas 的 Data Grid pod 数量。

    例如,创建一个 cr_minimal.yaml 文件,如下所示:

    $ cat > cr_minimal.yaml<<EOF
    apiVersion: infinispan.org/v1
    kind: Infinispan
    metadata:
      name: example-infinispan
    spec:
      replicas: 2
    EOF
    Copy to Clipboard Toggle word wrap
  2. 应用 Infinispan CR。

    $ oc apply -f cr_minimal.yaml
    Copy to Clipboard Toggle word wrap
  3. 观察 Data Grid Operator 创建 Data Grid pod。

    $ oc get pods -w
    
    NAME                        READY  STATUS              RESTARTS   AGE
    example-infinispan-1        0/1    ContainerCreating   0          4s
    example-infinispan-2        0/1    ContainerCreating   0          4s
    example-infinispan-3        0/1    ContainerCreating   0          5s
    infinispan-operator-0       1/1    Running             0          3m
    example-infinispan-3        1/1    Running             0          8s
    example-infinispan-2        1/1    Running             0          8s
    example-infinispan-1        1/1    Running             0          8s
    Copy to Clipboard Toggle word wrap

后续步骤

尝试更改 replicas 值: 并观察 Data Grid Operator 扩展集群或缩减。

2.3. 验证 Data Grid 集群

检查 Data Grid pod 是否已成功组成集群。

流程

  • 检索 Data Grid Operator 的 Infinispan CR。

    $ oc get infinispan -o yaml
    Copy to Clipboard Toggle word wrap

    响应表示 Data Grid pod 已收到集群视图,如下例所示:

    conditions:
      - message: 'View: [example-infinispan-0, example-infinispan-1]'
        status: "True"
        type: wellFormed
    Copy to Clipboard Toggle word wrap
提示

对自动脚本执行以下操作:

$ oc wait --for condition=wellFormed --timeout=240s infinispan/example-infinispan
Copy to Clipboard Toggle word wrap

另外,您还可以从日志中检索集群视图,如下所示:

$ oc logs example-infinispan-0 | grep ISPN000094

INFO  [org.infinispan.CLUSTER] (MSC service thread 1-2) \
ISPN000094: Received new cluster view for channel infinispan: \
[example-infinispan-0|0] (1) [example-infinispan-0]

INFO  [org.infinispan.CLUSTER] (jgroups-3,example-infinispan-0) \
ISPN000094: Received new cluster view for channel infinispan: \
[example-infinispan-0|1] (2) [example-infinispan-0, example-infinispan-1]
Copy to Clipboard Toggle word wrap

2.4. 停止并启动 Data Grid 集群

以安全、排序的方式停止和启动 Data Grid pod,以正确保留集群状态。

Data Grid 服务 pod 的集群必须使用在关闭前存在的相同 pod 数量重启。这允许 Data Grid 恢复集群中的数据分布。在 Data Grid Operator 完全重启后,可以安全地添加和删除 pod。

流程

  1. spec.replicas 字段更改为 0 以停止 Data Grid 集群。

    spec:
      replicas: 0
    Copy to Clipboard Toggle word wrap
  2. 在重启集群前,请确保具有正确的 pod 数量。

    $ oc get infinispan example-infinispan -o=jsonpath='{.status.replicasWantedAtRestart}'
    Copy to Clipboard Toggle word wrap
  3. spec.replicas 字段更改为同一数量的 pod,以重启 Data Grid 集群。

    spec:
      replicas: 6
    Copy to Clipboard Toggle word wrap

第 3 章 设置 Data Grid 服务

使用 Data Grid Operator 创建 Cache 服务或 Data Grid 服务 pod 的集群。

重要

如果没有为 spec.service.type 字段指定值,Data Grid Operator 会默认创建 Cache 服务 pod。

在创建 pod 后,您无法更改 spec.service.type 字段。要更改服务类型,您必须删除现有 pod 并创建新的 pod。

3.1. 服务类型

服务是有状态的应用程序,基于数据网格服务器镜像,提供灵活、强大的内存中数据存储。

3.1.1. Data Grid 服务

如果需要,部署 Data Grid 服务 pod 的集群:

  • 使用跨站点复制在全局集群中备份数据。
  • 使用任何有效配置创建缓存。
  • 添加基于文件的缓存存储,将数据保存在持久性卷中。
  • 使用 Data Grid Query API 查询跨缓存的值。
  • 使用高级数据网格特性和功能。

3.1.2. 缓存服务

如果您希望使用最小配置进行低延迟数据存储,请部署缓存服务 pod 的集群。

缓存服务 pod 仅提供易失性存储,这意味着当您修改 Infinispan CR 或更新 Data Grid 集群的版本时会丢失所有数据。但是,如果您只想在没有配置的开销的情况下快速提供具有高性能缓存的应用程序,您可以使用 Cache 服务 pod:

  • 数据存储需求上线或缩减时,自动缩放以满足容量。
  • 同步分发数据以确保一致性。
  • 在集群中复制缓存中的每个条目。
  • 将缓存条目存储为 off-heap,并将驱除用于 JVM 效率。
  • 确保与默认分区处理配置保持一致。
重要

红帽建议您部署 Data Grid 服务 pod 而不是 Cache 服务 pod。

计划在以后的 Infinispan CRD 版本中删除缓存服务。网格服务会一直处于活跃的开发阶段,并将继续从新功能中获益,并改进的工具来自动化复杂的操作,如升级集群和迁移数据。

3.2. 创建 Data Grid 服务 pod

要使用自定义缓存定义以及 Data Grid 功能(如跨站点复制),请创建 Data Grid 服务 pod 的集群。

流程

  1. 创建一个 Infinispan CR,以设置 spec.service.type: DataGrid 并配置任何其他 Data Grid 服务资源。

    apiVersion: infinispan.org/v1
    kind: Infinispan
    metadata:
      name: example-infinispan
    spec:
      replicas: 2
      service:
        type: DataGrid
    Copy to Clipboard Toggle word wrap
  2. 应用 Infinispan CR 以创建集群。

3.2.1. Data Grid 服务 CR

本主题描述了 Data Grid 服务 pod 的 Infinispan CR。

apiVersion: infinispan.org/v1
kind: Infinispan
metadata:
  name: example-infinispan
  annotations:
    infinispan.org/monitoring: 'true'
spec:
  replicas: 6
  service:
    type: DataGrid
    container:
      storage: 2Gi
      ephemeralStorage: false
      storageClassName: my-storage-class
    sites:
      local:
      name: azure
      expose:
        type: LoadBalancer
      locations:
      - name: azure
        url: openshift://api.azure.host:6443
        secretName: azure-token
      - name: aws
        clusterName: example-infinispan
        namespace: rhdg-namespace
        url: openshift://api.aws.host:6443
        secretName: aws-token
  security:
    endpointSecretName: endpoint-identities
    endpointEncryption:
        type: Secret
        certSecretName: tls-secret
  container:
    extraJvmOpts: "-XX:NativeMemoryTracking=summary"
    cpu: "1000m"
    memory: 1Gi
  logging:
    categories:
      org.infinispan: debug
      org.jgroups: debug
      org.jgroups.protocols.TCP: error
      org.jgroups.protocols.relay.RELAY2: error
  expose:
    type: LoadBalancer
  affinity:
    podAntiAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 100
        podAffinityTerm:
          labelSelector:
            matchLabels:
              app: infinispan-pod
              clusterName: example-infinispan
              infinispan_cr: example-infinispan
          topologyKey: "kubernetes.io/hostname"
Copy to Clipboard Toggle word wrap
Expand
字段描述

metadata.name

命名您的数据网格集群。

metadata.annotations.infinispan.org/monitoring

为集群自动创建 ServiceMonitor

spec.replicas

指定集群中的 pod 数量。

spec.service.type

配置类型 Data Grid 服务。DataGrid 的值为 DataGrid 创建一个具有 Data Grid 服务 pod 的集群。

spec.service.container

为 Data Grid 服务 pod 配置存储资源。

spec.service.sites

配置跨站点复制。

spec.security.endpointSecretName

指定包含 Data Grid 用户凭证的身份验证 secret。

spec.security.endpointEncryption

指定 TLS 证书和密钥存储来加密客户端连接。

spec.container

指定 Data Grid pod 的 JVM、CPU 和内存资源。

spec.logging

配置 Data Grid 日志记录类别。

spec.expose

控制如何在网络上公开数据网格端点。

spec.affinity

配置反关联性策略,以保证数据网格可用性。

3.3. 创建缓存服务 pod

使用缓存服务 pod 创建 Data Grid 集群,用于带有最小配置的易失性低延迟数据存储。

流程

  1. 创建一个 Infinispan CR,以设置 spec.service.type: Cache 并配置任何其他缓存服务资源。

    apiVersion: infinispan.org/v1
    kind: Infinispan
    metadata:
      name: example-infinispan
    spec:
      replicas: 2
      service:
        type: Cache
    Copy to Clipboard Toggle word wrap
  2. 应用 Infinispan CR 以创建集群。

3.3.1. 缓存服务 CR

本主题描述了 Cache 服务 pod 的 Infinispan CR。

apiVersion: infinispan.org/v1
kind: Infinispan
metadata:
  name: example-infinispan
  annotations:
    infinispan.org/monitoring: 'true'
spec:
  replicas: 2
  service:
    type: Cache
    replicationFactor: 2
  autoscale:
    maxMemUsagePercent: 70
    maxReplicas: 5
    minMemUsagePercent: 30
    minReplicas: 2
  security:
    endpointSecretName: endpoint-identities
    endpointEncryption:
        type: Secret
        certSecretName: tls-secret
  container:
    extraJvmOpts: "-XX:NativeMemoryTracking=summary"
    cpu: "2000m"
    memory: 1Gi
  logging:
    categories:
      org.infinispan: trace
      org.jgroups: trace
  expose:
    type: LoadBalancer
  affinity:
    podAntiAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 100
        podAffinityTerm:
          labelSelector:
            matchLabels:
              app: infinispan-pod
              clusterName: example-infinispan
              infinispan_cr: example-infinispan
          topologyKey: "kubernetes.io/hostname"
Copy to Clipboard Toggle word wrap
Expand
字段描述

metadata.name

命名您的数据网格集群。

metadata.annotations.infinispan.org/monitoring

为集群自动创建 ServiceMonitor

spec.replicas

指定集群中的 pod 数量。如果启用自动扩展功能,此字段指定 pod 的初始数量。

spec.service.type

配置类型 Data Grid 服务。Cache 值创建具有缓存服务 pod 的集群。

spec.service.replicationFactor

设置集群中每个条目的副本数。Cache 服务 pod 的默认值为两个,它会复制每个缓存条目以避免数据丢失。

spec.autoscale

启用并配置自动扩展。

spec.security.endpointSecretName

指定包含 Data Grid 用户凭证的身份验证 secret。

spec.security.endpointEncryption

指定 TLS 证书和密钥存储来加密客户端连接。

spec.container

指定 Data Grid pod 的 JVM、CPU 和内存资源。

spec.logging

配置 Data Grid 日志记录类别。

spec.expose

控制如何在网络上公开数据网格端点。

spec.affinity

配置反关联性策略,以保证数据网格可用性。

3.4. 自动扩展

Data Grid Operator 可以根据内存用量创建或删除 pod,来监控缓存服务 pod 上的默认缓存,以自动扩展或缩减集群。

重要

自动扩展仅适用于 Cache 服务 pod 的集群。Data Grid Operator 不对 Data Grid 服务 pod 的集群执行自动扩展。

当您启用自动扩展时,您可以定义允许 Data Grid Operator 来决定何时需要创建和删除 pod 的内存用量阈值。Data Grid Operator 会监控默认缓存的统计信息,并在内存用量达到配置的阈值、扩展或缩减集群时。

最大阈值

此阈值为集群中 pod 在扩展或执行驱除前可以使用的内存量设置上限。当 Data Grid Operator 检测到任何节点达到您配置的最大内存量时,它会创建一个新节点(如果可能)。如果 Data Grid Operator 无法创建新节点,则它在内存用量达到 100% 时执行驱除。

最小阈值

此阈值为您的数据网格集群中内存用量设置较低边界。当 Data Grid Operator 检测到内存用量低于最小值时,它会关闭 pod。

仅限默认缓存

自动扩展功能只适用于默认缓存。如果您计划在集群中添加其他缓存,则不应在 Infinispan CR 中包含 autoscale 字段。在这种情况下,您应该使用驱除来控制每个节点上的数据容器的大小。

3.4.1. 配置自动扩展

如果使用 Cache 服务 pod 创建集群,您可以将 Data Grid Operator 配置为自动扩展集群。

流程

  1. spec.autoscale 资源添加到 Infinispan CR 中,以启用自动扩展。

    注意

    autoscale.disabled 字段设置 true,以禁用自动扩展。

  2. 使用以下字段为自动扩展配置阈值:

    Expand
    字段描述

    spec.autoscale.maxMemUsagePercent

    指定每个节点上的内存用量的最大阈值(百分比)。

    spec.autoscale.maxReplicas

    指定集群的最大缓存服务 pod 数量。

    spec.autoscale.minMemUsagePercent

    指定集群内存用量的最小阈值(百分比)。

    spec.autoscale.minReplicas

    指定集群的最小缓存服务 pod 数量。

    例如,将以下内容添加到 Infinispan CR 中:

    spec:
      service:
        type: Cache
      autoscale:
        disabled: false
        maxMemUsagePercent: 70
        maxReplicas: 5
        minMemUsagePercent: 30
        minReplicas: 2
    Copy to Clipboard Toggle word wrap
  3. 应用更改。

3.5. 分配存储资源

您可以为 Data Grid 服务 pod 分配存储,但不能为缓存服务 pod 分配存储。

默认情况下,Data Grid Operator 为持久性卷声明分配 1Gi。但是,您应该调整 Data Grid 服务 pod 可用的存储量,以便 Data Grid 可以在关闭过程中保留集群状态。

重要

如果可用的容器存储小于可用内存量,则可能会出现数据丢失。

流程

  1. 使用 spec.service.container.storage 字段分配存储资源。
  2. (可选)根据需要配置 ephemeralStoragestorageClassName 字段。

    spec:
      service:
        type: DataGrid
        container:
          storage: 2Gi
          ephemeralStorage: false
          storageClassName: my-storage-class
    Copy to Clipboard Toggle word wrap
  3. 应用更改。
Expand
字段描述

spec.service.container.storage

指定 Data Grid 服务 pod 的存储量。

spec.service.container.ephemeralStorage

定义存储是临时还是永久的。将值设为 true 以使用临时存储,这意味着当集群关闭或重启时,存储中的所有数据都会被删除。默认值为 false,这意味着存储是永久的。

spec.service.container.storageClassName

指定用于持久性卷声明(PVC)的 StorageClass 对象的名称。如果包含此字段,则必须指定现有存储类作为值。如果没有包括此字段,持久性卷声明将使用将 storageclass.kubernetes.io/is-default-class 注解设置为 true 的存储类。

3.5.1. 持久性卷声明 (PVC)

Data Grid Operator 创建一个持久性卷声明(PVC),并在以下位置挂载容器存储:
/opt/infinispan/server/data

缓存

在创建缓存时,Data Grid 会永久存储其配置,以便缓存在集群重启后可用。这适用于 Cache 服务和 Data Grid 服务 pod。

data

数据始终在缓存服务 pod 的集群中易失性。关闭集群时,您永久丢失了数据。

如果您希望 Data Grid 服务 pod 在集群关闭过程中保留数据,使用基于文件的缓存存储,方法是将 < file-store /> 元素添加到 Data Grid 缓存配置中。

3.6. JVM、CPU 和内存

您可以在 Infinispan CR 中设置 JVM 选项,以及 CPU 和内存分配。

spec:
  container:
    extraJvmOpts: "-XX:NativeMemoryTracking=summary"
    cpu: "1000m"
    memory: 1Gi
Copy to Clipboard Toggle word wrap
Expand
字段描述

spec.container.extraJvmOpts

指定 JVM 选项。

spec.container.cpu

将主机 CPU 资源分配给 Data Grid pod,以 CPU 单位计算。

spec.container.memory

将主机内存分配给 Data Grid pod,以字节为单位。

当 Data Grid Operator 创建 Data Grid 集群时,它使用 spec.container.cpuspec.container.memory

  • 确保 OpenShift 有足够的容量来运行 Data Grid 节点。默认情况下,Data Grid Operator 从 OpenShift 调度程序请求 512Mi 内存和 0.5
  • 约束节点资源使用情况。Data Grid Operator 将 cpumemory 的值设置为资源限值。

3.7. 调整日志级别

当您需要调试问题时,对不同的 Data Grid 日志记录类别更改级别。您还可以调整日志级别,以减少特定类别的消息数量,以最大程度降低容器资源的使用。

流程

  1. 使用 Infinispan CR 中的 spec.logging.categories 字段配置 Data Grid 日志记录。

    spec:
      logging:
        categories:
          org.infinispan: debug
          org.jgroups: debug
    Copy to Clipboard Toggle word wrap
  2. 应用更改。
  3. 根据需要从 Data Grid pod 检索日志。

    $ oc logs -f $POD_NAME
    Copy to Clipboard Toggle word wrap

3.7.1. 日志记录参考

查找有关日志类别和级别的信息。

Expand
表 3.1. 日志类别
root 类别描述默认级别

org.infinispan

Data Grid 消息

info

org.jgroups

集群传输信息

info

Expand
表 3.2. 日志级别
日志级别描述

trace

提供有关运行应用程序状态的详细信息。这是最详细的日志级别。

debug

表示单个请求或活动的进度。

info

指明应用程序的整体进度,包括生命周期事件。

warn

指明可能导致错误或降低性能的情况。

错误

指明可能会阻止操作或活动成功但不会阻止应用程序运行的错误条件。

垃圾回收(GC)信息

默认情况下,Data Grid Operator 不会记录 GC 信息。您可以使用以下 JVM 选项将 GC 消息定向到 stdout

extraJvmOpts: "-Xlog:gc*:stdout:time,level,tags"
Copy to Clipboard Toggle word wrap

3.8. 为 Data Grid 资源添加标签

将键/值标签附加到 Data Grid Operator 创建和管理的 pod 和服务。这些标签可帮助您识别对象之间的关系,以更好地组织和监控数据网格资源。

注意

红帽订阅标签自动应用到 Data Grid pod。

流程

  1. 打开 Infinispan CR 进行编辑。
  2. 添加您想要 Data Grid Operator 的任何标签,以附加到带有 metadata.annotations 的资源。
  3. 使用 metadata.labels 为您的标签添加值。

    1. 使用 metadata.annotations.infinispan.org/targetLabels 字段指定要附加到服务的标签。
    2. 使用 metadata.annotations.infinispan.org/podTargetLabels 字段指定您要附加到 pod 的标签。
    3. 使用 metadata.labels 字段为您的标签定义值。

      apiVersion: infinispan.org/v1
      kind: Infinispan
      metadata:
        annotations:
          infinispan.org/targetLabels: svc-label1, svc-label2
          infinispan.org/podTargetLabels: pod-label1, pod-label2
        labels:
          svc-label1: svc-value1
          svc-label2: svc-value2
          pod-label1: pod-value1
          pod-label2: pod-value2
          # The operator does not attach these labels to resources.
          my-label: my-value
          environment: development
      Copy to Clipboard Toggle word wrap
  4. 应用 Infinispan CR。

第 4 章 配置身份验证

应用程序用户需要凭证才能访问 Data Grid 集群。您可以使用默认生成的凭证或自行添加。

4.1. 默认凭证

Data Grid Operator 生成存储在名为 的验证 secret 中的 base64 编码的默认凭证

Expand
用户名Secret 名称描述

developer

example-infinispan-generated-secret

默认应用程序用户的凭证。

operator

example-infinispan-generated-operator-secret

Data Grid Operator 用来与 Data Grid 资源交互的凭证。

4.2. 检索凭证

从身份验证 secret 获取凭证以访问 Data Grid 集群。

流程

  • 从身份验证 secret 检索凭据。

    $ oc get secret example-infinispan-generated-secret
    Copy to Clipboard Toggle word wrap

    Base64-decode 凭证。

    $ oc get secret example-infinispan-generated-secret \
    -o jsonpath="{.data.identities\.yaml}" | base64 --decode
    
    credentials:
    - username: developer
      password: dIRs5cAAsHIeeRIL
    Copy to Clipboard Toggle word wrap

4.3. 添加自定义用户凭证

使用自定义凭据配置对 Data Grid 集群端点的访问。

注意

修改 spec.security.endpointSecretName 会触发集群重启。

流程

  1. 使用要添加的凭证创建一个 identity .yaml 文件。

    credentials:
    - username: myfirstusername
      password: changeme-one
    - username: mysecondusername
      password: changeme-two
    Copy to Clipboard Toggle word wrap
  2. 从 identity .yaml 创建身份验证 secret。

    $ oc create secret generic --from-file=identities.yaml connect-secret
    Copy to Clipboard Toggle word wrap
  3. Infinispan CR 中使用 spec.security.endpointSecretName 指定身份验证 secret,然后应用更改。

    spec:
      security:
        endpointSecretName: connect-secret
    Copy to Clipboard Toggle word wrap

4.4. 更改 operator 密码

如果您不想使用自动生成的密码,您可以更改 operator 用户的密码。

流程

  • 更新 example-infinispan-generated-operator-secret secret 中的 password 密钥,如下所示:

    oc patch secret example-infinispan-generated-operator-secret -p='{"stringData":{"password": "supersecretoperatorpassword"}}'
    Copy to Clipboard Toggle word wrap
    注意

    您应该只更新 generated-operator-secret secret 中的密码 密钥。当您更新密码时,Data Grid Operator 会自动刷新该 secret 中的其他密钥。

4.5. 禁用用户身份验证

允许用户访问 Data Grid 集群和操作数据,而无需提供凭证。

重要

如果端点可以通过 spec.expose.type 从 OpenShift 集群外部访问,则不要禁用身份验证。您应该只在开发环境中禁用身份验证。

流程

  1. false 设置为 Infinispan CR 中的 spec.security.endpointAuthentication 字段的值。

    spec:
      security:
        endpointAuthentication: false
    Copy to Clipboard Toggle word wrap
  2. 应用更改。

第 5 章 配置客户端证书身份验证

将客户端信任存储添加到项目中,并将 Data Grid 配置为只允许来自存在有效证书的客户端的连接。这会确保客户端被公共证书颁发机构(CA)信任,从而提高部署的安全性。

5.1. 客户端证书身份验证

客户端证书身份验证会根据客户端存在的证书限制入站连接。

您可以将 Data Grid 配置为使用带有以下策略之一的信任存储:

validate

要验证客户端证书,Data Grid 需要包含签名机构证书链的任何部分的信任存储,通常是 root CA 证书。任何提供 CA 签名的证书的客户端都可以连接到 Data Grid。

如果使用 Validate 策略来验证客户端证书,还必须将客户端配置为提供有效的 Data Grid 凭证(如果启用身份验证)。

身份验证

除了 root CA 证书外,还需要包含所有公共客户端证书的信任存储。只有存在签名证书的客户端才能连接到 Data Grid。

如果使用 Authenticate 策略来验证客户端证书,您必须确保证书包含有效的 Data Grid 凭证,作为可分辨名称(DN)的一部分。

5.2. 启用客户端证书身份验证

要启用客户端证书身份验证,您可以将 Data Grid 配置为使用带有 ValidateAuthenticate 策略的信任存储。

流程

  1. Infinispan CR 中的 spec.security.endpointEncryption.clientCert 字段设置为 ValidateAuthenticate

    注意

    默认值为 None

  2. 使用 spec.security.endpointEncryption.clientCertSecretName 字段指定包含客户端信任存储的 secret。

    默认情况下,Data Grid Operator 需要名为 < cluster-name>-client-cert-secret 的信任存储 secret

    注意

    secret 对于 OpenShift 集群中的每个 Infinispan CR 实例必须是唯一的。当您删除 Infinispan CR 时,OpenShift 也会自动删除关联的 secret。

    spec:
      security:
        endpointEncryption:
            type: Service
            certSecretName: tls-secret
            clientCert: Validate
            clientCertSecretName: example-infinispan-client-cert-secret
    Copy to Clipboard Toggle word wrap
  3. 应用更改。

后续步骤

为 Data Grid Operator 提供包含所有客户端证书的信任存储。或者,您可以使用 PEM 格式提供证书,并让 Data Grid 生成客户端信任存储。

5.3. 提供客户端信任存储

如果您有一个包含所需证书的信任存储,您可以将其提供给 Data Grid Operator。

Data Grid 仅支持 PKCS12 格式的信任存储。

流程

  1. 指定包含客户端信任存储的 secret 名称,作为 metadata.name 字段的值。

    注意

    名称必须与 spec.security.endpointEncryption.clientCertSecretName 字段的值匹配。

  2. 使用 stringData.truststore-password 字段提供信任存储的密码。
  3. 使用 data.truststore.p12 字段指定信任存储。

    apiVersion: v1
    kind: Secret
    metadata:
      name: example-infinispan-client-cert-secret
    type: Opaque
    stringData:
        truststore-password: changme
    data:
        truststore.p12:  "<base64_encoded_PKCS12_trust_store>"
    Copy to Clipboard Toggle word wrap
  4. 应用更改。

5.4. 提供客户端证书

Data Grid Operator 可以从 PEM 格式的证书生成信任存储。

流程

  1. 指定包含客户端信任存储的 secret 名称,作为 metadata.name 字段的值。

    注意

    名称必须与 spec.security.endpointEncryption.clientCertSecretName 字段的值匹配。

  2. 将签名证书或 CA 证书捆绑包指定为 data.trust.ca 字段的值。
  3. 如果您使用 Authenticate 策略来验证客户端身份,请为每个客户端添加可通过 data.trust.cert.<name> 字段连接到 Data Grid 端点的证书。

    注意

    在生成信任存储时,Data Grid Operator 使用 < name > 值作为证书的别名。

  4. (可选)使用 stringData.truststore-password 字段为信任存储提供密码。

    如果没有提供,Data Grid Operator 会将 "password" 设置为信任存储密码。

    apiVersion: v1
    kind: Secret
    metadata:
      name: example-infinispan-client-cert-secret
    type: Opaque
    stringData:
        truststore-password: changme
    data:
        trust.ca: "<base64_encoded_CA_certificate>"
        trust.cert.client1: "<base64_encoded_client_certificate>"
        trust.cert.client2: "<base64_encoded_client_certificate>"
    Copy to Clipboard Toggle word wrap
  5. 应用更改。

第 6 章 配置加密

使用 Red Hat OpenShift 服务证书或自定义 TLS 证书加密客户端和 Data Grid pod 之间的连接。

6.1. 使用 Red Hat OpenShift 服务证书加密

Data Grid Operator 会自动生成由 Red Hat OpenShift 服务 CA 签名的 TLS 证书。然后,Data Grid Operator 将证书和密钥存储在 secret 中,以便您可以检索它们并用于远程客户端。

如果 Red Hat OpenShift 服务 CA 可用,Data Grid Operator 会将以下 spec.security.endpointEncryption 配置添加到 Infinispan CR 中:

spec:
  security:
    endpointEncryption:
      type: Service
      certServiceName: service.beta.openshift.io
      certSecretName: example-infinispan-cert-secret
Copy to Clipboard Toggle word wrap
Expand
字段描述

spec.security.endpointEncryption.certServiceName

指定提供 TLS 证书的服务。

spec.security.endpointEncryption.certSecretName

使用 PEM 格式的服务证书和密钥指定 secret。默认为 &lt ;cluster_name>-cert-secret

注意

服务证书使用 Data Grid 集群的内部 DNS 名称作为通用名称(CN),例如:

subject: CN = example-infinispan.mynamespace.svc

因此,服务证书只能在 OpenShift 中完全信任。如果要加密与 OpenShift 外部运行的客户端的连接,您应该使用自定义 TLS 证书。

服务证书在一年内有效,并在过期前自动替换。

6.2. 检索 TLS 证书

从加密 secret 获取 TLS 证书以创建客户端信任存储。

流程

  • 从加密 secret 检索 tls.crt,如下所示:

    $ oc get secret example-infinispan-cert-secret \
    -o jsonpath='{.data.tls\.crt}' | base64 --decode > tls.crt
    Copy to Clipboard Toggle word wrap

6.3. 禁用加密

您可以禁用加密,因此客户端不需要 TLS 证书来建立与 Data Grid 的连接。

重要

如果端点可以通过 spec.expose.type 从 OpenShift 集群外部访问,则不要禁用加密。您应该只为开发环境禁用加密。

流程

  1. None 设置为 Infinispan CR 中的 spec.security.endpointEncryption.type 字段的值。

    spec:
      security:
        endpointEncryption:
          type: None
    Copy to Clipboard Toggle word wrap
  2. 应用更改。

6.4. 使用自定义 TLS 证书

使用自定义 PKCS12 密钥存储或 TLS 证书/密钥对来加密客户端和数据网格集群间的连接。

先决条件

  • 创建密钥存储或证书 secret。

    注意

    secret 对于 OpenShift 集群中的每个 Infinispan CR 实例必须是唯一的。当您删除 Infinispan CR 时,OpenShift 也会自动删除关联的 secret。

流程

  1. 将加密 secret 添加到 OpenShift 命名空间中,例如:

    $ oc apply -f tls_secret.yaml
    Copy to Clipboard Toggle word wrap
  2. 使用 Infinispan CR 中的 spec.security.endpointEncryption.certSecretName 字段指定加密 secret。

    spec:
      security:
        endpointEncryption:
          type: Secret
          certSecretName: tls-secret
    Copy to Clipboard Toggle word wrap
  3. 应用更改。

6.4.1. 自定义加密 secret

本主题描述了自定义加密 secret 的资源。

密钥存储 secret

apiVersion: v1
kind: Secret
metadata:
  name: tls-secret
type: Opaque
stringData:
  alias: server
  password: changeme
data:
  keystore.p12:  "MIIKDgIBAzCCCdQGCSqGSIb3DQEHA..."
Copy to Clipboard Toggle word wrap

Expand
字段描述

stringData.alias

指定密钥存储的别名。

stringData.password

指定密钥存储密码。

data.keystore.p12

添加 base64 编码的密钥存储。

证书 secret

apiVersion: v1
kind: Secret
metadata:
  name: tls-secret
type: Opaque
data:
  tls.key:  "LS0tLS1CRUdJTiBQUk ..."
  tls.crt: "LS0tLS1CRUdJTiBDRVl ..."
Copy to Clipboard Toggle word wrap

Expand
字段描述

data.tls.key

添加以 base64 编码的 TLS 密钥。

data.tls.crt

添加以 base64 编码的 TLS 证书。

第 7 章 配置用户角色和权限

通过为用户配置基于角色的访问控制(RBAC)来保护对 Data Grid 服务的访问。这要求您为用户分配角色,以便他们具有访问缓存和数据网格资源的权限。

7.1. 启用安全授权

默认情况下,禁用授权,以确保向后兼容 Infinispan CR 实例。完成以下步骤以启用授权,并为 Data Grid 用户使用基于角色的访问控制(RBAC)。

流程

  1. true 设置为 Infinispan CR 中的 spec.security.authorization.enabled 字段的值。

    spec:
      security:
        authorization:
          enabled: true
    Copy to Clipboard Toggle word wrap
  2. 应用更改。

7.2. 用户角色和权限

Data Grid Operator 提供了一组与不同权限关联的默认角色。

Expand
表 7.1. 默认角色和权限
角色权限描述

admin

ALL

具有所有权限的超级用户,包括控制缓存管理器生命周期。

deployer

ALL_READ、ALL_WRITE、LISTEN、EXEC、MONITOR、CREATE

除了 应用程序 权限外,还可创建和删除 Data Grid 资源。

application

ALL_READ, ALL_WRITE, LISTEN, EXEC, MONITOR

观察者 权限外,还具有对 Data Grid 资源的读写访问权限。也可以侦听事件并执行服务器任务和脚本。

observer

ALL_READ, MONITOR

除了监控权限外,还具有对 Data Grid 资源 的读取访问权限。

monitor

MONITOR

可以查看 Data Grid 集群的统计信息。

Data Grid Operator 凭证

Data Grid Operator 生成用于与 Data Grid 集群进行身份验证的凭证来执行内部操作。默认情况下,当您启用安全授权时,Data Grid Operator 凭证会自动分配 admin 角色。

7.3. 为用户分配角色和权限

为用户分配角色,以控制用户是否有权访问数据网格集群资源。角色可以有不同的权限级别,从只读到不受限制的访问。

注意

用户隐式获取授权。例如,"admin"自动获得 admin 权限。名为 "deployer" 的用户会自动具有 deployer 角色,以此类推。

流程

  1. 创建一个 identity.yaml 文件,为用户分配角色。

    credentials:
      - username: admin
        password: changeme
      - username: my-user-1
        password: changeme
        roles:
          - admin
      - username: my-user-2
        password: changeme
        roles:
          - monitor
    Copy to Clipboard Toggle word wrap
  2. 从 identity .yaml 创建身份验证 secret。

    如有必要,请首先删除现有 secret。

    $ oc delete secret connect-secret --ignore-not-found
    $ oc create secret generic --from-file=identities.yaml connect-secret
    Copy to Clipboard Toggle word wrap
  3. Infinispan CR 中使用 spec.security.endpointSecretName 指定身份验证 secret,然后应用更改。

    spec:
      security:
        endpointSecretName: connect-secret
    Copy to Clipboard Toggle word wrap

7.4. 添加自定义角色和权限

您可以使用不同的权限组合定义自定义角色。

流程

  1. 打开 Infinispan CR 进行编辑。
  2. 使用 spec.security.authorization.roles 字段指定自定义角色及其关联的权限。

    spec:
      security:
        authorization:
          enabled: true
          roles:
            - name: my-role-1
              permissions:
                - ALL
            - name: my-role-2
              permissions:
                - READ
                - WRITE
    Copy to Clipboard Toggle word wrap
  3. 应用更改。

第 8 章 配置对 Data Grid 的网络访问

公开数据网格集群,以便您可以访问数据网格控制台、Data Grid 命令行界面(CLI)、REST API 和 Hot Rod 端点。

8.1. 获取内部连接的服务

默认情况下,Data Grid Operator 创建一个服务,可从 OpenShift 上运行的客户端提供对 Data Grid 集群的访问。

此内部服务具有与 Data Grid 集群相同的名称,例如:

metadata:
  name: example-infinispan
Copy to Clipboard Toggle word wrap

流程

  • 检查内部服务是否可用,如下所示:

    $ oc get services
    
    NAME               TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)
    example-infinispan ClusterIP   192.0.2.0        <none>        11222/TCP
    Copy to Clipboard Toggle word wrap

8.2. 通过负载均衡器公开数据网格

使用负载均衡器服务将 Data Grid 集群提供给在 OpenShift 外部运行的客户端。

注意

要使用未加密的 Hot Rod 客户端连接访问数据网格,您必须使用负载均衡器服务。

流程

  1. Infinispan CR 中包含 spec.expose
  2. 使用 spec.expose.type 字段指定 LoadBalancer 作为服务类型。
  3. (可选)使用 spec.expose.port 字段指定服务公开的网络端口。默认端口为 7900

    spec:
      expose:
        type: LoadBalancer
        port: 65535
    Copy to Clipboard Toggle word wrap
  4. 应用更改。
  5. 验证 -external 服务是否可用。

    $ oc get services | grep external
    
    NAME                         TYPE            CLUSTER-IP    EXTERNAL-IP   PORT(S)
    example-infinispan-external  LoadBalancer    192.0.2.24    hostname.com  11222/TCP
    Copy to Clipboard Toggle word wrap

8.3. 通过节点端口公开数据网格

使用节点端口服务在网络上公开 Data Grid 集群。

流程

  1. Infinispan CR 中包含 spec.expose
  2. 使用 spec.expose.type 字段将 NodePort 指定为服务类型。
  3. 配置 Data Grid 通过 spec.expose.nodePort 字段公开的端口。

    spec:
      expose:
        type: NodePort
        nodePort: 30000
    Copy to Clipboard Toggle word wrap
  4. 应用更改。
  5. 验证 -external 服务是否可用。

    $ oc get services | grep external
    
    NAME                         TYPE            CLUSTER-IP       EXTERNAL-IP   PORT(S)
    example-infinispan-external  NodePort        192.0.2.24       <none>        11222:30000/TCP
    Copy to Clipboard Toggle word wrap

8.4. 通过路由公开数据网格

使用带有 passthrough 加密的 OpenShift Route 使 Data Grid 集群在网络上可用。

流程

  1. Infinispan CR 中包含 spec.expose
  2. 使用 spec.expose.type 字段指定 Route 作为服务类型。
  3. (可选)使用 spec.expose.host 字段添加主机名。

    spec:
      expose:
        type: Route
        host: www.example.org
    Copy to Clipboard Toggle word wrap
  4. 应用更改。
  5. 验证路由是否可用。

    $ oc get routes
    
    NAME                 CLASS    HOSTS   ADDRESS   PORTS   AGE
    example-infinispan   <none>   *                 443     73s
    Copy to Clipboard Toggle word wrap

路由端口

当您创建路由时,它会在网络上公开一个端口,该端口接受客户端连接并将流量重定向到侦听端口 11222 的 Data Grid 服务。

路由可用的端口取决于您是否使用加密。

Expand
端口描述

80

加密被禁用。

443

加密已启用。

8.5. 网络服务

Data Grid Operator 创建和管理的网络服务的参考信息。

8.5.1. 内部服务

  • 允许 Data Grid pod 相互发现并组成集群。
  • 提供对同一 OpenShift 命名空间中的客户端对 Data Grid 端点的访问。
Expand
Service端口协议描述

<cluster_name>

11222

TCP

对 Data Grid 端点的内部访问

<cluster_name>-ping

8888

TCP

集群发现

8.5.2. 外部服务

提供对 OpenShift 外部或不同命名空间中的客户端对 Data Grid 端点的访问。

注意

您必须使用 Data Grid Operator 创建外部服务。它默认不可用。

Expand
Service端口协议描述

<cluster_name>-external

11222

TCP

外部访问 Data Grid 端点。

8.5.3. 跨站点服务

允许 Data Grid 在不同位置的集群之间备份数据。

Expand
Service端口协议描述

<cluster_name>-site

7900

TCP

JGroups RELAY2 频道进行跨站点通信。

第 9 章 监控数据网格服务

Data Grid 会公开 Prometheus 和 Grafana 可以用来监控和视觉化集群状态的指标。

注意

本文档解释了如何在 OpenShift Container Platform 上设置监控。如果您使用社区 Prometheus 部署,可能会找到这些说明作为常规指南。但是,您应该参阅 Prometheus 文档来安装和使用说明。

请参阅 Prometheus Operator 文档。

9.1. 创建 Prometheus 服务监控器

Data Grid Operator 会自动创建一个 Prometheus ServiceMonitor,从您的 Data Grid 集群中提取指标。

流程

在 OpenShift Container Platform 上为用户定义的项目启用监控。

当 Operator 检测到 Infinispan CR,并将监控注解设置为 true 时,Data Grid Operator 会执行以下操作:

  • 创建名为 < cluster_name>-monitorServiceMonitor
  • 如果尚未明确设置,请将 infinispan.org/monitoring: 'true' 注解添加到 Infinispan CR 元数据中:

    apiVersion: infinispan.org/v1
    kind: Infinispan
    metadata:
      name: example-infinispan
      annotations:
        infinispan.org/monitoring: 'true'
    Copy to Clipboard Toggle word wrap
注意

为了与 Data Grid 进行身份验证,Prometheus 使用 operator 凭证。

验证

您可以按照以下方法检查 Prometheus 是否提取 Data Grid 指标:

  1. 在 OpenShift Web 控制台中,选择 &lt ;/> Developer 视角,然后选择 Monitoring
  2. 打开 Data Grid 集群运行的命名空间的 Dashboard 选项卡。
  3. 打开 Metrics 选项卡,并确认您可以查询 Data Grid 指标,例如:

    vendor_cache_manager_default_cluster_size
    Copy to Clipboard Toggle word wrap

9.1.1. 禁用 Prometheus 服务监控器

如果您不希望 Prometheus 为 Data Grid 集群提取指标,您可以禁用 ServiceMonitor

流程

  1. Infinispan CR 中将 'false' 设置为 infinispan.org/monitoring 注解的值。

    apiVersion: infinispan.org/v1
    kind: Infinispan
    metadata:
      name: example-infinispan
      annotations:
        infinispan.org/monitoring: 'false'
    Copy to Clipboard Toggle word wrap
  2. 应用更改。

9.2. 安装 Grafana Operator

为了支持各种需求,Data Grid Operator 与 Grafana Operator 的社区版本集成,以便为 Data Grid 服务创建仪表板。

在 Grafana 与 OpenShift 用户工作负载监控集成前,唯一选项是依赖社区版本。您可以从 OperatorHub 在 OpenShift 上安装 Grafana Operator,并应该为 alpha 频道创建一个订阅。

但是,作为所有社区 Operator 的策略,红帽不认证 Grafana Operator,且不支持 Data Grid。安装 Grafana Operator 时,会提示您输入确认有关社区版本的警告信息,然后才能继续。

9.3. 创建 Grafana 数据源

创建 GrafanaDatasource CR,以便在 Grafana 仪表板中视觉化数据网格指标。

先决条件

  • 有一个 oc 客户端。
  • 具有 cluster-admin 对 OpenShift Container Platform 的访问权限。
  • 在 OpenShift Container Platform 上为用户定义的项目启用监控。
  • alpha 频道安装 Grafana Operator,并创建一个 Grafana CR。

流程

  1. 创建一个 ServiceAccount,允许 Grafana 从 Prometheus 读取 Data Grid 指标。

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: infinispan-monitoring
    Copy to Clipboard Toggle word wrap
    1. 应用 ServiceAccount

      $ oc apply -f service-account.yaml
      Copy to Clipboard Toggle word wrap
    2. ServiceAccount 授予 cluster-monitoring-view 权限。

      $ oc adm policy add-cluster-role-to-user cluster-monitoring-view -z infinispan-monitoring
      Copy to Clipboard Toggle word wrap
  2. 创建 Grafana 数据源。

    1. 检索 ServiceAccount 的令牌。

      $ oc serviceaccounts get-token infinispan-monitoring
      
      eyJhbGciOiJSUzI1NiIsImtpZCI6Imc4O...
      Copy to Clipboard Toggle word wrap
    2. spec.datasources.secureJsonData.httpHeaderValue1 字段中定义包含令牌的 GrafanaDataSource,如下例所示:

      apiVersion: integreatly.org/v1alpha1
      kind: GrafanaDataSource
      metadata:
        name: grafanadatasource
      spec:
        name: datasource.yaml
        datasources:
          - access: proxy
            editable: true
            isDefault: true
            jsonData:
              httpHeaderName1: Authorization
              timeInterval: 5s
              tlsSkipVerify: true
            name: Prometheus
            secureJsonData:
              httpHeaderValue1: >-
                Bearer
                eyJhbGciOiJSUzI1NiIsImtpZCI6Imc4O...
            type: prometheus
            url: 'https://thanos-querier.openshift-monitoring.svc.cluster.local:9091'
      Copy to Clipboard Toggle word wrap
  3. 应用 GrafanaDataSource

    $ oc apply -f grafana-datasource.yaml
    Copy to Clipboard Toggle word wrap

后续步骤

使用 Data Grid Operator 配置属性启用 Grafana 仪表板。

9.4. 配置 Data Grid 仪表板

Data Grid Operator 提供了全局配置属性,供您为 Data Grid 集群配置 Grafana 仪表板。

注意

您可以在 Data Grid Operator 运行时修改全局配置属性。

先决条件

  • Data Grid Operator 必须监视运行 Grafana Operator 的命名空间。

流程

  1. 在 Data Grid Operator 命名空间中创建一个名为 infinispan-operator-configConfigMap

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: infinispan-operator-config
    data:
      grafana.dashboard.namespace: example-infinispan
      grafana.dashboard.name: infinispan
      grafana.dashboard.monitoring.key: middleware
    Copy to Clipboard Toggle word wrap
  2. 使用 data.grafana.dashboard.namespace 属性指定 Data Grid 集群的命名空间。

    注意

    删除此属性的值会删除仪表板。更改值会将仪表板移到该命名空间中。

  3. 使用 data.grafana.dashboard.name 属性为仪表板指定一个名称。
  4. 如有必要,使用 data.grafana.dashboard.monitoring.key 属性指定监控密钥。
  5. 创建 infinispan-operator-config 或更新配置。

    $ oc apply -f infinispan-operator-config.yaml
    Copy to Clipboard Toggle word wrap
  6. 打开 Grafana UI,它位于:

    $ oc get routes grafana-route -o jsonpath=https://"{.spec.host}"
    Copy to Clipboard Toggle word wrap

第 10 章 设置跨站点复制

通过配置跨站点复制以在 Data Grid 集群间备份数据,确保通过 Data Grid Operator 的服务可用性。

10.1. 使用 Data Grid Operator 管理跨站点连接

一个数据中心的 Data Grid Operator 可以发现 Data Grid Operator 在另一个数据中心中管理的数据网格集群。此发现允许 Data Grid 自动形成跨站点视图并创建全局集群。

下图提供了一个示例,其中 Data Grid Operator 在 New York City NYC 的数据中心管理 Data Grid 集群。在伦敦的另一台数据中心,LON,Data Grid Operator 还管理一个 Data Grid 集群。

Data Grid Operator 使用 Kubernetes API 在 NYCLON 的 OpenShift Container Platform 集群间建立安全连接。然后,Data Grid Operator 会创建跨站点复制服务,以便数据可以在不同位置备份数据。

重要

每个 OpenShift 集群中的 Data Grid Operator 必须有对远程 Kubernetes API 的网络访问权限。

注意

当您配置自动连接时,Data Grid 集群不会开始运行,直到 Data Grid Operator 发现配置中的所有备份位置为止。

每个 Data Grid 集群都有一个站点 master 节点,用于协调所有备份请求。Data Grid Operator 标识站点 master 节点,以便通过跨站点复制服务的所有流量都进入站点 master。

如果当前站点 master 节点离线,则新节点变为站点 master。Data Grid Operator 会自动找到新的站点 master 节点,并更新跨站点复制服务来向它转发备份请求。

10.1.1. 创建服务帐户令牌

在每个作为备份位置的每个 OpenShift 集群上生成服务帐户令牌。集群使用这些令牌来相互进行身份验证,以便 Data Grid Operator 可以创建跨站点复制服务。

流程

  1. 登录 OpenShift 集群。
  2. 创建一个服务帐户。

    例如,在 LON 创建服务帐户:

    $ oc create sa lon
    serviceaccount/lon created
    Copy to Clipboard Toggle word wrap
  3. 使用以下命令在服务帐户中添加 view 角色:

    $ oc policy add-role-to-user view system:serviceaccount:<namespace>:lon
    Copy to Clipboard Toggle word wrap
  4. 如果使用节点端口服务在网络上公开 Data Grid 集群,还必须将 cluster-reader 角色添加到服务帐户中:

    $ oc adm policy add-cluster-role-to-user cluster-reader -z <service-account-name> -n <namespace>
    Copy to Clipboard Toggle word wrap
  5. 在其他 OpenShift 集群上重复上述步骤。

10.1.2. 交换服务帐户令牌

在 OpenShift 集群中创建服务帐户令牌后,您可以将其添加到每个备份位置的 secret 中。例如,在 LON 中,您可以为 NYC 添加服务帐户令牌。在 NYC 中,您可以为 LON 添加服务帐户令牌。

先决条件

  • 从每个服务帐户获取令牌。

    使用以下命令或从 OpenShift Web 控制台获取令牌:

    $ oc sa get-token lon
    
    eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9...
    Copy to Clipboard Toggle word wrap

流程

  1. 登录 OpenShift 集群。
  2. 使用以下命令为备份位置添加服务帐户令牌:

    $ oc create secret generic <token-name> --from-literal=token=<token>
    Copy to Clipboard Toggle word wrap

    例如,登录到 NYC 的 OpenShift 集群,并创建一个 lon-token secret,如下所示:

    $ oc create secret generic lon-token --from-literal=token=eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9...
    Copy to Clipboard Toggle word wrap
  3. 在其他 OpenShift 集群上重复上述步骤。

10.1.3. 配置 Data Grid Operator 以处理跨站点连接

配置 Data Grid Operator,以使用 Data Grid 集群建立跨站点视图。

先决条件

  • 创建包含每个备份位置的服务帐户令牌的 secret。

流程

  1. 为每个 Data Grid 集群创建一个 Infinispan CR。
  2. 使用 spec.service.sites.local.name 指定本地站点的名称。
  3. spec.service.sites.local.expose.type 字段的值设置为 NodePortLoadBalancer
  4. (可选)使用以下字段配置端口:

    • 如果使用 NodePortspec.service.sites.local.expose.nodePort
    • 如果使用 LoadBalancer,则 spec.service.sites.local.expose.port
  5. 为每个 Data Grid 集群提供名称、URL 和 secret,它们充当 spec.service.sites.locations 的备份位置。
  6. 如果远程站点上的 Data Grid 集群名称或命名空间与本地站点不匹配,请使用 clusterNamenamespace 字段指定这些值。

    以下是 LONNYCInfinispan CR 定义示例:

    • LON

      apiVersion: infinispan.org/v1
      kind: Infinispan
      metadata:
        name: example-infinispan
      spec:
        replicas: 3
        service:
          type: DataGrid
          sites:
            local:
              name: LON
              expose:
                type: LoadBalancer
                port: 65535
            locations:
              - name: NYC
                clusterName: <nyc_cluster_name>
                namespace: <nyc_cluster_namespace>
                url: openshift://api.rhdg-nyc.openshift-aws.myhost.com:6443
                secretName: nyc-token
        logging:
          categories:
            org.jgroups.protocols.TCP: error
            org.jgroups.protocols.relay.RELAY2: error
      Copy to Clipboard Toggle word wrap
    • NYC

      apiVersion: infinispan.org/v1
      kind: Infinispan
      metadata:
        name: nyc-cluster
      spec:
        replicas: 2
        service:
          type: DataGrid
          sites:
            local:
              name: NYC
              expose:
                type: LoadBalancer
                port: 65535
            locations:
              - name: LON
                clusterName: example-infinispan
                namespace: rhdg-namespace
                url: openshift://api.rhdg-lon.openshift-aws.myhost.com:6443
                secretName: lon-token
        logging:
          categories:
            org.jgroups.protocols.TCP: error
            org.jgroups.protocols.relay.RELAY2: error
      Copy to Clipboard Toggle word wrap
      重要

      务必调整 Infinispan CR 中的日志类别,以减少 JGroups TCP 和 RELAY2 协议的日志级别。这可防止大量日志文件使用容器存储。

      spec:
        logging:
          categories:
            org.jgroups.protocols.TCP: error
            org.jgroups.protocols.relay.RELAY2: error
      Copy to Clipboard Toggle word wrap
  7. 使用任何其他 Data Grid 服务资源配置 Infinispan CR,然后应用更改。
  8. 验证 Data Grid 集群是否形成跨站点视图。

    1. 检索 Infinispan CR。

      $ oc get infinispan -o yaml
      Copy to Clipboard Toggle word wrap
    2. 检查 type: CrossSiteViewFormed 条件。

后续步骤

如果您的集群有一个跨站点视图,您可以开始向缓存添加备份位置。

10.1.4. 用于管理的跨站点连接的资源

本主题描述了 Data Grid Operator 管理的跨站点连接的资源。

spec:
  service:
    type: DataGrid
    sites:
      local:
        name: LON
        expose:
          type: LoadBalancer
      locations:
      - name: NYC
        clusterName: <nyc_cluster_name>
        namespace: <nyc_cluster_namespace>
        url: openshift://api.site-b.devcluster.openshift.com:6443
        secretName: nyc-token
Copy to Clipboard Toggle word wrap
Expand
字段描述

service.type: DataGrid

Data Grid 仅支持通过 Data Grid 服务集群进行跨站点复制。

service.sites.local.name

将本地站点命名为 Data Grid 集群运行的位置。

service.sites.local.expose.type

指定跨站点复制的网络服务。Data Grid 集群使用此服务来通信和执行备份操作。您可以将值设为 NodePortLoadBalancer

service.sites.local.expose.nodePort

如果您通过 NodePort 服务公开 Data Grid,请在默认范围 3000032767 中指定静态端口。如果没有指定端口,则平台会选择一个可用的端口。

service.sites.local.expose.port

如果您通过 LoadBalancer 公开 Data Grid,请为该服务指定网络端口。默认端口为 7900

service.sites.locations

为所有备份位置提供连接信息。

service.sites.locations.name

指定与 .spec.service.sites.local.name 匹配的备份位置。

service.sites.locations.url

指定备份位置的 Kubernetes API 的 URL。

service.sites.locations.secretName

指定包含备份站点的服务帐户令牌的 secret。

service.sites.locations.clusterName

如果集群名称与本地站点的集群名称不同,请在备份位置指定集群名称。

service.sites.locations.namespace

如果 Data Grid 集群的命名空间与本地站点上的命名空间不匹配,则指定位于备份位置的 Data Grid 集群的命名空间。

10.2. 手动连接 Data Grid 集群

您可以指定静态网络连接详情,以使用 OpenShift 外部运行的 Data Grid 集群执行跨站点复制。在任何情况下,需要手动跨站点连接,其中运行 Data Grid 的 OpenShift 集群外访问 Kubernetes API。

您可以在相同的 Infinispan CR 中为 Data Grid 集群使用自动和手动连接。但是,您必须确保 Data Grid 集群在每个站点上以相同的方式建立连接。

先决条件

手动连接 Data Grid 集群以形成跨站点视图,需要为数据网格服务可预测的网络位置。

您需要了解创建前的网络位置,这需要您:

  • 具有您计划配置为备份位置的每个 Data Grid 集群的主机名和端口。
  • 具有在 OpenShift 上运行的任何远程 Data Grid 集群的 <cluster-name>-site 服务的主机名。
    您必须使用 &lt ;cluster-name& gt;-site 服务在 Data Grid Operator 管理和其他集群的集群间形成跨站点视图。

流程

  1. 为每个 Data Grid 集群创建一个 Infinispan CR。
  2. 使用 spec.service.sites.local.name 指定本地站点的名称。
  3. spec.service.sites.local.expose.type 字段的值设置为 NodePortLoadBalancer
  4. (可选)使用以下字段配置端口:

    • 如果使用 NodePortspec.service.sites.local.expose.nodePort
    • 如果使用 LoadBalancer,则 spec.service.sites.local.expose.port
  5. 提供作为带有 spec.service.sites.locations 的备份位置的每个 Data Grid 集群的名称和静态 URL,例如:

    • LON

      apiVersion: infinispan.org/v1
      kind: Infinispan
      metadata:
        name: example-infinispan
      spec:
        replicas: 3
        service:
          type: DataGrid
          sites:
            local:
              name: LON
              expose:
                type: LoadBalancer
                port: 65535
            locations:
              - name: NYC
                url: infinispan+xsite://infinispan-nyc.myhost.com:7900
        logging:
          categories:
            org.jgroups.protocols.TCP: error
            org.jgroups.protocols.relay.RELAY2: error
      Copy to Clipboard Toggle word wrap
    • NYC

      apiVersion: infinispan.org/v1
      kind: Infinispan
      metadata:
        name: example-infinispan
      spec:
        replicas: 2
        service:
          type: DataGrid
          sites:
            local:
              name: NYC
              expose:
                type: LoadBalancer
                port: 65535
            locations:
              - name: LON
                url: infinispan+xsite://infinispan-lon.myhost.com
        logging:
          categories:
            org.jgroups.protocols.TCP: error
            org.jgroups.protocols.relay.RELAY2: error
      Copy to Clipboard Toggle word wrap
      重要

      务必调整 Infinispan CR 中的日志类别,以减少 JGroups TCP 和 RELAY2 协议的日志级别。这可防止大量日志文件使用容器存储。

      spec:
        logging:
          categories:
            org.jgroups.protocols.TCP: error
            org.jgroups.protocols.relay.RELAY2: error
      Copy to Clipboard Toggle word wrap
  6. 使用任何其他 Data Grid 服务资源配置 Infinispan CR,然后应用更改。
  7. 验证 Data Grid 集群是否形成跨站点视图。

    1. 检索 Infinispan CR。

      $ oc get infinispan -o yaml
      Copy to Clipboard Toggle word wrap
    2. 检查 type: CrossSiteViewFormed 条件。

后续步骤

如果您的集群有一个跨站点视图,您可以开始向缓存添加备份位置。

10.2.1. 手动跨站点连接的资源

本主题描述了手动维护的跨站点连接的资源。

spec:
  service:
    type: DataGrid
    sites:
      local:
        name: LON
        expose:
          type: LoadBalancer
          port: 65535
      locations:
      - name: NYC
        url: infinispan+xsite://infinispan-nyc.myhost.com:7900
Copy to Clipboard Toggle word wrap
Expand
字段描述

service.type: DataGrid

Data Grid 仅支持通过 Data Grid 服务集群进行跨站点复制。

service.sites.local.name

将本地站点命名为 Data Grid 集群运行的位置。

service.sites.local.expose.type

指定跨站点复制的网络服务。Data Grid 集群使用此服务来通信和执行备份操作。您可以将值设为 NodePortLoadBalancer

service.sites.local.expose.nodePort

如果您通过 NodePort 服务公开 Data Grid,请在默认范围 3000032767 中指定静态端口。如果没有指定端口,则平台会选择一个可用的端口。

service.sites.local.expose.port

如果您通过 LoadBalancer 公开 Data Grid,请为该服务指定网络端口。默认端口为 7900

service.sites.locations

为所有备份位置提供连接信息。

service.sites.locations.name

指定与 .spec.service.sites.local.name 匹配的备份位置。

service.sites.locations.url

infinispan+xsite://<hostname>:<port> 格式指定备份位置 的静态 URL。默认端口为 7900

10.3. 在同一 OpenShift 集群中配置站点

出于评估和演示目的,您可以将 Data Grid 配置为在同一 OpenShift 集群中的节点之间备份。

流程

  1. 为每个 Data Grid 集群创建一个 Infinispan CR。
  2. 使用 spec.service.sites.local.name 指定本地站点的名称。
  3. ClusterIP 设置为 spec.service.sites.local.expose.type 字段的值。
  4. 提供作为带有 spec.service.sites.locations.clusterName 的备份位置的 Data Grid 集群名称。
  5. 如果两个 Data Grid 集群具有相同的名称,请使用 spec.service.sites.locations.locations.namespace 指定备份位置的命名空间。

    apiVersion: infinispan.org/v1
    kind: Infinispan
    metadata:
      name: example-clustera
    spec:
      replicas: 1
      expose:
        type: LoadBalancer
      service:
        type: DataGrid
        sites:
          local:
            name: SiteA
            expose:
              type: ClusterIP
          locations:
            - name: SiteB
              clusterName: example-clusterb
              namespace: cluster-namespace
    Copy to Clipboard Toggle word wrap
  6. 使用任何其他 Data Grid 服务资源配置 Infinispan CR,然后应用更改。
  7. 验证 Data Grid 集群是否形成跨站点视图。

    1. 检索 Infinispan CR。

      $ oc get infinispan -o yaml
      Copy to Clipboard Toggle word wrap
    2. 检查 type: CrossSiteViewFormed 条件。

第 11 章 使用反关联性保证可用性

Kubernetes 包含反关联性功能,可防止工作负载出现单一故障点。

11.1. 反关联性策略

集群中的每个 Data Grid 节点都在集群中运行的 pod 中运行。每个 Red Hat OpenShift 节点在物理主机系统上运行。反关联性的工作原理是将 Data Grid 节点分布到 OpenShift 节点,确保即使出现硬件故障,您的数据网格集群也会保持可用。

Data Grid Operator 提供了两个反关联性策略:

kubernetes.io/hostname
数据源副本 pod 调度到不同的 OpenShift 节点上。
topology.kubernetes.io/zone
数据网格副本 pod 调度到多个区域。
容错

反关联性策略通过不同的方式保证集群可用性。

注意

只有在 OpenShift 节点或区域的数量大于 Data Grid 节点的数量时才适用。

将 pod 调度到不同的 OpenShift 节点上

为以下类型的缓存提供 x 节点故障:

  • replicated: x = spec.replicas - 1
  • distributed: x = num_owners - 1

在多个区间调度 pod

x 区域存在以下类型的缓存时,提供 x 区故障的容错:

  • replicated: x = spec.replicas - 1
  • distributed: x = num_owners - 1
注意
spec.replicas
定义每个 Data Grid 集群中的 pod 数量。
num_owners
是 cache 配置属性,用于定义缓存中每个条目的副本数。

11.2. 配置反关联性

指定 OpenShift 为 Data Grid 集群调度 pod 的位置,以确保可用性。

流程

  1. spec.affinity 块添加到 Infinispan CR。
  2. 根据需要配置反关联性策略。
  3. 应用 Infinispan CR。

11.2.1. 反关联性策略配置

Infinispan CR 中配置反关联性策略,以控制 OpenShift 调度 Data Grid 副本 pod 的位置。

Expand
拓扑键描述

topologyKey: "topology.kubernetes.io/zone"

在多个区域间调度 Data Grid 副本 pod。

topologyKey: "kubernetes.io/hostname"

将 Data Grid 副本 pod 调度到不同的 OpenShift 节点上。

将 pod 调度到不同的 OpenShift 节点上

如果没有在 Infinispan CR 中配置 spec.affinity 字段,则 Data Grid Operator 会使用反关联性策略:

spec:
  affinity:
    podAntiAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 100
        podAffinityTerm:
          labelSelector:
            matchLabels:
              app: infinispan-pod
              clusterName: <cluster_name>
              infinispan_cr: <cluster_name>
          topologyKey: "kubernetes.io/hostname"
Copy to Clipboard Toggle word wrap
需要不同的节点

在以下示例中,如果不同的节点不可用,OpenShift 不会调度 Data Grid pod:

spec:
  affinity:
    podAntiAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
          matchLabels:
            app: infinispan-pod
            clusterName: <cluster_name>
            infinispan_cr: <cluster_name>
        topologyKey: "topology.kubernetes.io/hostname"
Copy to Clipboard Toggle word wrap
注意

为确保您可以在不同的 OpenShift 节点上调度 Data Grid 副本容器集,可用的 OpenShift 节点数量必须大于 spec.replicas 的值。

在多个 OpenShift 区域间调度 pod

以下示例在调度 pod 时首选多个区域,但如果无法在区间调度,但无法在不同的 OpenShift 节点上调度数据网格副本 pod:

spec:
  affinity:
    podAntiAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 100
        podAffinityTerm:
          labelSelector:
            matchLabels:
              app: infinispan-pod
              clusterName: <cluster_name>
              infinispan_cr: <cluster_name>
          topologyKey: "topology.kubernetes.io/zone"
      - weight: 90
        podAffinityTerm:
          labelSelector:
            matchLabels:
              app: infinispan-pod
              clusterName: <cluster_name>
              infinispan_cr: <cluster_name>
          topologyKey: "kubernetes.io/hostname"
Copy to Clipboard Toggle word wrap
需要多个区域

以下示例仅在调度 Data Grid 副本 pod 时使用区策略:

spec:
  affinity:
    podAntiAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
          matchLabels:
            app: infinispan-pod
            clusterName: <cluster_name>
            infinispan_cr: <cluster_name>
        topologyKey: "topology.kubernetes.io/zone"
Copy to Clipboard Toggle word wrap

第 12 章 使用 Data Grid Operator 创建缓存

使用 Cache CR 添加带有 Data Grid Operator 的缓存配置,并控制 Data Grid 如何存储数据。

重要

使用 Data Grid Operator 创建缓存作为技术预览提供。

12.1. 技术预览

红帽产品服务级别协议(SLA)不支持技术预览功能或功能,且可能无法完成。

红帽不推荐在生产环境中使用技术预览功能或产品功能。这些功能为您提供对即将推出的产品功能的早期访问,这些功能允许您在开发过程中测试并提供反馈。

如需更多信息,请参阅红帽技术预览功能支持范围

12.2. Data Grid 缓存

缓存配置定义数据存储的特征和功能,且必须通过 Data Grid 模式有效。Data Grid 建议以 XML 或 JSON 格式创建独立文件来定义您的缓存配置。您应该将 Data Grid 配置与应用程序代码分开以方便验证,并避免出现需要以 Java 或其他客户端语言维护 XML 代码段的情况。

要使用在 OpenShift 上运行的 Data Grid 集群创建缓存,您应该:

  • 使用 Cache CR 作为通过 OpenShift 前端创建缓存的机制。
  • 使用 Batch CR 从独立配置文件一次创建多个缓存。
  • 访问数据网格控制台,并以 XML 或 JSON 格式创建缓存。

您可以使用 Hot Rod 或 HTTP 客户端,但 Data Grid 建议 Cache CR 或 Batch CR,除非特定的用例需要编程远程缓存创建。

12.3. 缓存 CR

查找使用 Cache CR 配置数据网格缓存的详情。

使用 Cache CR 时,会应用以下规则:

  • 缓存 CR 仅适用于 Data Grid 服务 pod。
  • 您可以为每个 Cache CR 创建一个缓存。
  • 如果您的 Cache CR 同时包含模板和 XML 配置,Data Grid Operator 将使用模板。
  • 如果在 OpenShift Web 控制台中编辑缓存,则更改会反映在用户界面中,但不会对 Data Grid 集群产生影响。您不能编辑缓存。要更改缓存配置,您必须首先通过控制台或 CLI 删除缓存,然后重新创建缓存。
  • 删除 OpenShift Web 控制台中的 缓存 CR 不会从 Data Grid 集群中删除缓存。您必须通过控制台或 CLI 删除缓存。
注意

在以前的版本中,您需要向 secret 添加凭证,以便 Data Grid Operator 可以在创建缓存时访问您的集群。

这不再是必需的。Data Grid Operator 使用 operator 用户和对应的密码来执行缓存操作。

12.4. 从 XML 创建缓存

完成以下步骤,使用有效的 infinispan.xml 配置在 Data Grid 服务集群中创建缓存。

流程

  1. 创建包含 XML 缓存配置的 Cache CR。

    1. 使用 metadata.name 字段为 Cache CR 指定名称。
    2. 使用 spec.clusterName 字段指定目标 Data Grid 集群。
    3. 使用 spec.name 字段命名您的缓存。

      注意

      XML 配置中的 name 属性将被忽略。只有 spec.name 字段适用于生成的缓存。

    4. 使用 spec.template 字段添加 XML 缓存配置。

      apiVersion: infinispan.org/v2alpha1
      kind: Cache
      metadata:
        name: mycachedefinition
      spec:
        clusterName: example-infinispan
        name: mycache
        template: <distributed-cache name="mycache" mode="SYNC"><persistence><file-store/></persistence></distributed-cache>
      Copy to Clipboard Toggle word wrap
  2. 应用 Cache CR,例如:

    $ oc apply -f mycache.yaml
    cache.infinispan.org/mycachedefinition created
    Copy to Clipboard Toggle word wrap

12.5. 从模板创建缓存

完成以下步骤,使用缓存模板在 Data Grid 服务集群中创建缓存。

先决条件

  • 识别您要用于缓存的缓存模板。
    您可以在 Data Grid Console 中找到可用模板列表。

流程

  1. 创建一个 Cache CR,用于指定要使用的模板名称。

    1. 使用 metadata.name 字段为 Cache CR 指定名称。
    2. 使用 spec.clusterName 字段指定目标 Data Grid 集群。
    3. 使用 spec.name 字段命名您的缓存。
    4. 使用 spec.template 字段指定缓存模板。

      以下示例从 org.infinispan.DIST_SYNC 缓存模板创建一个名为 "mycache" 的缓存:

      apiVersion: infinispan.org/v2alpha1
      kind: Cache
      metadata:
        name: mycachedefinition
      spec:
        clusterName: example-infinispan
        name: mycache
        templateName: org.infinispan.DIST_SYNC
      Copy to Clipboard Toggle word wrap
  2. 应用 Cache CR,例如:

    $ oc apply -f mycache.yaml
    cache.infinispan.org/mycachedefinition created
    Copy to Clipboard Toggle word wrap

12.6. 在缓存中添加备份位置

当您将 Data Grid 集群配置为执行跨站点复制时,您可以在缓存配置中添加备份位置。

流程

  1. 创建将远程站点命名为备份位置的缓存配置。

    Data Grid 基于缓存名称复制数据。因此,缓存配置中的站点名称必须与 Infinispan CR 中的站点名称 spec.service.sites.local.name 匹配。

  2. 配置备份位置,以使用 take-offline 元素自动离线。

    1. 在备份位置使用 min-wait 属性离线前设置时间(以毫秒为单位)。
  3. 定义任何其他有效的缓存配置。
  4. 将备份位置添加到全局集群中所有站点的指定缓存中。

    例如,如果您将 LON 添加为 NYC 的备份,您应该将 NYC 添加为 LON 的备份。

以下配置示例显示缓存的备份位置:

  • NYC

    <distributed-cache name="customers">
      <encoding media-type="application/x-protostream"/>
      <backups>
        <backup site="LON" strategy="SYNC">
          <take-offline min-wait="120000"/>
        </backup>
      </backups>
    </distributed-cache>
    Copy to Clipboard Toggle word wrap
  • LON

    <replicated-cache name="customers">
      <encoding media-type="application/x-protostream"/>
      <backups>
        <backup site="NYC" strategy="ASYNC" >
          <take-offline min-wait="120000"/>
        </backup>
      </backups>
    </replicated-cache>
    Copy to Clipboard Toggle word wrap

12.6.1. 在进行备份位置离线时的性能注意事项

当远程站点不可用时,备份位置可以自动离线。这可防止 pod 尝试将数据复制到离线备份位置,这可能会对集群造成性能影响,因为它会导致错误。

您可以配置备份位置离线前等待的时长。良好的 thumb 规则是一两分钟。但是,您应该测试不同的等待周期,并评估其性能影响,以确定部署的正确值。

例如,当 OpenShift 终止站点 master pod 时,该备份位置在短时间内不可用,直到 Data Grid Operator 选择一个新的站点 master。在这种情况下,如果最小等待时间不够长,则备份位置离线。然后,您需要将这些备份位置上线并执行状态传输操作,以确保数据同步。

同样,如果最小等待时间太长,节点 CPU 用量会因为失败的备份尝试而增加,这可能会导致性能下降。

12.7. 添加持久性缓存存储

您可以将持久性缓存存储添加到 Data Grid 服务 pod 中,将数据保存到持久性卷中。

Data Grid 在 /opt/infinispan/server/data 目录中创建单一文件缓存存储 .dat 文件。

流程

  • <file-store /> 元素添加到 Data Grid 缓存中 的持久性 配置,如下例所示:

    <distributed-cache name="persistent-cache" mode="SYNC">
      <encoding media-type="application/x-protostream"/>
      <persistence>
        <file-store/>
      </persistence>
    </distributed-cache>
    Copy to Clipboard Toggle word wrap

第 13 章 运行批处理操作

Data Grid Operator 提供了一个 Batch CR,可让您批量创建 Data Grid 资源。批处理 CR 在批处理模式中使用 Data Grid 命令行界面(CLI)来执行操作序列。

注意

修改 批处理 CR 实例无效。批处理操作是修改 Data Grid 资源的"一次性"事件。要为 CR 更新 .spec 字段,或者在批处理操作失败时,您必须创建 Batch CR 的新实例。

13.1. 运行内联批处理操作

如果批处理 CR 不需要单独的配置工件,请将 批处理 操作直接包含在批处理 CR 中。

流程

  1. 创建 Batch CR。

    1. 指定您希望批处理操作作为 spec.cluster 字段的值运行的 Data Grid 集群名称。
    2. 添加每个 CLI 命令,以在 spec.config 字段中的一行中运行。

      apiVersion: infinispan.org/v2alpha1
      kind: Batch
      metadata:
        name: mybatch
      spec:
        cluster: example-infinispan
        config: |
          create cache --template=org.infinispan.DIST_SYNC mycache
          put --cache=mycache hello world
          put --cache=mycache hola mundo
      Copy to Clipboard Toggle word wrap
  2. 应用您的 批处理 CR。

    $ oc apply -f mybatch.yaml
    Copy to Clipboard Toggle word wrap
  3. 检查 Batch CR 中的 status.Phase 字段,以验证操作是否已成功完成。

13.2. 为批处理操作创建 ConfigMap

创建一个 ConfigMap,以便为批处理操作使用其他文件,如 Data Grid 缓存配置。

先决条件

出于演示目的,您应该在开始操作前将一些配置工件添加到主机文件系统中:

  • 创建一个 /tmp/mybatch 目录,您可以在其中添加一些文件。

    $ mkdir -p /tmp/mybatch
    Copy to Clipboard Toggle word wrap
  • 创建 Data Grid 缓存配置。

    $ cat > /tmp/mybatch/mycache.xml<<EOF
    <distributed-cache name="mycache" mode="SYNC">
      <encoding media-type="application/x-protostream"/>
      <memory max-count="1000000" when-full="REMOVE"/>
    </distributed-cache>
    EOF
    Copy to Clipboard Toggle word wrap

流程

  1. 创建包含您要运行的所有命令的 批处理 文件。

    例如,以下 批处理 文件会创建一个名为"mycache"的缓存,并为它添加两个条目:

    create cache mycache --file=/etc/batch/mycache.xml
    put --cache=mycache hello world
    put --cache=mycache hola mundo
    Copy to Clipboard Toggle word wrap
    重要

    ConfigMap 挂载到位于 /etc/batch 的 Data Grid pod 中。您必须使用该路径在批处理操作中添加所有 --file= 指令。

  2. 确保批处理操作所需的所有配置工件与 批处理文件位于同一个目录中

    $ ls /tmp/mybatch
    
    batch
    mycache.xml
    Copy to Clipboard Toggle word wrap
  3. 从 目录创建 ConfigMap

    $ oc create configmap mybatch-config-map --from-file=/tmp/mybatch
    Copy to Clipboard Toggle word wrap

13.3. 使用 ConfigMap 运行批处理操作

运行包含配置工件的批处理操作。

先决条件

  • 创建包含批处理操作所需的任何文件的 ConfigMap

流程

  1. 创建一个 Batch CR,将 Data Grid 集群名称指定为 spec.cluster 字段的值。
  2. 使用 spec.configMap 字段设置包含 批处理 文件和配置工件的 ConfigMap 名称。

    $ cat > mybatch.yaml<<EOF
    apiVersion: infinispan.org/v2alpha1
    kind: Batch
    metadata:
      name: mybatch
    spec:
      cluster: example-infinispan
      configMap: mybatch-config-map
    EOF
    Copy to Clipboard Toggle word wrap
  3. 应用您的 批处理 CR。

    $ oc apply -f mybatch.yaml
    Copy to Clipboard Toggle word wrap
  4. 检查 Batch CR 中的 status.Phase 字段,以验证操作是否已成功完成。

13.4. 批处理状态消息

使用 Batch CR 中的 status.Phase 字段验证批处理操作并进行故障排除。

Expand
阶段描述

Succeeded

所有批处理操作都成功完成。

Initializing

批处理操作已排队,资源正在初始化。

初始化

批处理操作已准备好启动。

Running

批处理操作正在进行中。

Failed

一个或多个批处理操作不成功。

失败的操作

批处理操作不是原子的。如果批处理脚本中的命令失败,它不会影响其他操作或导致它们回滚。

注意

如果您的批处理操作有任何服务器或语法错误,您可以在 status.Reason 字段中查看 Batch CR 中的日志消息。

13.5. 批处理操作示例

使用这些示例批处理操作作为使用 Batch CR 创建和修改 Data Grid 资源的起点。

注意

您只能通过 ConfigMap 将配置文件传递给 Data Grid Operator。

ConfigMap 挂载到位于 /etc/batch 的 Data Grid pod 中,因此您必须使用该路径预先填充所有 --file= 指令。

13.5.1. 缓存

  • 从配置文件创建多个缓存。
echo "creating caches..."
create cache sessions --file=/etc/batch/infinispan-prod-sessions.xml
create cache tokens --file=/etc/batch/infinispan-prod-tokens.xml
create cache people --file=/etc/batch/infinispan-prod-people.xml
create cache books --file=/etc/batch/infinispan-prod-books.xml
create cache authors --file=/etc/batch/infinispan-prod-authors.xml
echo "list caches in the cluster"
ls caches
Copy to Clipboard Toggle word wrap
  • 从文件创建模板,然后从模板创建缓存。
echo "creating caches..."
create cache mytemplate --file=/etc/batch/mycache.xml
create cache sessions --template=mytemplate
create cache tokens --template=mytemplate
echo "list caches in the cluster"
ls caches
Copy to Clipboard Toggle word wrap

13.5.2. 计数器

使用 Batch CR 创建多个计数器,这些计数器可以递增和减少,以记录对象计数。

您可以使用计数器来生成标识符,作为速率限制器,或者跟踪资源被访问的次数。

echo "creating counters..."
create counter --concurrency-level=1 --initial-value=5 --storage=PERSISTENT --type=weak mycounter1
create counter --initial-value=3 --storage=PERSISTENT --type=strong mycounter2
create counter --initial-value=13 --storage=PERSISTENT --type=strong --upper-bound=10 mycounter3
echo "list counters in the cluster"
ls counters
Copy to Clipboard Toggle word wrap

13.5.3. protobuf 模式

注册 Protobuf 模式,以查询缓存中的值。protobuf 模式(.proto 文件)提供有关自定义实体和控制字段索引的元数据。

echo "creating schema..."
schema --upload=person.proto person.proto
schema --upload=book.proto book.proto
schema --upload=author.proto book.proto
echo "list Protobuf schema"
ls schemas
Copy to Clipboard Toggle word wrap

13.5.4. 任务

上传实施 org.infinispan.tasks.ServerTask 或与 javax.script 脚本 API 兼容的脚本的任务。

echo "creating tasks..."
task upload --file=/etc/batch/myfirstscript.js myfirstscript
task upload --file=/etc/batch/mysecondscript.js mysecondscript
task upload --file=/etc/batch/mythirdscript.js mythirdscript
echo "list tasks"
ls tasks
Copy to Clipboard Toggle word wrap

第 14 章 备份和恢复 Data Grid 集群

借助 Data Grid Operator,您可以备份和恢复 Data Grid 集群状态,以便在集群之间迁移 Data Grid 资源。

14.1. 备份和恢复 CR

备份和恢复 CR 在运行时保存内存数据,以便您可以轻松重新创建 Data Grid 集群。

应用 BackupRestore CR 会创建一个新 pod,它将把 Data Grid 集群作为零容量成员加入,这意味着不需要集群重新平衡或状态传输来加入。

对于备份操作,pod 会迭代缓存条目和其他资源,并在持久性卷(PV)上的 /opt/infinispan/backups 目录中创建一个存档(一个 .zip 文件)。

注意

执行备份不会影响性能,因为 Data Grid 集群中的其他 pod 只需要在迭代缓存条目时响应备份 pod。

对于恢复操作,pod 从 PV 上的存档检索 Data Grid 资源,并将其应用到 Data Grid 集群。

当备份或恢复操作完成后,pod 会离开集群并被终止。

协调

Data Grid Operator 不协调 BackupRestore CR,这意味着备份和恢复操作是"一次性"事件。

修改现有 BackupRestore CR 实例不会执行操作或有任何效果。如果要更新 .spec 字段,您必须创建一个 BackupRestore CR 的新实例。

14.2. 备份 Data Grid 集群

创建将 Data Grid 集群状态存储到持久性卷的备份文件。

先决条件

  • 使用 spec.service.type: DataGrid 创建 Infinispan CR。
  • 确保没有与 Data Grid 集群活跃的客户端连接。

    在备份缓存后,数据网格备份不提供快照隔离,数据修改不会写入存档。
    要归档集群的确切状态,您应该始终在备份前断开任何客户端。

流程

  1. 使用 metadata.name 字段命名 Backup CR。
  2. 使用 spec.cluster 字段指定要备份的 Data Grid 集群。
  3. 配置持久性卷声明(PVC),将备份存档添加到带有 spec.volume.storage 和 spec.volume.storage.storageClassName 字段中的持久性卷(PV)。

    apiVersion: infinispan.org/v2alpha1
    kind: Backup
    metadata:
      name: my-backup
    spec:
      cluster: source-cluster
      volume:
        storage: 1Gi
        storageClassName: my-storage-class
    Copy to Clipboard Toggle word wrap
  4. (可选)包含 spec.resources 字段,以指定您要备份的 Data Grid 资源。

    如果没有包括任何 spec.resources 字段,Backup CR 会创建一个包含所有 Data Grid 资源的存档。如果指定了 spec.resources 字段,Backup CR 会创建一个仅包含这些资源的存档。

    spec:
      ...
      resources:
        templates:
          - distributed-sync-prod
          - distributed-sync-dev
        caches:
          - cache-one
          - cache-two
        counters:
          - counter-name
        protoSchemas:
          - authors.proto
          - books.proto
        tasks:
          - wordStream.js
    Copy to Clipboard Toggle word wrap

    您还可以使用 * 通配符字符,如下例所示:

    spec:
      ...
      resources:
        caches:
          - "*"
        protoSchemas:
          - "*"
    Copy to Clipboard Toggle word wrap
  5. 应用 备份 CR。

    $ oc apply -f my-backup.yaml
    Copy to Clipboard Toggle word wrap

验证

  1. 检查在 Backup CR 中 status.phase 字段的状态是否为 Succeeded,Data Grid 日志具有以下消息:

    ISPN005044: Backup file created 'my-backup.zip'
    Copy to Clipboard Toggle word wrap
  2. 运行以下命令检查备份是否已成功创建:

    $ oc describe Backup my-backup
    Copy to Clipboard Toggle word wrap

14.3. 恢复 Data Grid 集群

从备份存档中恢复数据网格集群状态。

先决条件

  • 在源集群中创建 Backup CR。
  • 创建 Data Grid 服务 pod 的目标 Data Grid 集群。

    注意

    如果您恢复现有的缓存,则操作会覆盖缓存中的数据,而不是缓存配置。

    例如,您可以在源集群中备份名为 mycache 的分布式缓存。然后,您可以在目标集群中恢复 mycache 作为复制缓存。在这种情况下,源集群中的数据会被恢复,mycache 继续在目标集群中复制配置。

  • 确保没有与要恢复的目标 Data Grid 集群的活动客户端连接。

    从备份中恢复的缓存条目可能会覆盖最新的缓存条目。
    例如,客户端执行 cache.put (k=2) 操作,然后恢复包含 k=1 的备份。

流程

  1. 使用 metadata.name 字段命名 Restore CR。
  2. 指定与 spec.backup 字段一起使用的 Backup CR。
  3. 使用 spec.cluster 字段指定要恢复的 Data Grid 集群。

    apiVersion: infinispan.org/v2alpha1
    kind: Restore
    metadata:
      name: my-restore
    spec:
      backup: my-backup
      cluster: target-cluster
    Copy to Clipboard Toggle word wrap
  4. (可选)添加 spec.resources 字段以仅恢复特定资源。

    spec:
      ...
      resources:
        templates:
          - distributed-sync-prod
          - distributed-sync-dev
        caches:
          - cache-one
          - cache-two
        counters:
          - counter-name
        protoSchemas:
          - authors.proto
          - books.proto
        tasks:
          - wordStream.js
    Copy to Clipboard Toggle word wrap
  5. 应用 Restore CR。

    $ oc apply -f my-restore.yaml
    Copy to Clipboard Toggle word wrap

验证

  • 检查 Restore CR 中的 status.phase 字段的状态是否为 Succeeded,Data Grid 日志具有以下消息:

    ISPN005045: Restore 'my-backup' complete
    Copy to Clipboard Toggle word wrap

然后,您应该打开 Data Grid 控制台或建立 CLI 连接,以验证数据和数据网格资源是否如预期恢复。

14.4. 备份和恢复状态

BackupRestore CR 包含一个 status.phase 字段,它为操作的每个阶段提供状态。

Expand
Status描述

Initializing

系统接受了请求,控制器正在准备底层资源来创建 pod。

初始化

控制器已成功准备了所有底层资源。

Running

pod 被创建,操作在 Data Grid 集群上正在进行。

Succeeded

此操作已在 Data Grid 集群上成功完成,pod 被终止。

Failed

操作没有成功完成,pod 被终止。

Unknown

控制器无法获取 pod 的状态,或者确定操作的状态。此条件通常表示与 pod 的临时通信错误。

14.4.1. 处理失败的备份和恢复操作

如果 BackupRestore CR 的 status.phase 字段为 Failed,在尝试操作前,您应该检查 pod 日志以确定根本原因。

流程

  1. 检查执行失败操作的 pod 的日志。

    Pod 被终止,但会一直可用,直到您删除 BackupRestore CR。

    $ oc logs <backup|restore_pod_name>
    Copy to Clipboard Toggle word wrap
  2. 解决 pod 日志指示的任何错误条件或其他失败原因。
  3. 创建 BackupRestore CR 的新实例,并再次尝试操作。

第 15 章 将自定义代码部署到 Data Grid

将自定义代码(如脚本和事件监听程序)添加到您的 Data Grid 集群中。

在将自定义代码部署到 Data Grid 集群之前,您需要将其设置为 Data Grid 集群。要做到这一点,您可以从持久性卷(PV)复制工件,从 HTTP 或 FTP 服务器下载工件,或使用这两种方法。

15.1. 将代码工件复制到 Data Grid 集群

将工件添加到持久性卷(PV),然后将其复制到 Data Grid pod。

此流程解释了如何使用挂载持久性卷声明(PVC)的临时 pod:

  • 允许您将代码工件添加到 PV (可能写操作)。
  • 允许 Data Grid pod 从 PV 加载代码工件(特别是读取操作)。

要执行这些读写操作,您需要特定的 PV 访问模式。但是,对不同 PVC 访问模式的支持取决于平台。

本文档的范围超出了本文档,以提供使用不同平台创建 PVC 的说明。为了简单起见,以下步骤显示了一个具有 ReadWriteMany 访问模式的 PVC。

在某些情况下,只有 ReadOnlyManyReadWriteOnce 访问模式可用。您可以通过回收并使用相同的 spec.volumeName 的 PVC 来结合使用这些访问模式。

注意

使用 ReadWriteOnce 访问模式会导致集群中的所有 Data Grid pod 调度到同一 OpenShift 节点上。

流程

  1. 切换到 Data Grid 集群的命名空间。

    $ oc project rhdg-namespace
    Copy to Clipboard Toggle word wrap
  2. 为自定义代码工件创建一个 PVC,例如:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: datagrid-libs
    spec:
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 100Mi
    Copy to Clipboard Toggle word wrap
  3. 应用您的 PVC。

    $ oc apply -f datagrid-libs.yaml
    Copy to Clipboard Toggle word wrap
  4. 创建挂载 PVC 的 pod,例如:

    apiVersion: v1
    kind: Pod
    metadata:
      name: datagrid-libs-pod
    spec:
      securityContext:
        fsGroup: 2000
      volumes:
        - name: lib-pv-storage
          persistentVolumeClaim:
            claimName: datagrid-libs
      containers:
        - name: lib-pv-container
          image: registry.redhat.io/datagrid/datagrid-8-rhel8:8.2
          volumeMounts:
            - mountPath: /tmp/libs
              name: lib-pv-storage
    Copy to Clipboard Toggle word wrap
  5. 将 pod 添加到 Data Grid 命名空间并等待它就绪。

    $ oc apply -f datagrid-libs-pod.yaml
    $ oc wait --for=condition=ready --timeout=2m pod/datagrid-libs-pod
    Copy to Clipboard Toggle word wrap
  6. 将代码工件复制到 pod 中,以便它们加载到 PVC 中。

    例如,要从本地 libs 目录中复制代码工件,请执行以下操作:

    $ oc cp --no-preserve=true libs datagrid-libs-pod:/tmp/
    Copy to Clipboard Toggle word wrap
  7. 删除 pod。

    $ oc delete pod datagrid-libs-pod
    Copy to Clipboard Toggle word wrap

    Infinispan CR 中指定带有 spec.dependencies.volumeClaimName 的持久性卷,然后应用更改。

    apiVersion: infinispan.org/v1
    kind: Infinispan
    metadata:
      name: example-infinispan
    spec:
      replicas: 2
      dependencies:
        volumeClaimName: datagrid-libs
      service:
        type: DataGrid
    Copy to Clipboard Toggle word wrap
注意

如果更新持久性卷上的自定义代码,您必须重启 Data Grid 集群,以便它可以加载更改。

15.2. 下载代码工件

将工件添加到 HTTP 或 FTP 服务器,以便 Data Grid Operator 将它们下载到每个 Data Grid 节点上的 {lib_path} 目录中。

下载文件时,Data Grid Operator 可以自动检测文件类型。Data Grid Operator 还会在下载完成后将存档文件(如 ziptgz )提取到文件系统。

注意

每次 Data Grid Operator 都会创建一个 Data Grid 节点,它将工件下载到节点。当 Data Grid Operator 终止 pod 后,也会发生下载。

先决条件

  • 在 HTTP 或 FTP 服务器上托管您的代码工件。

流程

  1. spec.dependencies.artifacts 字段添加到 Infinispan CR。

    1. 将要通过 HTTPFTP 下载文件的位置指定为 spec.dependencies.artifacts.url 字段的值。
    2. (可选)指定一个 checksum 来验证使用 spec.dependencies.artifacts.hash 字段下载的完整性。

      hash 字段需要一个值的格式是 <algorithm>:& lt;checksum>,其中 & lt;algorithm& gt; 是 sha1|sha224|sha256|sha384|sha512|md5

    3. 如果需要,使用 spec.dependencies.artifacts.type 字段设置文件类型。

      如果该文件没有包含在 URL 中,或者文件类型实际上与 URL 中的扩展名不同,则应明确设置该文件类型。

      注意

      如果设置 type: 文件,Data Grid Operator 会按原样下载文件,而不将其提取到文件系统。

      apiVersion: infinispan.org/v1
      kind: Infinispan
      metadata:
        name: example-infinispan
      spec:
        replicas: 2
        dependencies:
          artifacts:
            - url: http://example.com:8080/path
              hash: sha256:596408848b56b5a23096baa110cd8b633c9a9aef2edd6b38943ade5b4edcd686
              type: zip
        service:
          type: DataGrid
      Copy to Clipboard Toggle word wrap
  2. 应用更改。

第 16 章 从 Data Grid 集群发送云事件

通过将 CloudEvents 发送到 Apache Kafka 主题,将 Data Grid 配置为 Knative 源。

使用 Red Hat OpenShift Serverless 发送云事件作为技术预览提供。

16.1. 技术预览

红帽产品服务级别协议(SLA)不支持技术预览功能或功能,且可能无法完成。

红帽不推荐在生产环境中使用技术预览功能或产品功能。这些功能为您提供对即将推出的产品功能的早期访问,这些功能允许您在开发过程中测试并提供反馈。

如需更多信息,请参阅红帽技术预览功能支持范围

16.2. 云事件

在创建、更新、删除或过期缓存中的条目时,您可以从 Data Grid 集群发送 CloudEvents

Data Grid 以 JSON 格式向 Kafka 发送结构化事件,如下例所示:

{
    "specversion": "1.0",
    "source": "/infinispan/<cluster_name>/<cache_name>",
    "type": "org.infinispan.entry.created",
    "time": "<timestamp>",
    "subject": "<key-name>",
    "id": "key-name:CommandInvocation:node-name:0",
    "data": {
       "property": "value"
    }
}
Copy to Clipboard Toggle word wrap
Expand
字段描述

type

使用 org.infinispan.entry.entry 为 Data Grid 缓存条目添加前缀事件。

data

条目值。

subject

条目键,转换为字符串。

id

为事件生成的标识符。

16.3. 启用云事件

配置 Data Grid 以发送 CloudEvents

先决条件

  • 设置一个 Kafka 集群,侦听 Data Grid 主题。

流程

  1. spec.cloudEvents 添加到 Infinispan CR。

    1. 使用 spec.cloudEvents.acks 字段配置确认数量。值为 "0", "1", 或 "all"。
    2. 使用 spec.cloudEvents.bootstrapServers 字段列出 Data Grid 将事件发送到的 Kafka 服务器。
    3. 使用 spec.cloudEvents.cacheEntriesTopic 字段指定 Data Grid 事件的 Kafka 主题。

      spec:
        cloudEvents:
          acks: "1"
          bootstrapServers: my-cluster-kafka-bootstrap_1.<namespace_1>.svc:9092,my-cluster-kafka-bootstrap_2.<namespace_2>.svc:9092
          cacheEntriesTopic: target-topic
      Copy to Clipboard Toggle word wrap
  2. 应用您的更改。

第 17 章 建立远程客户端连接

从 Data Grid Console、命令行界面(CLI)和远程客户端连接到 Data Grid 集群。

17.1. 客户端连接详情

在连接到 Data Grid 之前,您需要检索以下信息:

  • 服务主机名
  • 端口
  • 身份验证凭证(如果需要)
  • TLS 证书(如果使用加密)

服务主机名

服务主机名取决于您如何在网络上公开数据网格,或者您的客户端在 OpenShift 上运行。

对于在 OpenShift 上运行的客户端,您可以使用 Data Grid Operator 创建的内部服务的名称。

对于在 OpenShift 外部运行的客户端,如果您使用负载均衡器,服务主机名是位置 URL。对于节点端口服务,服务主机名是节点主机名。对于路由,服务主机名是自定义主机名或系统定义的主机名。

端口

OpenShift 和负载平衡器上的客户端连接使用端口 11222

节点端口服务使用 3000060000 范围内的端口。路由使用端口 80 (加密)或 443 (加密)。

17.2. Data Grid 缓存

缓存配置定义数据存储的特征和功能,且必须通过 Data Grid 模式有效。Data Grid 建议以 XML 或 JSON 格式创建独立文件来定义您的缓存配置。您应该将 Data Grid 配置与应用程序代码分开以方便验证,并避免出现需要以 Java 或其他客户端语言维护 XML 代码段的情况。

要使用在 OpenShift 上运行的 Data Grid 集群创建缓存,您应该:

  • 使用 Cache CR 作为通过 OpenShift 前端创建缓存的机制。
  • 使用 Batch CR 从独立配置文件一次创建多个缓存。
  • 访问数据网格控制台,并以 XML 或 JSON 格式创建缓存。

您可以使用 Hot Rod 或 HTTP 客户端,但 Data Grid 建议 Cache CR 或 Batch CR,除非特定的用例需要编程远程缓存创建。

17.3. 连接 Data Grid CLI

使用命令行界面(CLI)连接到您的数据网格集群并执行管理操作。

先决条件

  • 下载 CLI 发布功能,以便您可以连接到 OpenShift 上的 Data Grid 集群。

Data Grid CLI 由服务器分发或原生可执行文件提供。

按照 Data Grid Server 入门 中的说明,以了解有关下载并安装 CLI 的信息,作为服务器分发的一部分。对于原生 CLI,您应该遵循 ZIP 下载中包含的 README 文件中的安装说明。

注意

可以在 Data Grid 节点上打开远程 shell 并访问 CLI。

$ oc rsh example-infinispan-0
Copy to Clipboard Toggle word wrap

但是,以这种方式使用 CLI 消耗分配给容器的内存,这可能会导致内存不足异常。

流程

  1. 创建与 Data Grid 集群的 CLI 连接。

    使用服务器发布

    $ bin/cli.sh -c https://$SERVICE_HOSTNAME:$PORT --trustall
    Copy to Clipboard Toggle word wrap

    使用原生 CLI

    $ ./redhat-datagrid-cli -c https://$SERVICE_HOSTNAME:$PORT --trustall
    Copy to Clipboard Toggle word wrap

    $SERVICE_HOSTNAME:$PORT 替换为在网络上提供 Data Grid 的主机名和端口。

  2. 出现提示时,输入您的 Data Grid 凭证。
  3. 根据需要执行 CLI 操作,例如:

    1. 使用 ls 命令列出集群中配置的缓存。

      [//containers/default]> ls caches
      mycache
      Copy to Clipboard Toggle word wrap
    2. 使用 describe 命令查看缓存配置。

      [//containers/default]> describe caches/mycache
      Copy to Clipboard Toggle word wrap

17.4. 访问数据网格控制台

访问控制台以创建缓存、执行管理操作并监控您的数据网格集群。

先决条件

  • 在网络上公开 Data Grid,以便您可以通过浏览器访问控制台。
    例如,配置负载均衡器服务或创建路由。

流程

  • 从位于 $SERVICE_HOSTNAME 的任何浏览器访问控制台:$PORT.

    $SERVICE_HOSTNAME:$PORT 替换为在网络上提供 Data Grid 的主机名和端口。

17.5. 热 Rod 客户端

hot Rod 是一个二进制 TCP 协议,Data Grid 提供带有远程客户端的高性能数据传输功能。

客户端智能

客户端智能指的是 Hot Rod 协议提供的机制,以便客户端可以定位并发送请求到 Data Grid pod。

在 OpenShift 上运行的热 Rod 客户端可以访问 Data Grid pod 的内部 IP 地址,以便您可以使用任何客户端智能。建议默认智能 HASH_DISTRIBUTION_AWARE,因为它允许客户端将请求路由到主所有者,从而提高性能。

在 OpenShift 外部运行的热 Rod 客户端必须使用 BASIC 智能。

17.5.1. hot Rod 客户端配置 API

您可以使用 ConfigurationBuilder 接口以编程方式配置 Hot Rod 客户端连接。

注意

$SERVICE_HOSTNAME:$PORT 表示允许访问您的数据网格集群的主机名和端口。您应该使用环境的实际主机名和端口替换这些变量。

在 OpenShift 中

在 OpenShift 上运行的热 Rod 客户端可使用以下配置:

import org.infinispan.client.hotrod.configuration.ConfigurationBuilder;
import org.infinispan.client.hotrod.configuration.SaslQop;
import org.infinispan.client.hotrod.impl.ConfigurationProperties;
...

ConfigurationBuilder builder = new ConfigurationBuilder();
      builder.addServer()
               .host("$SERVICE_HOSTNAME")
               .port(ConfigurationProperties.DEFAULT_HOTROD_PORT)
             .security().authentication()
               .username("username")
               .password("changeme")
               .realm("default")
               .saslQop(SaslQop.AUTH)
               .saslMechanism("SCRAM-SHA-512")
             .ssl()
               .sniHostName("$SERVICE_HOSTNAME")
               .trustStoreFileName("/var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt")
               .trustStoreType("pem");
Copy to Clipboard Toggle word wrap
外部 OpenShift

在 OpenShift 外部运行的热 Rod 客户端可使用以下配置:

import org.infinispan.client.hotrod.configuration.ClientIntelligence;
import org.infinispan.client.hotrod.configuration.ConfigurationBuilder;
import org.infinispan.client.hotrod.configuration.SaslQop;
...

ConfigurationBuilder builder = new ConfigurationBuilder();
      builder.addServer()
               .host("$SERVICE_HOSTNAME")
               .port("$PORT")
             .security().authentication()
               .username("username")
               .password("changeme")
               .realm("default")
               .saslQop(SaslQop.AUTH)
               .saslMechanism("SCRAM-SHA-512")
             .ssl()
               .sniHostName("$SERVICE_HOSTNAME")
               //Create a client trust store with tls.crt from your project.
               .trustStoreFileName("/path/to/truststore.pkcs12")
               .trustStorePassword("trust_store_password")
               .trustStoreType("PCKS12");
      builder.clientIntelligence(ClientIntelligence.BASIC);
Copy to Clipboard Toggle word wrap

17.5.2. 热 Rod 客户端属性

您可以使用应用程序 classpath 上的 hotrod-client.properties 文件配置 Hot Rod 客户端连接。

注意

$SERVICE_HOSTNAME:$PORT 表示允许访问您的数据网格集群的主机名和端口。您应该使用环境的实际主机名和端口替换这些变量。

在 OpenShift 中

在 OpenShift 上运行的热 Rod 客户端可使用以下属性:

# Connection
infinispan.client.hotrod.server_list=$SERVICE_HOSTNAME:$PORT

# Authentication
infinispan.client.hotrod.use_auth=true
infinispan.client.hotrod.auth_username=developer
infinispan.client.hotrod.auth_password=$PASSWORD
infinispan.client.hotrod.auth_server_name=$CLUSTER_NAME
infinispan.client.hotrod.sasl_properties.javax.security.sasl.qop=auth
infinispan.client.hotrod.sasl_mechanism=SCRAM-SHA-512

# Encryption
infinispan.client.hotrod.sni_host_name=$SERVICE_HOSTNAME
infinispan.client.hotrod.trust_store_file_name=/var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt
infinispan.client.hotrod.trust_store_type=pem
Copy to Clipboard Toggle word wrap
外部 OpenShift

在 OpenShift 外部运行的热 Rod 客户端可使用以下属性:

# Connection
infinispan.client.hotrod.server_list=$SERVICE_HOSTNAME:$PORT

# Client intelligence
infinispan.client.hotrod.client_intelligence=BASIC

# Authentication
infinispan.client.hotrod.use_auth=true
infinispan.client.hotrod.auth_username=developer
infinispan.client.hotrod.auth_password=$PASSWORD
infinispan.client.hotrod.auth_server_name=$CLUSTER_NAME
infinispan.client.hotrod.sasl_properties.javax.security.sasl.qop=auth
infinispan.client.hotrod.sasl_mechanism=SCRAM-SHA-512

# Encryption
infinispan.client.hotrod.sni_host_name=$SERVICE_HOSTNAME
# Create a client trust store with tls.crt from your project.
infinispan.client.hotrod.trust_store_file_name=/path/to/truststore.pkcs12
infinispan.client.hotrod.trust_store_password=trust_store_password
infinispan.client.hotrod.trust_store_type=PCKS12
Copy to Clipboard Toggle word wrap

17.5.3. 为证书身份验证配置 Hot Rod 客户端

如果启用了客户端证书身份验证,客户端必须在与 Data Grid 进行连接时显示有效的证书。

验证策略

如果使用 Validate 策略,则必须使用密钥存储配置客户端,以便它们能够提供签名证书。您还必须使用 Data Grid 凭证和任何合适的身份验证机制配置客户端。

验证策略

如果使用 Authenticate 策略,则必须使用包含签名证书和有效 Data Grid 凭证的密钥存储配置客户端,作为可分辨名称(DN)的一部分。热 Rod 客户端还必须使用 EXTERNAL 身份验证机制。

注意

如果启用安全授权,您应该为来自客户端证书的通用名称(CN)分配一个具有适当权限的角色。

以下示例显示了使用 Authenticate 策略进行客户端证书身份验证的 Hot Rod 客户端配置:

import org.infinispan.client.hotrod.configuration.ConfigurationBuilder;
...

ConfigurationBuilder builder = new ConfigurationBuilder();
      builder.security()
             .authentication()
               .saslMechanism("EXTERNAL")
             .ssl()
               .keyStoreFileName("/path/to/keystore")
               .keyStorePassword("keystorepassword".toCharArray())
               .keyStoreType("PCKS12");
Copy to Clipboard Toggle word wrap

17.5.4. 从 Hot Rod 客户端创建缓存

您可以使用 Hot Rod 客户端在 OpenShift 上运行的 Data Grid 集群上远程创建缓存。但是,Data Grid 建议使用 Data Grid 控制台、CLI 或带有 Cache CR 而不是 Hot Rod 客户端创建缓存。

以编程方式创建缓存

以下示例演示了如何将缓存配置添加到 ConfigurationBuilder 中,然后使用 RemoteCacheManager 创建它们:

import org.infinispan.client.hotrod.DefaultTemplate;
import org.infinispan.client.hotrod.RemoteCache;
import org.infinispan.client.hotrod.RemoteCacheManager;
...

      builder.remoteCache("my-cache")
             .templateName(DefaultTemplate.DIST_SYNC);
      builder.remoteCache("another-cache")
             .configuration("<infinispan><cache-container><distributed-cache name=\"another-cache\"><encoding media-type=\"application/x-protostream\"/></distributed-cache></cache-container></infinispan>");
      try (RemoteCacheManager cacheManager = new RemoteCacheManager(builder.build())) {
      // Get a remote cache that does not exist.
      // Rather than return null, create the cache from a template.
      RemoteCache<String, String> cache = cacheManager.getCache("my-cache");
      // Store a value.
      cache.put("hello", "world");
      // Retrieve the value and print it.
      System.out.printf("key = %s\n", cache.get("hello"));
Copy to Clipboard Toggle word wrap

本例演示了如何使用 XMLStringConfiguration () 方法创建名为 CacheWithXMLConfiguration 的缓存,将缓存配置作为 XML 传递:

import org.infinispan.client.hotrod.RemoteCacheManager;
import org.infinispan.commons.configuration.XMLStringConfiguration;
...

private void createCacheWithXMLConfiguration() {
    String cacheName = "CacheWithXMLConfiguration";
    String xml = String.format("<distributed-cache name=\"%s\">" +
                                  "<encoding media-type=\"application/x-protostream\"/>" +
                                  "<locking isolation=\"READ_COMMITTED\"/>" +
                                  "<transaction mode=\"NON_XA\"/>" +
                                  "<expiration lifespan=\"60000\" interval=\"20000\"/>" +
                                "</distributed-cache>"
                                , cacheName);
    manager.administration().getOrCreateCache(cacheName, new XMLStringConfiguration(xml));
    System.out.println("Cache with configuration exists or is created.");
}
Copy to Clipboard Toggle word wrap
使用 Hot Rod 客户端属性

当您为指定缓存调用 cacheManager.getCache () 调用时,Data Grid 从 Hot Rod 客户端属性创建它们,而不是返回 null。

hotrod-client.properties 中添加缓存配置,如下例所示:

# Add cache configuration
infinispan.client.hotrod.cache.my-cache.template_name=org.infinispan.DIST_SYNC
infinispan.client.hotrod.cache.another-cache.configuration=<infinispan><cache-container><distributed-cache name=\"another-cache\"/></cache-container></infinispan>
infinispan.client.hotrod.cache.my-other-cache.configuration_uri=file:/path/to/configuration.xml
Copy to Clipboard Toggle word wrap

17.6. 访问 REST API

Data Grid 提供了一个 RESTful 接口,您可以使用 HTTP 客户端与之交互。

先决条件

  • 在网络上公开 Data Grid,以便您可以访问 REST API。
    例如,配置负载均衡器服务或创建路由。

流程

  • 使用位于 $SERVICE_HOSTNAME:$PORT/rest/v2 的任何 HTTP 客户端访问 REST API。

    $SERVICE_HOSTNAME:$PORT 替换为在网络上提供 Data Grid 的主机名和端口。

17.7. 将缓存添加到缓存服务 pod

缓存服务 pod 包含使用推荐的设置的默认缓存配置。此默认缓存可让您开始使用 Data Grid,而无需创建缓存。

注意

由于默认缓存提供了推荐的设置,因此您应该只创建缓存作为默认设置的副本。如果需要多个自定义缓存,您应该创建 Data Grid 服务 pod 而不是 Cache 服务 pod。

流程

  • 访问 Data Grid 控制台,并以 XML 或 JSON 格式提供默认配置的副本。
  • 使用 Data Grid CLI 从默认缓存创建副本,如下所示:

    [//containers/default]> create cache --template=default mycache
    Copy to Clipboard Toggle word wrap

17.7.1. 默认缓存配置

本主题描述了缓存服务 pod 的默认缓存配置。

<distributed-cache name="default"
                   mode="SYNC"
                   owners="2">
  <memory storage="OFF_HEAP"
          max-size="<maximum_size_in_bytes>"
          when-full="REMOVE" />
  <partition-handling when-split="ALLOW_READ_WRITES"
                      merge-policy="REMOVE_ALL"/>
</distributed-cache>
Copy to Clipboard Toggle word wrap

默认缓存:

  • 使用同步分发在集群中存储数据。
  • 在集群中创建每个条目的两个副本。
  • 将缓存条目存储为原生内存(off-heap)中的字节数。
  • 定义数据容器的最大大小(以字节为单位)。Data Grid Operator 会在创建 pod 时计算最大大小。
  • 驱除缓存条目来控制数据容器的大小。您可以启用自动扩展,以便 Data Grid Operator 在内存用量增加时添加 pod,而不是删除条目。
  • 使用冲突解析策略,允许对缓存条目进行读写操作,即使网段所有者位于不同的分区中。
  • 指定在 Data Grid 检测到冲突时从缓存中删除条目的合并策略。

法律通告

Copyright © 2023 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat