簡體   English   中英

Elasticsearch 5 Java客戶端提供“NoNodeAvailableException”

[英]Elasticsearch 5 Java Client giving “NoNodeAvailableException”

我正在使用Elasticsearch 5.2Spring Boot 1.5.1 我通過Spring應用程序中的Java客戶端連接到它。 當我在端口93009200上連接它時,我得到NoNodeAvailableException: None of the configured nodes are available 在我的Java客戶端中,我將client.transport.sniff屬性設置為true 在端口9200上通過cURL向它發送請求時,它正常工作。 我在一個集群中有4個節點,我無法連接到任何節點。 我的配置文件具有network部門中的所有默認值,但network.host除外,它具有eth0 inet addr作為值。

我正在使用Gradle。 我的依賴是:

compile('org.springframework.boot:spring-boot-starter-web')
compile('org.elasticsearch:elasticsearch:5.2.0')
compile('org.elasticsearch.client:transport:5.2.0')
compile('org.apache.logging.log4j:log4j-api:2.7')
compile('org.apache.logging.log4j:log4j-core:2.7')

我的連接到Elasticsearch集群的代碼:

@Bean
public TransportClient elasticClient() {
    org.elasticsearch.common.settings.Settings settings = Settings.builder()
        .put("client.transport.sniff", true)
        .put("cluster.name", "TestCluster")
            .build();
    TransportClient client = null;
    try {
        client = new org.elasticsearch.transport.client.PreBuiltTransportClient(settings)
            .addTransportAddress(new org.elasticsearch.common.transport.InetSocketTransportAddress(
                InetAddress.getByName("54.175.155.56"), 9200));
    } catch (UnknownHostException e) {
        e.printStackTrace();
    }
    return client;
}

ES啟動時的ES日志是:

[2017-02-15T10:37:40,664][INFO ][o.e.t.TransportService   ] [ip-10-0-29-2] publish_address {10.0.29.2:9300}, bound_addresses {10.0.29.2:9300}
[2017-02-15T10:37:40,669][INFO ][o.e.b.BootstrapChecks    ] [ip-10-0-29-2] bound or publishing to a non-loopback or non-link-local address, enforcing bootstrap checks
[2017-02-15T10:37:43,856][INFO ][o.e.c.s.ClusterService   ] [ip-10-0-29-2] detected_master {kafka-stage}{sTIeF8gGTNam0oNW8dkbbA}{TTX6FIRtRp-gDemYY-22Sg}{10.0.20.71}{10.0.20.71:9300}, added {{kafka-stage-2}{jl3oLGgMQ1yxhdMMy65k_g}{ibV8BApjRByUOpDDncddyQ}{10.0.51.31}{10.0.51.31:9300},{ip-10-0-40-144}{t-_THs3wQbC_k9eivDo5eQ}{v-UYoYgXQ265QkdYhtiPYA}{10.0.40.144}{10.0.40.144:9300},{kafka-stage}{sTIeF8gGTNam0oNW8dkbbA}{TTX6FIRtRp-gDemYY-22Sg}{10.0.20.71}{10.0.20.71:9300},}, reason: zen-disco-receive(from master [master {kafka-stage}{sTIeF8gGTNam0oNW8dkbbA}{TTX6FIRtRp-gDemYY-22Sg}{10.0.20.71}{10.0.20.71:9300} committed version [98]])
[2017-02-15T10:37:44,009][INFO ][o.e.h.HttpServer         ] [ip-10-0-29-2] publish_address {10.0.29.2:9200}, bound_addresses {10.0.29.2:9200}
[2017-02-15T10:37:44,009][INFO ][o.e.n.Node               ] [ip-10-0-29-2] started

這些問題的答案並沒有解決我的問題:

  1. Java ElasticSearch沒有配置的節點可用
  2. Elasticsearch - NoNodeAvailableException
  3. Elasticsearch NoNodeAvailableException問題

elasticsearch.yml配置文件中,您需要確保綁定到正確的主機並具有以下設置:

network.host: 54.175.155.56

同樣在您的Java代碼中,由於您使用的是傳輸客戶端,因此需要使用端口9300(用於TCP通信)而不是9200用於HTTP通信(例如通過卷曲)

    client = new org.elasticsearch.transport.client.PreBuiltTransportClient(settings)
        .addTransportAddress(new org.elasticsearch.common.transport.InetSocketTransportAddress(
            InetAddress.getByName("54.175.155.56"), 9300));
                                                     ^
                                                     |
                                                change this

我連接到的節點只是一個主節點。 它有node.ingestnode.datafalse 在連接到node.ingesttrue的節點並刪除Java客戶端中的client.transport.sniff設置時,我能夠連接到ES群集。

最可能這個問題的答案是clustername可能與elasticsearch.yml不同,配置它並且在elasticsearch中它使用兩個端口 :它們是9200 ,它通過http提供訪問, 9300用於通過內部傳輸協議訪問Elasticsearch,它由Java Transport Client使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM