6.7. 全局持久性位置
Data Grid 保留全局状态,以便它在重启后可以恢复集群拓扑和缓存的数据。
Data Grid 使用文件锁定来防止并发访问全局持久位置。锁定在启动时获取,并在节点关闭时释放。存在悬停的锁定文件表示节点没有完全关闭,无论是因为崩溃或外部终止而被完全关闭。在默认配置中,Data Grid 将拒绝启动以避免出现以下消息的数据损坏:
ISPN000693: Dangling lock file '%s' in persistent global state, probably left behind by an unclean shutdown
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'"
ISPN000558: "The store location 'foo' is not a child of the global persistent location 'bar'"
6.7.1. 配置全局持久位置 复制链接链接已复制到粘贴板!
启用并配置 Data Grid 存储集群嵌入式缓存的全局状态的位置。
Data Grid 服务器实现全局持久性并配置默认位置。您不应该禁用全局持久性或更改远程缓存的默认配置。
先决条件
- 将 Data Grid 添加到您的项目。
 
流程
使用以下方法之一启用全局状态:
- 
									将 
global-state元素添加到您的 Data Grid 配置中。 - 
									在 
GlobalConfigurationBuilderAPI 中调用globalState ().enable ()方法。 
- 
									将 
 定义全局持久位置是否对每个节点是唯一的,还是在集群间共享。
Expand 位置类型 配置 每个节点的唯一
persistent-location元素或persistentLocation ()方法在集群中共享
shared-persistent-location元素或sharedPersistentLocation (String)方法设置 Data Grid 存储集群状态的路径。
例如,基于文件的缓存存储了路径是主机文件系统上的目录。
值可以是:
- 绝对并包含完整位置,包括 root 用户。
 - 相对于根位置。
 
如果为路径指定相对值,还必须指定一个解析为根位置的系统属性。
例如,在 Linux 主机系统中,您将
global/state设置为路径。您还可以设置解析到/opt/data根位置的my.data属性。在这种情况下,Data Grid 使用/opt/data/global/state作为全局持久位置。
全局持久性位置配置
XML
JSON
YAML
cacheContainer:
  globalState:
      persistentLocation:
        path: "global/state"
        relativeTo : "my.data"
cacheContainer:
  globalState:
      persistentLocation:
        path: "global/state"
        relativeTo : "my.data"
GlobalConfigurationBuilder
new GlobalConfigurationBuilder().globalState()
                                .enable()
                                .persistentLocation("global/state", "my.data");
new GlobalConfigurationBuilder().globalState()
                                .enable()
                                .persistentLocation("global/state", "my.data");