我已经为我的用例搜索了解决方案,但没有找到合适的解决方案,因此希望有一些不错的想法可以进一步探索。
我有两个gemfire(版本8.2)集群(private和public),每个集群存储110 + GB数据,而没有持久化到磁盘存储中。专用群集从数据库获取数据,然后通过WAN网关将条目传输给公共,直到两个群集都联机。我有一个用例,其中我仅重新启动公共集群,但此后它会丢失数据并填充回去,因此我必须重新启动私有集群并将数据从DB加载到私有集群,再通过WAN传输数据。
我无法从数据库填充公共集群,因为它会将负载施加到主数据库上,这会影响其他应用程序。
我尝试了多种解决方案。
First:从私有群集中导出数据集,然后导入到公共数据库;但这会断开专用集群gemfire节点的连接,因为它在每个区域中都存储大量数据,而且我对用于下载大量数据的磁盘空间也有限制。
第二:有可能我将公开集群中的JMX bean。然后,我可以运行一个客户端程序,该程序在私有集群中调用gemfire函数,该程序通过条目进行迭代并通过JMX将条目拖放到公共集群中,但是我的组织基础结构不允许我在gemfire节点中公开JMX bean。
第三:与第二个方法一样,gemfire函数可以通过队列将数据传输到公共集群,这似乎可以正常工作,但是有其自身的局限性。队列只能传输1MB的文本消息,因此我需要专门处理大对象,并且数据传输还包括不必要的序列化和反序列化(JSON文本消息)。
无论如何,我是否可以要求私有集群通过WAN网关或有人可以建议我探索的任何其他解决方案来重新传输所有数据。
您可以在此开源项目gemfire-toolkit中尝试“ gemtouch”。
听起来与想法2非常相似,但不需要公开JMX bean。它确实与gfsh一样使用JMX。如果这是一个问题,您可以轻松地删除对JMX的使用,因为它仅使用JMX来检索区域列表。
我有相同的问题,但使用3个Geode群集(每个群集都在不同的位置。)>
[当其中一个集群发生奇怪的事情时,我们需要使用现有的两个剩余集群之一来恢复它: