【问题标题】:Elasticsearch NoNodeAvailableException issueElasticsearch NoNodeAvailableException 问题
【发布时间】:2016-05-28 23:21:57
【问题描述】:

我们的 Spring Boot 应用正在使用传输客户端 [使用 ElasticsearchRepository ] 为 ES 集群中的数据建立索引。问题是,在一些索引调用之后,索引只是挂起。DAO 上的 SAVE 方法只是 挂起,过了一段时间它给了我们“Nonodefoundexception

这是我们的堆栈

  • ES 1.7.3
  • Spring Boot:1.3.2.RELEASE
  • Java:1.8
  • spring-boot-starter-data-elasticsearch:1.3.2.RELEASE

使用传输客户端:

ES 设置: - 有三个节点。都是客户端、主控和数据

环境: 我们的开发人员在 AWS 中,即使所有 ES 设置都相同,我们也没有在开发人员中看到任何问题。

**org.elasticsearch.client.transport.NoNodeAvailableException: None of the configured nodes were available: [[NodeName-apsrp5470][TzlZ3u8aTK23YFr14R085g][apsrp5470][inet[/10.222.146.127:9300]]{master=true}, [NodeName-apsrp5434][K4r0wujuThqwj1oTU9lEHg][apsrp5434][inet[/10.222.146.132:9300]]{master=true}, [NodeName-apsrp5435][YBPk8E4TR6u7LFLxfaVWaw][apsrp5435][inet[/10.222.146.139:9300]]{master=true}]
at org.elasticsearch.client.transport.TransportClientNodesService$RetryListener.onFailure(TransportClientNodesService.java:242) ~[elasticsearch-1.5.2.jar!/:na]
at org.elasticsearch.action.TransportActionNodeProxy$1.handleException(TransportActionNodeProxy.java:78) ~[elasticsearch-1.5.2.jar!/:na]
at org.elasticsearch.transport.TransportService$Adapter$3.run(TransportService.java:468) ~[elasticsearch-1.5.2.jar!/:na]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_60]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_60]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_60]
Caused by: org.elasticsearch.transport.NodeDisconnectedException: [NodeName-apsrp5470][inet[/10.222.146.127:9300]][indices:data/write/index] disconnected**

线程转储:-

java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for  <0x00000007bd824f48> (a org.elasticsearch.common.util.concurrent.BaseFuture$Sync)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(AbstractQueuedSynchronizer.java:997)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1304)
at org.elasticsearch.common.util.concurrent.BaseFuture$Sync.get(BaseFuture.java:279)
at org.elasticsearch.common.util.concurrent.BaseFuture.get(BaseFuture.java:118)
at org.elasticsearch.action.support.AdapterActionFuture.actionGet(AdapterActionFuture.java:45)
at org.springframework.data.elasticsearch.core.ElasticsearchTemplate.index(ElasticsearchTemplate.java:519)

【问题讨论】:

  • 您的客户端版本与服务器版本不同。客户端是 1.5.2 而服务器是 1.7.3

标签: elasticsearch spring-data-elasticsearch


【解决方案1】:

我也遇到过这个错误。以下是NoNodeException 出现的几种情况:

1) 当我们在传输客户端的 JAVA 客户端 API 上使用 HTTP 端口 9200 而不是 9300 时。
2) 当Elasticsearch jarJava Client Jar版本不匹配时。
3) Elasticsearch 节点和客户端服务器上的 Java 版本不同。
4) 当垃圾回收被触发时,会有一个stop the world 的时间跨度。在此范围内,Java 进程将冻结,节点将给出相同的 No node exception
Reference

请检查这些点。

【讨论】:

    【解决方案2】:

    spring-boot-starter-data-elasticsearch 的 1.3.2.RELEASE 版本仅适用于 Elasticsearch 1.5.2。

    您有两种解决方案:

    1. 您将 ES 降级到 1.5.2(而不是 1.7.3)
    2. 您使用基于 ES 1.7.3 的 spring-boot-starter-data-elasticsearch 的 1.4.0.BUILD-SNAPSHOT 版本

    【讨论】:

      【解决方案3】:

      如果 ES 无法降级,选项是尝试使用另一个库。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-01
        • 2018-06-08
        • 2017-06-27
        • 2018-04-13
        • 2018-09-01
        相关资源
        最近更新 更多