我们正在使用多站点WAN配置。我们在北美和欧洲有两个跨越地理距离的集群。
上下文:群集1有两个成员A和B,它们都是网关发件人。集群B有两个成员C和D,它们都是网关接收者。当集群1中的成员A启动时,它会从数据库中读取数据并将其加载到gemfire缓存中,然后将其发送到集群2.到目前为止一切都很好。
问题:如果群集2中的两个成员同时重新启动,则会丢失所有gemfire区域/数据。此时,我们可以重新启动集群1中的成员A,它再次从数据库加载数据并被推送到集群B. 但我们更愿意避免重新启动成员A并且不会持久保存到硬盘。
是否有解决方案,如果重新启动群集2,它可以从群集1请求数据的完整副本?
不确定是否可行,但是我们可以以某种方式为群集2中的网关接收器(在WAN之上)建立点对点,因此它们会在重新启动时自动更新。
由于
答案 0 :(得分: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);
}
}