Elasticsearch - 没有可用的节点

时间:2014-04-28 18:49:04

标签: elasticsearch

我发现这个错误几个小时..我使用的是Play 2.2.0和Elasticsearch 0.90.7!

任何人都可以帮助我吗?

play.api.Application$$anon$1: Execution exception[[NoNodeAvailableException: No node available]]
        at play.api.Application$class.handleError(Application.scala:293) ~[play_2.10-2.2.1.jar:2.2.1]
        at play.api.DefaultApplication.handleError(Application.scala:399) ~[play_2.10-2.2.1.jar:2.2.1]
        at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$2$$anonfun$applyOrElse$3.apply(PlayDefaultUpstreamHandler.scala:261) ~[play_2.10-2.2.1.jar:2.2.1]
        at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$2$$anonfun$applyOrElse$3.apply(PlayDefaultUpstreamHandler.scala:261) ~[play_2.10-2.2.1.jar:2.2.1]
        at scala.Option.map(Option.scala:145) ~[scala-library.jar:na]
        at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$2.applyOrElse(PlayDefaultUpstreamHandler.scala:261) ~[play_2.10-2.2.1.jar:2.2.1]
org.elasticsearch.client.transport.NoNodeAvailableException: No node available
        at org.elasticsearch.client.transport.TransportClientNodesService$RetryListener.onFailure(TransportClientNodesService.java:256) ~[elasticsearch-0.90.7.jar:na]
        at org.elasticsearch.action.TransportActionNodeProxy$1.handleException(TransportActionNodeProxy.java:89) ~[elasticsearch-0.90.7.jar:na]
        at org.elasticsearch.transport.TransportService$Adapter$2$1.run(TransportService.java:316) ~[elasticsearch-0.90.7.jar:na]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) ~[na:1.7.0_25]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) ~[na:1.7.0_25]
        at java.lang.Thread.run(Thread.java:724) ~[na:1.7.0_25]

4 个答案:

答案 0 :(得分:3)

通常,您获得的错误意味着您的客户端无法连接到elasticsearch节点。

  • 检查您是否将正确的参数传递给客户
  • 检查您是否遇到防火墙问题
  • 提供有关您的情况的更多信息,如上所述Nick,例如您是否在像azure这样的云基础架构上的节点上部署弹性搜索?在这种情况下,例如您的客户端可能会超时,因为它无法ping通节点。

你也可以在这里检查一些其他类似的案例,例如: No Node Available Exception

答案 1 :(得分:1)

你关闭了你的联系吗?可能是您正在向ElasticSearch发送内容,但不会关闭您的连接。最终ES将拥有"没有可用的节点"

try{
  Client client //set it up
  client.prepareSearch //do something
}

finally {
  client.close(); //close it down
}

答案 2 :(得分:1)

在我的情况下,客户端拒绝连接到具有此异常的ES,因为服务器上的群集名称与客户端上指定的不同。 客户端连接到ES,查找所需的群集名称,然后无法说明没有可用的节点。但实际上,这应该意味着没有节点属于在客户端指定名称的集群。

可以通过指定正确的群集名称或将client.transport.ignore_cluster_name设置为true来解决此问题。

答案 3 :(得分:0)

我建议您尝试ES的这些设置

client.transport.sniff=true
sniffOnConnectionFault=true