Elasticsearch NoNodeAvailableException问题

时间:2016-02-17 10:08:47

标签: elasticsearch spring-data-elasticsearch

我们的Spring启动应用程序使用传输客户端[使用ElasticsearchRepository]在ES群集中​​索引数据。问题是,在一些索引调用索引之后只是挂起了DAO上的SAVE方法只是挂起并且经过一段时间后它给了我们&#34; Nonodefoundexception &#34; < / p>

这是我们的堆栈

  • 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设置都相同,我们也不会在Dev中看到任何问题。

**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)

3 个答案:

答案 0 :(得分:0)

我也遇到过这个错误。以下是NoNodeException发生的少数情况:

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

请检查这些要点。

答案 1 :(得分:0)

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

您有两种解决方案:

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

答案 2 :(得分:0)

选项是如果ES无法降级,请尝试使用其他库。