【问题标题】:ElasticSearch 2.0 Transport Client - No Node Available exceptionElasticSearch 2.0 传输客户端 - 无可用节点异常
【发布时间】:2017-03-14 08:07:56
【问题描述】:

[使用 ElasticSearch 2.0 版]

在 etc/hosts 文件中,“esnode”被映射到 IP 地址(运行 ES 的其他机器),如图所示

192.168.2.219 节点

传输客户端代码是 ::

public Client getClient() { 
    if ((this.client == null)) { 
        try { 
            Settings settings = Settings.settingsBuilder() 
                    .put("cluster.name", "myclustername").build(); 
            TransportClient tClient = TransportClient.builder().settings(settings).build(); 
            String[] nodes = "esnode:9300".split(COMMA); 
            for (String node : nodes) { 
                String[] hostPort = node.split(COLON); 

                tClient.addTransportAddress(new InetSocketTransportAddress( 
                        InetAddress.getByName(hostPort[0]), Integer.parseInt(hostPort[1]))); 
            } 
            this.client = tClient; 

        } catch (Exception e) { 
            e.printStackTrace(); 
        } 
    } 
    return this.client; 
} 

此客户端代码运行但在执行以下代码时: this.getClient().prepareGet(indexName, typeName, String.valueOf(id)).get();

抛出异常:

NoNodeAvailableException[None of the configured nodes are available: []] 
        at org.elasticsearch.client.transport.TransportClientNodesService.ensureNodesAreAvailable(TransportClientNodesService.java:280) 
        at org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodesService.java:197) 
        at org.elasticsearch.client.transport.support.TransportProxyClient.execute(TransportProxyClient.java:55) 
        at org.elasticsearch.client.transport.TransportClient.doExecute(TransportClient.java:272) 
        at org.elasticsearch.client.support.AbstractClient.execute(AbstractClient.java:347) 
        at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:85) 
        at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:59) 
        at org.elasticsearch.action.ActionRequestBuilder.get(ActionRequestBuilder.java:67) 

我也尝试过使用 IPAddress 而不是主机名。如果

上面的代码可以正常运行

esnode映射到127.0.0.1

有人可以帮忙吗...

【问题讨论】:

标签: java elasticsearch


【解决方案1】:

在elasticsearch.yml中设置elasticsearch主机ip地址为network.host值

network.host: es_host_ip

这是解决 TransportClient NoNodeAvailableException 问题。

【讨论】:

    【解决方案2】:

    检查你的elasticsearch服务器是否也有2.0版本,如果没有,升级。客户端和服务器必须具有相同的版本才能工作,我不知道为什么,但这解决了我的问题。

    干杯,

    【讨论】:

    • 客户端和服务器版本相同,适用于 127.0.0.1。但不适用于任何其他 IP 地址(网络中可用的 ES 节点)。
    • ES 配置有问题。使用以下配置: cluster.name: esearch http.port: 9200 只有以上两个属性在配置中显式设置。其余使用默认值。
    【解决方案3】:

    其他原因可能是,您的 Elasticsearch Java 客户端与您的 Elasticsearch 服务器版本不同。

    Elasticsearch Java 客户端版本只不过是代码库中的 elasticsearch jar 版本。

    例如:在我的代码中是 elasticsearch-2.4.0.jar

    要验证 Elasticsearch 服务器版本,

    $ /Users/kkolipaka/elasticsearch/bin/elasticsearch -version 版本: 5.2.2,构建:f9d9b74/2017-02-24T17:26:45.835Z,JVM:1.8.0_111

    如您所见,我下载了最新版本的 Elastic server 5.2.2 但忘记更新 ES Java API 客户端版本 2.4.0 https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/client.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-05
      • 2016-09-28
      • 2016-11-21
      • 2017-01-02
      • 2017-08-31
      • 2017-02-12
      • 2016-02-20
      • 1970-01-01
      相关资源
      最近更新 更多