【问题标题】:Apache Ignite Client restart scenarioApache Ignite 客户端重启场景
【发布时间】:2020-04-16 05:34:24
【问题描述】:

这是场景

  1. 我启动了服务器节点。
  2. 我启动了 Client Ignite 节点,这将通过 Java 应用程序“X”来完成。
  3. 在 visor 中,当给定命令“node”时,我可以看到两个节点,一个是客户端,一个是服务器。
  4. 我通过执行“kill -9 pid”杀死了 Java 应用“X”。
  5. 现在,当我进入 visor 终端并输入“节点”时,它仍然在列表中显示“客户端”和“服务器”节点。当被问及客户端节点详细信息时,它显然会引发错误。
  6. 现在,当我重新启动 Java 应用程序“X”时,该 Java 代码将再次尝试连接到 Ignite 服务器。但它没有连接,而是多次打印这些日志

"org.apache.ignite.logger.java.JavaLogger" "info" "INFO" "" "284" "Accepted incoming communication connection [locAddr=/0:0:0:0:0:0:0:1:47101, rmtAddr=/0:0:0:0:0:0:0:1:62856]" "" "" "" "" "" "" "1587013526124" "" "" "" "" "" "" "ROOT" "{""service"":"""",""logger_name"":""org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi""}"

  1. 它没有连接并继续执行 Java 中的代码。所以应用程序没有恢复。我发现这是 Ignite 服务器日志

[10:37:57] 根据配置的处理程序抑制可能的故障 [hnd=StopNodeOrHaltFailureHandler [tryStop=false, timeout=0, super=AbstractFailureHandler [ignoredFailureTypes=UnmodifiableSet [SYSTEM_WORKER_BLOCKED, SYSTEM_CRITICAL_OPERATION_TIMEOUT]]], failureCtx=FailureContext [ type=SYSTEM_CRITICAL_OPERATION_TIMEOUT, err=class o.a.i.IgniteException: 检查点读取锁获取已超时。]] [10:37:57,739][SEVERE][exchange-worker-#46][GridCacheDatabaseSharedManager] 检查点读取锁获取已超时。 class org.apache.ignite.internal.processors.cache.persistence.GridCacheDatabaseSharedManager$CheckpointReadLockTimeoutException:检查点读取锁获取已超时。 在 org.apache.ignite.internal.processors.cache.persistence.GridCacheDatabaseSharedManager.failCheckpointReadLock(GridCacheDatabaseSharedManager.java:1708) 在 org.apache.ignite.internal.processors.cache.persistence.GridCacheDatabaseSharedManager.checkpointReadLock(GridCacheDatabaseSharedManager.java:1640) 在 org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.initTopologies(GridDhtPartitionsExchangeFuture.java:1078) 在 org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.init(GridDhtPartitionsExchangeFuture.java:944) 在 org.apache.ignite.internal.processors.cache.GridCachePartitionExchangeManager$ExchangeWorker.body0(GridCachePartitionExchangeManager.java:3258) 在 org.apache.ignite.internal.processors.cache.GridCachePartitionExchangeManager$ExchangeWorker.body(GridCachePartitionExchangeManager.java:3104) 在 org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:119) 在 java.lang.Thread.run(Thread.java:748) [10:39:21,547][严重][tcp-disco-msg-worker-[693d29cd 0:0:0:0:0:0:0:1%lo0:47501 crd]-#2][G] 被阻止已检测到系统关键线程。这可能导致集群范围的未定义行为 [workerName=db-checkpoint-thread, threadName=db-checkpoint-thread-#59, blockedFor=209s]

我在这里假设由于我强制关闭启动 Ignite Client 节点的 Java 应用程序,因此可能会发生一些拓扑不平衡。

有人可以建议,如果我强制终止客户端应用程序,是否有正确的方法重新启动客户端应用程序,以便它继续重新建立与 Ignite 服务器的连接并继续工作?

【问题讨论】:

  • 您的配置中是否指定了任何自定义超时?当超时时间很长时,这种情况是可能的。
  • 嗨阿拉马尔。在服务器和客户端 Ignite 配置中,我们设置了两个超时...一个是 ClientFailureDetectionTimeout,另一个是 FailureDetectionTimeout。两者都设置为 1 分钟。我们的应用程序处于开发阶段。在开发时,我们设置断点并通过执行每一行来检查。这样做时,缓存被关闭,导致我们无法调试。所以我们将它设置为高 1 分钟。但是在将其移至生产时认为它会缩短到 30 秒。你能告诉我这里有什么问题吗?
  • 我了解 Alamar。这是因为被杀死的节点没有在拓扑中更新。当我们删除超时时,它工作正常。谢谢你。欣赏它。
  • 是的,你不应该期望在超时时间结束之前节点被删除,并加入一个新节点。

标签: java ignite gridgain


【解决方案1】:

当您有很长的超时时,这种情况是可能的。

您不应该期望在所有超时(例如,网络超时、套接字写入超时、故障检测超时)结束之前,节点会被删除,并会加入新节点。除非你优雅地关机。

【讨论】:

    猜你喜欢
    • 2021-09-22
    • 2019-07-20
    • 2018-02-10
    • 2020-06-21
    • 2020-02-14
    • 1970-01-01
    • 2021-05-23
    • 2019-11-09
    • 1970-01-01
    相关资源
    最近更新 更多