【问题标题】:Apache Ignite: Node has not been connected to topologyApache Ignite:节点尚未连接到拓扑
【发布时间】:2018-08-23 13:14:58
【问题描述】:

在同一台机器上有两个节点的本地(测试)设置中(使用端口范围为 47500..47501 的静态 IP 配置),“第二个”节点不会加入集群;它发出一个TcpDiscoveryJoinRequestMessage,似乎由“第一个”节点回答,但在网络超时发生(20 秒)后,它显示“节点尚未连接到拓扑”消息并继续发送随后的发现加入消息被第一个节点忽略(“Ignoring join request message since node is already in topology”)。

这同样适用于(两个裸机和虚拟机)docker 机器上的(“真实”)集群设置。

这是一个已知问题吗?关于在哪里/寻找什么的任何建议? Ignite 发出大量日志 (TcpDiscoverySpi),但我看不到任何可能解释该行为的错误或警告。静态 IP 配置和自定义网络超时生效。

配置以 yml 形式给出,以构建一个配置 bean(Spring Boot 应用程序),该 bean 反过来构建实际的 Ignite 配置。

grid:
  discovery:
    network-timeout: 20000
    join-timeout: 20000
    static:
      enabled: true
      addresses: 127.0.0.1:47500..47501

TcpDiscoveryVmIpFinder 有效(如日志所示)。

另请参阅node logs (TcpDiscoverySpi) 中的相关部分。

【问题讨论】:

  • 可以分享一下配置吗?
  • @Denis - 当然。我已经相应地编辑了原始帖子。
  • 日志也会有所帮助。请在 pastebin.com 之类的地方上传完整日志如果节点在不同的机器上启动,您是否发现此问题?
  • @Denis - 来自两个节点的相关日志可以在 here 找到。在不同的机器(Docker 容器)上启动时也会发生这种情况。
  • 节点2的日志中有一条消息:Restored topology from node added message。之后TcpDiscoveryNodeAddedMessage 应该被发送回协调器,但日志中没有Message has been sent to next node 记录。这意味着,tcp-disco-msg-worker 线程卡在中间的某个地方。看到“restored topology”的消息后,请把第二个节点的线程转储,让我看看。

标签: java ignite


【解决方案1】:

据我所知,您使用Ignite messaging,并且您的一些remoteListeners 包含IgniteSemaphore 作为其字段,或作为其闭包的一部分。当所有节点连接时,有关此侦听器的信息会在发现消息中发送给所有节点。

remoteListener 被反序列化时,会从DataStructuresProcessor 请求一个信号量。但它还没有被初始化,因为节点加入还没有完成。这是一个死锁,因为在初始化 DataStructuresProcessor 之前节点无法加入,反之亦然。

你可以通过延迟初始化信号量来避免这个问题:

public static class ListenerHandler implements IgniteBiPredicate<UUID, Object> {
    @IgniteInstanceResource
    private Ignite ignite;

    private transient IgniteSemaphore sem;

    private IgniteSemaphore semaphore() {
        if (sem != null)
            return sem;

        sem = ignite.semaphore("sem", 1, true, true);
        return sem;
    }

    @Override public boolean apply(UUID uuid, Object o) {
        // ...
    }
}

错误跟踪器上的相关问题:IGNITE-3089

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-31
    • 1970-01-01
    • 2021-10-04
    • 2016-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多