6.7. 全局持久性位置


Data Grid 保留全局状态,以便它在重启后可以恢复集群拓扑和缓存的数据。

Data Grid 使用文件锁定来防止并发访问全局持久位置。锁定在启动时获取,并在节点关闭时释放。存在悬停的锁定文件表示节点没有完全关闭,无论是因为崩溃或外部终止而被完全关闭。在默认配置中,Data Grid 将拒绝启动以避免出现以下消息的数据损坏:

ISPN000693: Dangling lock file '%s' in persistent global state, probably left behind by an unclean shutdown

通过将全局状态 unclean-shutdown-action 设置配置为以下之一来更改行为:

  • FAIL: 如果 dangling 锁定文件处于持久的全局状态,则缓存管理器的启动。这是默认的行为。
  • PURGE :清除持久的全局状态,如果 dangling 锁定文件处于持久全局状态。
  • IGNORE :忽略持久性全局状态下形锁定文件。

远程缓存

Data Grid 服务器将集群状态保存到 $RHDG_HOME/server/data 目录中。

重要

您不应该删除或修改 server/data 目录或其内容。在重启服务器实例时,Data Grid 从此目录恢复集群状态。

更改默认配置或直接修改 server/data 目录可能会导致意外行为,并导致数据丢失。

嵌入式缓存

Data Grid 默认为 user.dir 系统属性作为全局持久位置。在大多数情况下,这是应用程序启动的目录。

对于复制或分布式集群嵌入式缓存,您应该始终启用并配置全局持久位置来恢复集群拓扑。

您永远不会为基于文件的缓存存储配置绝对路径,该存储位于全局持久位置之外。如果您这样做,Data Grid 会将以下例外写入日志:

ISPN000558: "The store location 'foo' is not a child of the global persistent location 'bar'"

6.7.1. 配置全局持久位置

启用并配置 Data Grid 存储集群嵌入式缓存的全局状态的位置。

注意

Data Grid 服务器实现全局持久性并配置默认位置。您不应该禁用全局持久性或更改远程缓存的默认配置。

先决条件

  • 将 Data Grid 添加到您的项目。

流程

  1. 使用以下方法之一启用全局状态:

    • global-state 元素添加到您的 Data Grid 配置中。
    • GlobalConfigurationBuilder API 中调用 globalState ().enable () 方法。
  2. 定义全局持久位置是否对每个节点是唯一的,还是在集群间共享。

    位置类型配置

    每个节点的唯一

    persistent-location 元素或 persistentLocation () 方法

    在集群中共享

    shared-persistent-location 元素或 sharedPersistentLocation (String) 方法

  3. 设置 Data Grid 存储集群状态的路径。

    例如,基于文件的缓存存储了路径是主机文件系统上的目录。

    值可以是:

    • 绝对并包含完整位置,包括 root 用户。
    • 相对于根位置。
  4. 如果为路径指定相对值,还必须指定一个解析为根位置的系统属性。

    例如,在 Linux 主机系统中,您将 global/state 设置为路径。您还可以设置解析到 /opt/data 根位置的 my.data 属性。在这种情况下,Data Grid 使用 /opt/data/global/state 作为全局持久位置。

全局持久性位置配置

XML

<infinispan>
  <cache-container>
    <global-state>
      <persistent-location path="global/state" relative-to="my.data"/>
    </global-state>
  </cache-container>
</infinispan>

JSON

{
  "infinispan" : {
    "cache-container" : {
      "global-state": {
        "persistent-location" : {
          "path" : "global/state",
          "relative-to" : "my.data"
        }
      }
    }
  }
}

YAML

cacheContainer:
  globalState:
      persistentLocation:
        path: "global/state"
        relativeTo : "my.data"

GlobalConfigurationBuilder

new GlobalConfigurationBuilder().globalState()
                                .enable()
                                .persistentLocation("global/state", "my.data");

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.