Ubuntu 14.04上的ElasticSearch Java传输客户端NoNodeAvailableException

时间:2016-05-03 23:41:44

标签: java elasticsearch ubuntu-14.04

我正在使用Java 7运行 Elasticsearch v.2.3.2 。以下是来自curl http://172.31.11.83:9200的打印输出:

{
  "name" : "ip-172-31-11-83",
  "cluster_name" : "elasticsearch",
  "version" : {
      "number" : "2.3.2",
      "build_hash" : "b9e4a6acad4008027e4038f6abed7f7dba346f94",
      "build_timestamp" : "2016-04-21T16:03:47Z",
      "build_snapshot" : false,
      "lucene_version" : "5.5.0"
    },
  "tagline" : "You Know, for Search"
}

...我在Java代码中使用以下内容:

<dependency>
    <groupId>org.elasticsearch</groupId>
    <artifactId>elasticsearch</artifactId>
    <version>2.3.2</version>
</dependency>

我的防火墙规则中已打开端口9200和9300 ,用于我的ES服务器,并且可以从我的笔记本电脑(Mac OSX)成功执行所述Java代码。以下是从流程开始的代码片段(这很好):

Settings settings = Settings.settingsBuilder()
                .put("cluster.name", "elasticsearch").build();
        esClient =TransportClient.builder().settings(settings).build().addTransportAddress(new 
                InetSocketTransportAddress(new InetSocketAddress(InetAddress.getByName("172.31.11.83"), 9300)));

然后,我尝试发出索引请求(当我在 Ubuntu 14.04 上运行代码时,这会失败:

adminClient = esClient.admin().indices();
IndicesExistsResponse response = adminClient.exists(request).actionGet();

我的 elasticsearch.yml 文件包含以下网络设置:

network.bind_host: 0
network.publish_host: 172.31.11.83
transport.tcp.port: 9300
http.port: 9200

我也试过network.bind_host: 172.31.11.83无济于事。使用curl,我可以从所有机器到达端口9200。 curl报告的群集名称是“elasticsearch”

当我启动ES时,我在 elasticsearch.log 中看到以下内容:

publish_address {172.31.11.83:9300}, bound_addresses {[::]:9300}

然而,我得到的例外情况如下:

NoNodeAvailableException[None of the configured nodes are available: [{#transport#-1}{172.31.11.83}{172.31.11.83:9300}]]
at org.elasticsearch.client.transport.TransportClientNodesService.ensureNodesAreAvailable(TransportClientNodesService.java:290)
at org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodesService.java:207)
at org.elasticsearch.client.transport.support.TransportProxyClient.execute(TransportProxyClient.java:55)
at org.elasticsearch.client.transport.TransportClient.doExecute(TransportClient.java:283)
at org.elasticsearch.client.support.AbstractClient.execute(AbstractClient.java:347)
at org.elasticsearch.client.support.AbstractClient.execute(AbstractClient.java:336)
at org.elasticsearch.client.support.AbstractClient$IndicesAdmin.execute(AbstractClient.java:1178)
at org.elasticsearch.client.support.AbstractClient$IndicesAdmin.exists(AbstractClient.java:1198)

同样,这个确切的代码可以在我的本地机器上运行。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

有相同的问题..

在同一个AWS工具包上升级弹性从1.7到2.3.2

Ubunto 14.0.4

9300上的弹性绑定传输

安全组已打开端口(未更改)

现在远程客户端无法通过传输层连接 - 与上面相同的错误。

我的设置中唯一改变的是Elasticsearch的版本

答案 1 :(得分:0)

好的,我解决了这个问题。看来2.3.2没有默认的TCP绑定方式与1.7.0

相同

我必须在elasticsearch.yml中设置它:

network.bind_host:{AWS私有IP地址)