使用 gemfire 通过集群传输数据

Transferring data through clusters using gemfire

我已经为我的用例搜索了解决方案,但没有找到正确的解决方案,所以期待一些好的想法进一步探索。

我有两个 gemfire(版本 8.2)集群(privatepublic)每个存储 110+ GB 数据,无需持久存储到磁盘存储。私有集群从数据库中获取数据并通过 WAN 网关将条目传输到 public,直到两个集群都在线。我有一个用例,我只重新启动 public 集群,但之后它会丢失数据并填充数据,我必须重新启动私有集群并将数据从数据库加载到私有集群,私有集群又通过 WAN 传输数据。

我无法从数据库填充 public 集群,因为它会将负载加到我的主数据库上,这会影响其他应用程序。

我尝试了多种解决方案。

首先:从私有集群导出数据集,然后导入到public;但这会断开私有集群 gemfire 节点的连接,因为它在每个区域存储大量数据,而且我对磁盘 space 有限制,无法下载大量数据。

其次: 我有可能从 public 集群公开一个 JMX bean。然后我可以 运行 一个在私有集群中调用 gemfire 函数的客户端程序,它遍历条目并通过 JMX 将条目放入 public 集群,但是我的组织基础设施不允许我在 gemfire 节点中公开 JMX beans .

第三: 与第二个一样,gemfire 函数可以通过队列将数据传输到 public 集群,这似乎可以工作但有其自身的局限性。队列只能传输1MB的文本消息,因此我需要专门处理大对象,并且数据传输包括不必要的序列化和反序列化(JSON文本消息)。

无论如何,我是否可以要求私有集群通过 WAN 网关或任何其他有人可以建议我探索的解决方案重新传输所有数据。

您可以在这个开源项目 gemfire-toolkit 中尝试 "gemtouch"。

这听起来与想法 2 非常相似,但它不需要公开 JMX bean。它确实以与 gfsh 相同的方式使用 JMX。如果这是一个问题,您可以轻松地删除 JMX 的使用,因为它仅使用 JMX 来检索区域列表。

我遇到了同样的问题,但使用了 3 个 Geode 集群(每个都在不同的位置)。

当一个集群中发生奇怪的事情时,我们需要使用现有的 2 个剩余集群之一来恢复它:

  • 如果我们 "touch" 其中一个集群,这意味着所有这些信息都将复制到需要恢复的集群,但也会复制到实际上没问题的另一个集群。可能没关系,不会造成任何损害,但如果有任何意见,我将不胜感激。
  • 如果我们在其余 2 个集群中保持 运行 流量,而在其中一个集群中我们是 运行 GemTouch,我想集群之间可能会出现一些一致性问题,但不确定。
  • 最后一个主题是关于gemfire-toolkit 的许可证。实际上,没有LICENSE文件,所以我不能100%确定该工具是否可以使用。