启用多播模式下Hazelcast集群节点无法加入问题求助
问题分析与解决方案
咱们先直接把你的两个核心疑问说清楚:
- 跨网段确实是第三台服务器无法加入集群的主要原因
- Hazelcast IMDG v4.2.2的开源免费版并没有仅允许2台节点的限制——它的开源版本最多支持3个节点组成集群,商业版才没有节点数量上限,所以你三台节点理论上是可以正常组成集群的。
为什么跨网段会导致多播发现失败?
你当前配置用的是**Multicast(多播)**来做集群成员发现,但多播数据包的特性就是默认只能在同一个局域网网段内传播。跨网段的情况下,除非路由器专门配置了多播转发(这在绝大多数企业网络里都是默认关闭的,因为容易引发广播风暴),否则192.168.34.122这台服务器根本收不到另外两台节点的多播发现消息,自然没法加入集群。
解决办法:改用TCP/IP方式做集群发现
既然是跨网段部署,直接放弃多播,改用TCP/IP方式指定所有集群成员的IP地址就可以了,修改你的配置代码如下:
@Bean public Config hazelCastConfig() { Config config = new Config(); config.getNetworkConfig().setPortAutoIncrement(true); config.setClusterName("myHazelcastStore"); NetworkConfig network = config.getNetworkConfig(); JoinConfig join = network.getJoin(); // 先禁用多播 join.getMulticastConfig().setEnabled(false); // 启用TCP/IP发现模式,添加所有三台服务器的IP TcpIpConfig tcpIpConfig = join.getTcpIpConfig(); tcpIpConfig.setEnabled(true); tcpIpConfig.addMember("192.168.1.10") .addMember("192.168.1.25") .addMember("192.168.34.122"); // 如果某台服务器用了非默认的Hazelcast端口,记得在IP后面加上端口,比如"192.168.1.10:5702" return config; }
最后还要注意两个细节:
- 确保三台服务器之间的**5701-5703端口(Hazelcast默认端口范围)**没有被防火墙、安全组拦截,节点之间能正常通信
- 所有节点的
clusterName必须完全一致,哪怕差一个字符都没法加入同一集群
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

