2017-08-22 61 views
0

我有四個虛擬機。我在我的應用程序中以「嵌入」模式運行hazelcast,試圖將它用於hibernate l2緩存。Hazelcast節點拒絕加入彼此

當我嘗試啓動不同的組時,會出現混合行爲。由於機器的子網劃分,我認爲我遇到了問題。 machines/sbin/ifconfig顯示四個節點之間有兩臺機器的三個子網(node1和node4顯示除迴環以外的兩個網絡設備)。

Mancenter正在第五個節點上運行。

機/ subnet1/subnet2

節點1 10.10.40.1 10.10.27.1

節點2 10.10.42.1

節點3 10.10.40.2

節點4 10.10.42.2 10.10.27.2

因此,node1和node3共享一個子網,node1和node4共享,node2和node4共享。

行爲非常不一致,儘管節點1和節點2一起開始似乎可靠地形成一個羣集,就像節點1和節點3一樣。其他組合似乎進入裂腦方案,在那裏它出現我有兩個或更多具有相同名稱的集羣。

查詢我們的內部DNS,主機名將解析爲10.10.40和10.10.42 IP。

它們具有相同的配置。我試圖將接口轉換爲10.10.40。*和10.10.42。*,同時將hazelcast.socket.bind.any轉換爲false。由於我們的部署框架在羣集中具有相同的配置是高優先級。

我已經嘗試通過主機名和IP(從主機名的nslookup中解析出的那個)列出節點。按主機名列出將成爲操作的要求。

在某些情況下,我設法讓它們形成一個羣集,儘管遷移失敗了,因爲它抱怨說它無法到達其中一個節點。好奇心我已經注意到mancenter有時候會將節點標識爲另一個節點,比如當前我有node3和node4正在運行(node1和node2的應用程序關閉),並且它將其中的一個標識爲node2。我想知道這是否與節點在虛擬機上運行(每個虛擬機一個實例)有關。我相信hostOS是redhat,虛擬機運行centOS。

我在錯誤的軌道上認爲這是一個問題?還有什麼可以造成這種情況?

+0

沒有更深的想法我的第一個猜測:子網之間的防火牆? – noctarius

回答

0

我設法解決這個問題,但我並不是100%確定問題的根源。

我當時使用的Hazelcast版本是3.8,但是我從3.7開始進行配置。一目瞭然,唯一的區別是模式從「hazelcast-config-3.7.xsd」更改爲「hazelcast-config-3.8.xsd」。

我也將mancenter從3.7版本升級到3.8版本。不過,我不確定這會有什麼影響。

無論哪種方式,我的四個節點現在開始互相交談。所以如果你遇到這個問題並且有類似問題,我建議你確保你的配置版本與你部署的版本相匹配。