使用gemfire通过集群传输数据

时间:2019-02-07 17:16:04

标签: java gemfire spring-data-gemfire

我已经为用例搜索了解决方案,但没有找到合适的解决方案,因此希望有一些不错的想法可以进一步探索。

我有两个gemfire(8.2版)集群( private public ),每个集群存储 110 + GB数据,但不持久存储到磁盘存储中。专用群集从数据库获取数据,然后通过WAN网关将条目传输给公共,直到两个群集都联机。我有一个用例,其中我仅重新启动公共集群,但此后它会丢失数据并填充回去,因此我必须重新启动私有集群并将数据从DB加载到私有集群,再通过WAN传输数据。

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

我尝试了多种解决方案。

首先:从私有集群导出数据集,然后导入到公共数据库;但这会断开专用集群gemfire节点的连接,因为它在每个区域中都存储大量数据,而且我对用于下载大量数据的磁盘空间也有限制。

第二:我有可能会从公共集群中公开JMX bean。然后,我可以运行一个客户端程序,该程序在私有集群中调用gemfire函数,该程序通过JMX迭代条目并将条目拖放到公共集群中,但是我的组织架构不允许我在gemfire节点中公开JMX bean。

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

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

2 个答案:

答案 0 :(得分:1)

您可以在此开源项目gemfire-toolkit中尝试“ gemtouch”。

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

答案 1 :(得分:0)

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

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

  • 如果我们“触摸”其中一个集群,则意味着所有这些信息都将复制到需要恢复的集群,也将复制到实际上还可以的其他集群。没关系,可能不会造成任何损害,但我希望您提出任何意见。
  • 如果我们在其余两个群集中运行GemTouch时仍保持流量运行,我想群集之间可能会弹出一些一致性问题,但不确定。
  • 最后一个主题是有关gemfire-toolkit的许可。实际上,没有LICENSE文件,因此我不确定100%是否可以使用该工具。