2016-09-23 25 views
0

我有一個由2個節點組成的集羣(A & B)。我把2個數據元素從節點A放入緩存(例如,我把firstName和lastName放入緩存中)。Apache Ignite - 數據重新平衡不能正常工作

現在我正在從節點B上的緩存讀取這些數據元素。節點B能夠成功讀取緩存中的兩個元素。

現在我們關閉節點A.節點B無法從緩存中讀取一個數據對象。我已經添加了一個完整的應用程序來重現此問題。我還在代碼中添加了README.md文件,其中包含用於重現問題的確切步驟。

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

我確保備份計數設置爲1,我可以看到兩個節點都加入罰款,你可以從下面的日誌中看到它。這些日誌是從年輕的節點B.

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] 

這些日誌是從舊節點A:

Added new node to topology: TcpDiscoveryNode [id=bea211c9-8806-4c5c-91f3-c07dab543de9, addrs=[10.44.72.188], sockAddrs=[/10.44.72.188:47500], discPort=47500, order=2, intOrder=2, lastExchangeTime=1474674697922, loc=false, ver=1.7.0#20160801-sha1:383273e3, isClient=false] 
    Topology snapshot [ver=2, servers=2, clients=0, CPUs=9, heap=3.7GB] 
    Skipping rebalancing (nothing scheduled) [top=AffinityTopologyVersion [topVer=2, minorTopVer=0], evt=NODE_JOINED, node=bea211c9-8806-4c5c-91f3-c07dab543de9] 
    Skipping rebalancing (nothing scheduled) [top=AffinityTopologyVersion [topVer=2, minorTopVer=1], evt=DISCOVERY_CUSTOM_EVT, node=1d01e477-172d-4c57-aade-6abe9773aa99] 

回答

1

您設置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")時,停止其中一個節點時,我從不丟失數據。

+0

它在日誌中顯示相同。是的,我已經設置了備份計數。我用日誌更新了原始問題。 – manish

+0

此外,我擺脫了ipFinder.setShared(true),但仍然是同樣的問題。 – manish

+0

我更新了我的回覆。 –