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

First hazelcast node is shutting down instead of becoming master

提问人:Divyaa 提问时间:10/27/2020 最后编辑:Divyaa 更新时间:10/28/2020 访问量:2729

问:

我正在尝试使用 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云上的服务器上,但上述配置在我的本地机器上运行良好

java spring-boot tcp hazelcast 分布式缓存

评论


答:

0赞 Neil Stevenson 10/27/2020 #1

尝试从通配符更改为显式 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 尝试过了,通配符实现了。

评论

0赞 Divyaa 10/27/2020
我给出通配符的原因是成员的 IP 地址不是静态的,它们可能在 0 - 255 之间变化
0赞 Neil Stevenson 10/27/2020
明白了,已经更新了我的答案,更详细了。
0赞 Divyaa 10/28/2020
我的印象是支持通配符,这就是让我失望的原因!谢谢!但是知道为什么通配符在我的本地设置中起作用吗?
0赞 Neil Stevenson 10/28/2020
嗨,是的,似乎是,实际上已经尝试过了。所以这不是问题。我看到你在AWS上,所以也许AWS Discovery Plugin将是前进的方向。但是,了解 AWS 上的错误原因仍然很有用。您有更多可以共享的日志吗?如果您正在尝试一系列 IP 地址,则可能会找到其他人的集群,但被拒绝连接到该集群。
0赞 Divyaa 10/28/2020
在日志中,我看到节点向成员列表中的所有 ip 发送主问题。一些 ip 重新列出。当节点声称是主节点时,会出现以下错误:在此之后,主地址设置为空,节点关闭。2020-10-27 05:31:46 DEBUG com.hazelcast.cluster.impl.TcpIpJoiner:49 - [192.168.10.31]:5701 [dev] [3.12] com.hazelcast.spi.exception.RetryableIOException: Packet not sent to -> [192.168.10.111]:5703 over null