首页 > 解决方案 > Apache Ignite 客户端重启场景

问题描述

这是场景

  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 oaiIgniteException: 检查点读取锁获取已超时。]] [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。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 服务器的连接并继续工作?

标签: javaignitegridgain

解决方案


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

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


推荐阅读