【问题标题】:Elasticsearch & NetFlix Edda - NoNodeAvailableException: No node availableElasticsearch 和 NetFlix Edda - NoNodeAvailableException:没有可用的节点
【发布时间】:2015-12-07 14:13:43
【问题描述】:

我正在尝试让 Netflix open source solution Edda 与 Elasticsearch 一起工作。我知道我已经正确安装了 Edda,因为我可以成功地将它与 MongoDB 作为后端一起使用。我更喜欢使用 Elasticsearch,这样我就可以获得 Kibana 的好处,而不是编写自己的前端。所以我现在在 AWS 的同一台服务器上运行 Edda 和 Elasticsearch(只是想让它工作)。 Elasticsearch 正在运行:

{
  "name" : "Arsenic",
  "cluster_name" : "elasticsearch",
  "version" : {
    "number" : "2.1.0",
    "build_hash" : "72cd1f1a3eee09505e036106146dc1949dc5dc87",
    "build_timestamp" : "2015-11-18T22:40:03Z",
    "build_snapshot" : false,
    "lucene_version" : "5.3.1"
  },
  "tagline" : "You Know, for Search"
}

并表明它在听:

netstat -tulpn | grep java
tcp        0      0 ::ffff:<myip>:9300    :::*                        LISTEN      2270/java
tcp        0      0 ::ffff:<myip>:9200    :::*                        LISTEN      2270/java

我的 java 版本从 1.7 更新到 1.8,因为我相信 Elasticsearch 的 java 版本和服务器上运行的版本必须匹配。我看不出 1.8 会导致问题的原因:

java -version
openjdk version "1.8.0_65"
OpenJDK Runtime Environment (build 1.8.0_65-b17)
OpenJDK 64-Bit Server VM (build 25.65-b01, mixed mode)

这是我的 edda 属性文件:

cat /home/ec2-user/edda/src/main/resources/edda.properties | grep elasticsearch
edda.datastore.current.class=com.netflix.edda.elasticsearch.ElasticSearchDatastore
edda.elector.class=com.netflix.edda.elasticsearch.ElasticSearchElector
edda.elasticsearch.cluster=elasticsearch
edda.elasticsearch.address=<myip>:9300
edda.elasticsearch.shards=5
edda.elasticsearch.replicas=0
# http://www.elasticsearch.org/guide/reference/api/index_/
edda.elasticsearch.writeConsistency=quorum
edda.elasticsearch.replicationType=async
edda.elasticsearch.scanBatchSize=1000
edda.elasticsearch.scanCursorDuration=60000
edda.elasticsearch.bulkBatchSize=0

在我的 elasticsearch.yml 文件中:

network.host: <myip>

我没有指定集群名称,所以它采用默认的“elasticseach”。

所以当我运行 Edda 来轮询 AWS 并使用它发现的数据填充 elasticsearch 时,我收到了这个错误:

[Collection aws.hostedZones] init: caught org.elasticsearch.client.transport.NoNodeAvailableException: No node available
        at com.netflix.edda.Collection$$anonfun$init$1.apply$mcV$sp(Collection.scala:471)
        at com.netflix.edda.Utils$$anon$1.act(Utils.scala:169)
        at scala.actors.Reactor$$anonfun$dostart$1.apply(Reactor.scala:224)
        at scala.actors.Reactor$$anonfun$dostart$1.apply(Reactor.scala:224)
        at scala.actors.ReactorTask.run(ReactorTask.scala:33)
        at scala.actors.ReactorTask.compute(ReactorTask.scala:63)
        at scala.concurrent.forkjoin.RecursiveAction.exec(RecursiveAction.java:160)
        at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
        at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
        at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
        at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)

显然它无法连接到 elasticsearch 集群,但集群名称是正确的,据我所知,它正在侦听正确的端口和 IP 地址,我认为 java 版本没有问题。

我遗漏了一些可能非常简单的东西。

提前感谢您的所有帮助。

问候 尼尔斯

【问题讨论】:

    标签: java amazon-web-services elasticsearch


    【解决方案1】:

    我已经弄清楚了,Edda 中使用的 java 客户端设置为使用 build.gradle 中设置的 0.90.0 版本的 elasticsearch,如果您安装该版本的 Elasticsearch,它就可以工作。显然,这是一个非常旧的 Elasticsearch 版本,您可能不想使用它。如果您更改此文件中的版本号,它会在尝试编译时因路径损坏(缺少程序集)而失败。我正在权衡是否值得尝试解决这些组装问题以使其与最新版本的 Elasticsearch 一起工作,或者选择使用无需任何代码更改但仅提供 REST Api 功能的 MongoDB。至少问题解决了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-07
      • 1970-01-01
      相关资源
      最近更新 更多