这是场景
我启动了服务器节点。
我启动了Client Ignite节点,它将通过Java应用程序“ X”来完成。
在遮阳板中,当给定命令“节点”时,我可以看到两个节点,一个是客户端,一个是服务器。
我通过执行“ kill -9 pid”杀死了Java应用程序“ X”。
现在,当我转到遮阳板终端并输入“节点”时,它仍在列表中显示“客户端”和“服务器”节点。当询问有关客户端节点详细信息时,显然会引发错误。
现在,当我重新启动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""}"
它没有连接并继续执行Java代码。因此,该应用程序不恢复。我发现这是Ignite服务器日志
[10:37:57]通过配置的处理程序[hnd = StopNodeOrHaltFailureHandler [tryStop = false,timeout = 0,super = AbstractFailureHandler [ignoredFailureTypes = UnmodifiableSet [SYSTEM_WORKER_BLOCKED,SYSTEM_CRITICAL_OPERATION_TIMEOUT]]],failureCtx = SYSTEM_TEM_ICAL = ,err = class oaiIgniteException:检查点读取锁获取已超时。]]
[10:37:57,739] [SEVERE] [exchange-worker-#46] [GridCacheDatabaseSharedManager]检查点读取锁定获取已超时。
类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:0:1%lo0:47501 crd]-#2] [G]已阻止已检测到系统关键线程。这可能导致群集范围内的未定义行为[workerName = db-checkpoint-thread,threadName = db-checkpoint-thread-#59,blockedFor = 209s]
我在这里假设,由于我强制关闭了启动Ignite Client节点的Java应用程序,因此可能会发生某些拓扑不平衡的情况。
有人可以建议一下,如果我强制终止了客户端应用程序,是否有正确的方法来重新启动客户端应用程序,以便它将继续与Ignite服务器建立连接并继续工作?
最佳答案
如果超时时间很长,则可能出现这种情况。
在所有超时(例如网络超时,套接字写入超时,故障检测超时)耗尽之前,您不应期望节点被丢弃并加入一个新节点。除非您进行正常关机。
关于java - Apache Ignite Client重新启动方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61243359/