Hazelcast 实例未通过 TCP 连接到 Master

问题描述 投票:0回答:1

我在 Spring Boot 应用程序中以嵌入式模式使用 Hazelcast (v5.2.1),并使用 TCP IP 配置,我遇到了间歇性问题,即新实例不会尝试连接到现有集群的主 IP 。我只看到当新实例从非主节点获取主 IP 时会发生这种行为。

打开跟踪级别日志后,我首先看到以下日志:

"thread":"main","level":"DEBUG","logger":"c.h.i.s.tcp.TcpServerConnectionManager","message":"[new_instance_ip]:5701 [cluster-name] [5.2.1] Connection to: [domain_1]:5701 streamId:-1 is not yet in progress"
"thread":"hz.peaceful_faraday.cached.thread-2","level":"TRACE","logger":"c.h.i.server.tcp.TcpServerConnector","message":"[new_instance_ip]:5701 [cluster-name] [5.2.1] Starting to connect to [domain_1]:5701"

然后我看到以下日志不断打印,直到实例崩溃:

thread":"main","level":"DEBUG","logger":"c.h.internal.cluster.impl.TcpIpJoiner","message":"[new_instance_ip]:5701 [cluster-name] [5.2.1] Sending join request to [master_ip]:5701"
thread":"hz.magical_elgamal.generic-operation.thread-0","level":"DEBUG","logger":"c.h.i.cluster.impl.ClusterJoinManager","message":"[new_instance_ip]:5701 [cluster-name] [5.2.1] Handling master response [master_ip]:5701 from [non_master_ip]:5701"
thread":"hz.magical_elgamal.generic-operation.thread-0","level":"DEBUG","logger":"c.h.internal.cluster.ClusterService","message":"[new_instance_ip]:5701 [cluster-name] [5.2.1] Setting master address to [master_ip]:5701"
thread":"hz.magical_elgamal.generic-operation.thread-0","level":"DEBUG","logger":"c.h.i.cluster.impl.ClusterJoinManager","message":"[new_instance_ip]:5701 [cluster-name] [5.2.1] Handling master response [master_ip]:5701 from [non_master_ip]:5701"

发生上述行为时,我从未看到新实例日志“开始连接到 [master ip]”。我通过日志验证Master没有连接失败的新实例的记录。看来新实例没有尝试运行 ConnectTask 可运行对象来连接到 Master。

我使用 Cloud Foundry 来托管应用程序,并且应用程序有一个有限的五分钟窗口来返回它已连接到集群。如果新实例未能在该窗口中返回其运行状况良好的信息,Cloud Foundry 将重新启动该实例。通常在几次重新启动后,其中一个新实例将成功连接到主服务器。

集群跨越 Cloud Foundry 中的多个应用程序,因此我启用了 Zone Aware 分区功能以实现弹性,集群大小通常为 18 个以上实例。还值得一提的是,我提供了多个 apps.internal 路由到 TCP IP 配置的成员值。

我进行了以下更改,这些更改并未影响我所看到的行为:

  • hazelcast.max.join.seconds
    降低至 30
  • hz:io
    执行器的线程池大小增加到64个线程
  • default
    执行器的线程池大小增加到64个线程
  • 增加
    hazelcast.io.thread.count
    至32
  • 增加
    hazelcast.io.input.thread.count
    至32
  • 增加至
    hazelcast.io.output.thread.count
    至32
  • 显式禁用多播配置
  • 关闭端口自动增量并手动设置端口

通过上面所做的更改,我希望看到 ConnectTask 执行并启动与主服务器的连接或重试逻辑来执行此操作。

cloud-foundry hazelcast java-11
1个回答
0
投票

经过进一步审查,我发现在使用默认 TCP IP SPI 时,一个应用程序后面有多个实例。内部路由是我的问题。我创建了一个自定义 SPI 来解析给定路由的所有 IP。

© www.soinside.com 2019 - 2024. All rights reserved.