2017-08-22 63 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版本。不过,我不确定这会有什么影响。

无论哪种方式,我的四个节点现在开始互相交谈。所以如果你遇到这个问题并且有类似问题,我建议你确保你的配置版本与你部署的版本相匹配。