Spring Boot集成Hazelcast双节点集群重启后重加入缓慢问题排查
重启Hazelcast嵌入式节点后加入集群缓慢的排查与解决
这种重启后需要5-10分钟才能重新加入集群的情况,大概率是TCP发现机制的配置细节没处理到位。结合你给出的配置,我梳理几个核心问题点和对应的解决办法:
1. TCP成员列表未明确指定端口
你配置了port: 5900且auto-increment: true,意味着第一个节点会使用5900端口,第二个节点自动使用5901端口。但你在members列表里只写了IP地址,没有指定对应端口——Hazelcast默认会从5701端口开始尝试连接,这就导致重启的节点需要逐个扫描端口,直到命中5900/5901,这会浪费大量时间。
调整方案:在成员列表中明确指定每个节点的端口:
hazelcast: network: port: port: 5900 auto-increment: true join: multicast: enabled: false tcp-ip: enabled: true members: 192.168.1.28:5900, 192.168.1.29:5901
2. 默认连接超时与重试参数过于宽松
Hazelcast默认的TCP连接超时、重试间隔设置偏保守,当节点重启后,可能需要多次重试才能成功建立连接,累积下来就会导致长时间等待。
调整方案:缩短连接超时时间和重试间隔,同时增加重试次数:
hazelcast: network: socket: connect-timeout-seconds: 3 # 缩短连接超时时间 join: tcp-ip: enabled: true members: ... # 这里填你已经指定端口的成员列表 retry-interval-seconds: 2 # 缩短重试间隔 retry-count: 10 # 增加重试次数
3. 集群标识与网络连通性验证
- 确认集群名称一致:虽然默认集群名称是
dev,但最好显式指定,避免因环境差异导致的集群匹配问题:hazelcast: cluster-name: my-spring-boot-hazelcast-cluster - 检查网络与防火墙:确保两个节点的5900/5901端口、以及你配置的出站端口12000之间没有防火墙拦截。可以用
telnet 192.168.1.X 590X命令手动验证连通性。
快速排查步骤
- 查看重启节点的Hazelcast日志,搜索
Trying to connect to或Membership change关键字,确认节点在尝试连接哪些地址,是否有连接超时或拒绝的错误信息,这能快速定位问题根源。 - 检查运行中的节点端口占用,确认5900/5901端口确实在监听。
通过以上调整,重启后的节点应该能在几秒内重新加入集群。
内容的提问来源于stack exchange,提问作者Sudarshan Navada




