我有一个包含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]
答案 0 :(得分:2)
您设置错误的ipFinder.setShared(true)
。在共享模式下使用TcpDiscoveryVmIpFinder
时,仅当节点在同一JVM中运行并且共享相同的查找程序实例时,它们才会发现彼此。因此,如果您使用了这个确切的代码,节点就不会相互发现。检查旧节点日志是否有如下所示的行,当第二个节点加入拓扑时应该打印出来。
Topology snapshot [ver=2, servers=2, clients=0, CPUs=4, heap=7.1GB]
还要确保至少配置了一个备份。否则,在丢失节点后,您很可能会丢失部分或全部数据。
- UPDATE -
IgniteCacheConfig
将groupName
设置为缓存名称(默认为SEG
)。这意味着Ignite将在启动时使用此名称创建缓存。但该应用程序使用名为someCache
的缓存。由于此缓存没有配置,因此将使用默认设置,这意味着不进行备份。当我在缓存配置中执行setName("someCache")
时,在停止其中一个节点时,我永远不会丢失数据。