You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Spring Boot集成Hazelcast双节点集群重启后重加入缓慢问题排查

重启Hazelcast嵌入式节点后加入集群缓慢的排查与解决

这种重启后需要5-10分钟才能重新加入集群的情况,大概率是TCP发现机制的配置细节没处理到位。结合你给出的配置,我梳理几个核心问题点和对应的解决办法:

1. TCP成员列表未明确指定端口

你配置了port: 5900auto-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 toMembership change关键字,确认节点在尝试连接哪些地址,是否有连接超时或拒绝的错误信息,这能快速定位问题根源。
  • 检查运行中的节点端口占用,确认5900/5901端口确实在监听。

通过以上调整,重启后的节点应该能在几秒内重新加入集群。

内容的提问来源于stack exchange,提问作者Sudarshan Navada

火山引擎 最新活动