Apache Ignite - 数据重新平衡无法正常工作

时间:2016-09-23 22:17:08

标签: gridgain ignite

我有一个包含2个节点的集群(A& B)。

我在节点A的缓存中放入了2个数据元素(例如,我将firstName和lastName放在缓存中)。

现在我正在从Node B上的缓存中读取这些数据元素。节点B能够成功读取缓存中的两个元素。

现在我们关闭节点A.节点B无法从缓存中读取一个数据对象。我添加了一个完整的应用程序来重现该问题。我还在代码中添加了README.md文件,其中包含重现问题的确切步骤。

https://github.com/manish-panwar/ignite-data-rebalancing-issue

我确保备份计数设置为1,我可以看到两个节点都正常连接,您可以从下面的日志中看到它。这些日志来自较年轻的节点B.

lines = ['Some text 1 line 22 here', 'Some text 2 Text2 22 here', 'Some text 3 Text3 22 here']
good = [s for s in lines if ' 22 ' in s and 'line 22 ' not in s]
print(good) # the first lines[0] is not printed!

这些日志来自较旧的节点A:

Topology snapshot [ver=2, servers=2, clients=0, CPUs=9, heap=3.7GB]
Added listener for disabled event type: CACHE_OBJECT_REMOVED
Skipping rebalancing (nothing scheduled) [top=AffinityTopologyVersion [topVer=2, minorTopVer=1], evt=DISCOVERY_CUSTOM_EVT, node=1d01e477-172d-4c57-aade-6abe9773aa99]

1 个答案:

答案 0 :(得分:2)

您设置错误的ipFinder.setShared(true)。在共享模式下使用TcpDiscoveryVmIpFinder时,仅当节点在同一JVM中运行并且共享相同的查找程序实例时,它们才会发现彼此。因此,如果您使用了这个确切的代码,节点就不会相互发现。检查旧节点日志是否有如下所示的行,当第二个节点加入拓扑时应该打印出来。

Topology snapshot [ver=2, servers=2, clients=0, CPUs=4, heap=7.1GB]

还要确保至少配置了一个备份。否则,在丢失节点后,您很可能会丢失部分或全部数据。

- UPDATE -

IgniteCacheConfiggroupName设置为缓存名称(默认为SEG)。这意味着Ignite将在启动时使用此名称创建缓存。但该应用程序使用名为someCache的缓存。由于此缓存没有配置,因此将使用默认设置,这意味着不进行备份。当我在缓存配置中执行setName("someCache")时,在停止其中一个节点时,我永远不会丢失数据。