0

我们正在使用多站点 WAN 配置。我们在北美和欧洲有两个跨越地理距离的集群。

上下文:集群 1 有两个成员 A 和 B,它们都是网关发送者。集群 B 有两个成员 C 和 D,它们都是网关接收者。当集群 1 中的成员 A 启动时,它从数据库中读取数据并将其加载到 gemfire 缓存中,然后发送到集群 2。到目前为止一切都很好。

问题:如果集群 2 中的两个成员同时重新启动,它们会丢失所有 gemfire 区域/数据。此时,我们可以重新启动集群 1 中的成员 A,它再次从数据库加载数据并被推送到集群 B。但我们更愿意避免重新启动成员 A,并且不持久化到硬盘。

是否有解决方案,如果集群 2 重新启动,它可以从集群 1 请求数据的完整副本?

不确定是否可行,但我们能否以某种方式为集群 2(在 WAN 之上)中的网关接收器设置点对点,以便在重新启动时自动更新它们。

谢谢

4

1 回答 1

0

目前不支持通过 WAN 获取数据的完整副本。您可以做的是在站点 A 的所有成员上运行一个函数,该函数简单地遍历所有数据并将其再次放回该区域。即类似的东西:

public void execute(FunctionContext context) {
  RegionFunctionContext ctx = (RegionFunctionContext)context;
  Region localData = PartitionRegionHelper.getLocalDataForContext(ctx);
  for (Object key : localData.keySet()) {
    Object val = localData.get(key);
    localData.put(key, val);
  }
}
于 2017-02-06T20:29:16.090 回答