第一个hazelcast节点正在关闭,而不是成为主节点

问题描述

我正在尝试使用tcp / ip发现来形成集群。我不明白为什么第一个节点没有被选为主节点。集群中没有其他节点。而且错误日志不是自我解释。

调试日志:

2020-10-27 05:31:46 DEBUG com.hazelcast.internal.cluster.ClusterService:49 - [192.168.10.31]:5701 [dev] [3.12] Setting master address to null
2020-10-27 05:31:46 DEBUG com.hazelcast.cluster.impl.TcpIpJoiner:49 - [192.168.10.31]:5701 [dev] [3.12] PostJoin master: null,isMaster: false
2020-10-27 05:31:46 ERROR com.hazelcast.instance.Node:49 - [192.168.10.31]:5701 [dev] [3.12] Could not join cluster. Shutting down Now!
2020-10-27 05:31:46 INFO  com.hazelcast.core.LifecycleService:49 - [192.168.10.31]:5701 [dev] [3.12] [192.168.10.31]:5701 is SHUTTING_DOWN
2020-10-27 05:31:46 WARN  com.hazelcast.instance.Node:49 - [192.168.10.31]:5701 [dev] [3.12] Terminating forcefully...
2020-10-27 05:31:46 DEBUG com.hazelcast.internal.cluster.ClusterService:49 - [192.168.10.31]:5701 [dev] [3.12] Setting master address to null
2020-10-27 05:31:46 INFO  com.hazelcast.instance.Node:49 - [192.168.10.31]:5701 [dev] [3.12] Shutting down connection manager...

Hazelcast版本:3.12

<dependency>
  <groupId>com.hazelcast</groupId>
  <artifactId>hazelcast</artifactId>
  <version>3.12</version>
</dependency>

Hazelcast配置:

String hazelcastClusterMemberOne = 192.168.10.*
Config config = new Config();
        NetworkConfig network = config.getNetworkConfig();
        JoinConfig join = network.getJoin();
        join.getMulticastConfig().setEnabled(false);
        join.getTcpIpConfig().addMember(hazelcastClusterMemberOne)
                .setEnabled(true);

        HazelcastInstance hazelcast = Hazelcast.newHazelcastInstance(config);

错误日志:

2020-10-27 05:31:46 [main] ERROR com.hazelcast.instance.Node com.hazelcast.instance.Node:49 - [192.168.10.31]:5701 [dev] [3.12] Could not join cluster. Shutting down Now!
2020-10-27 05:31:46 [main] INFO  com.hazelcast.core.LifecycleService com.hazelcast.core.LifecycleService:49 - [192.168.10.31]:5701 [dev] [3.12] [192.168.10.31]:5701 is SHUTTING_DOWN
2020-10-27 05:31:46 [main] WARN  com.hazelcast.instance.Node com.hazelcast.instance.Node:49 - [192.168.10.31]:5701 [dev] [3.12] Terminating forcefully...
2020-10-27 05:31:46 [main] INFO  com.hazelcast.instance.Node com.hazelcast.instance.Node:49 - [192.168.10.31]:5701 [dev] [3.12] Shutting down connection manager...

编辑: 这是在托管在AWS云上的服务器上发生的,但是上述配置在我的本地计算机上工作正常

解决方法

尝试从通配符更改为显式IP地址。

即。 不是

getTcpIpConfig().addMember("192.168.10.*")
                .setEnabled(true);

但是

getTcpIpConfig().addMember("192.168.10.1")
                .setEnabled(true);

或者,如果您需要多种可能性,请明确列出

getTcpIpConfig().addMember("192.168.10.1")
                .addMember("192.168.10.2")
                .addMember("192.168.10.3")
                .setEnabled(true);

更新如下

TcpIpConfig并非旨在广泛使用。 Wwildcard没有为此字段实现。您可以列出所有256种可能性,或提交PR实现通配符。无论哪种方式,它都是256个端口进行探测,这将处于较慢的一侧。

如果您在运行时知道第一个节点的地址,则可以将其作为属性传递给其他节点。

如果您不这样做,那么其他发现机制中的一种可能会是更好的选择。

还要注意,TcpIpConfig只是发现机制的规范,而不是一旦发现的通信机制。成员之间的沟通表现与发现机制的选择无关。

更新以下2个 上面的答案是错误的,现在已经在3.12.0中进行了尝试,通配符已实现。