第 4 章 为 OpenShift 服务设置数据网格

4.1. 用于 OpenShift 服务的数据网格

数据网格服务是有状态的应用程序,您可以轻松地扩展或缩减而不丢失数据。

cache-service

适用于 OpenShift 集群的易于使用的数据网格,旨在通过高性能缓存加快应用程序响应时间。

  • 内存中的数据在节点间平均分布。在创建服务时,您可以定义 Data Grid 集群的初始大小。发行版也是同步的。当向另一节点传播数据时,发送节点会等待操作在线程继续之前完成。
  • 默认情况下,缓存条目的单一副本。如果 Pod 重启,则 pod 中的数据将会丢失。为了实现更加弹性的数据,您可以在创建服务时轻松启用复制。
  • 缓存条目存储了 JVM 效率的不足堆。当缓存大小达到 pod 可用的内存量时,条目会被驱除。您可以选择更改驱除策略来引发 ContainerFullException
datagrid-service
针对 OpenShift 的完整数据网格分布,可让您创建多个不同的缓存配置。为您提供索引和查询以及 Prometheus 监控等高级功能。

4.1.1. Container Storage

cache-servicedatagrid-service 容器在 /opt/datagrid/standalone/data 上挂载了存储卷。

卷大小为 1GB。您可以使用 datagrid-service 来调整大小,但不使用 cache-service

ephemeral 或 Permanent
当您远程创建缓存时,您可以控制它们是否为临时还是永久的。永久缓存会在容器重启后保留,因为缓存定义保存在存储卷中。默认缓存始终是永久的。
persistent
datagrid-service 可让您持久的缓存条目和索引到存储卷。如果您需要更多的数据保证,您可以选择性地通过缓存存储保留基于外部文件的存储或数据库。

4.1.2. 分区处理

默认情况下,OpenShift 服务的 Data Grid 使用分区处理配置来确保数据一致性。

  • DENY_READ_WRITES 冲突解决策略,该策略拒绝缓存条目的读写操作,除非网段的所有所有者都位于同一分区。
  • REMOVE_ALL merge 策略,在检测到冲突时从缓存中删除条目。
注意

只有在数据在集群间复制时,才会应用网络分区。

4.1.3. 确认服务可用性

用于 cache-servicedatagrid-service 的模板可在 openshift 命名空间中的 Red Hat OpenShift Online 和 Red Hat OpenShift Container Platform 中找到。

运行以下命令,以验证服务模板是否可用:

$ oc get templates -n openshift | grep 'cache-service\|datagrid-service'

4.1.3.1. 导入模板

如有必要,导入 cache-servicedatagrid-service,如下所示:

  1. 登录您的 OpenShift 集群。
  2. 导入服务模板:

    $ for resource in cache-service-template.yaml \
      datagrid-service-template.yaml
    do
      oc create -n openshift -f \
      https://raw.githubusercontent.com/jboss-container-images/jboss-datagrid-7-openshift-image/7.3-v1.9/services/${resource}
    done
    提示

    使用 oc replace --force 覆盖现有模板。