starter mkyong example data java spring elasticsearch

mkyong - Cliente Elasticsearch 5 Java dando "NoNodeAvailableException"



spring-boot-starter-data-elasticsearch (3)

Estoy usando Elasticsearch 5.2 y Spring Boot 1.5.1 . Me estoy conectando a través del cliente de Java en una aplicación de Spring. Cuando me conecto a él en el puerto 9300 o 9200 y obtengo NoNodeAvailableException: None of the configured nodes are available . En mi cliente Java, configuré la propiedad client.transport.sniff como true . Al enviar una solicitud a través de cURL en el puerto 9200, está funcionando correctamente. Tengo 4 nodos en un solo clúster y no puedo conectarme a ninguno de ellos. Mi archivo de configuración tiene todos los valores predeterminados en la división de network excepción de network.host que tiene eth0 inet addr como valor.

Estoy usando Gradle. Mis dependencias son:

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'')

Mi código para conectarse al clúster 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; }

Mis registros de ES cuando comienza ES son:

[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

Las respuestas a estas preguntas no resuelven mi problema:

  1. Java ElasticSearch Ninguno de los nodos configurados está disponible
  2. Elasticsearch - NoNodeAvailableException
  3. Problema Elasticsearch NoNodeAvailableException

Probablemente la respuesta a esta pregunta es clustername puede ser diferente de elasticsearch.yml, configure eso y en elasticsearch utiliza dos puertos : son 9200 que proporciona acceso a través de http y 9300 se utiliza para acceder a Elasticsearch a través del protocolo de transporte interno, que es utilizado por Java Transport Client.


En su archivo de configuración elasticsearch.yml , debe asegurarse de vincularse al host correcto y tener la siguiente configuración:

network.host: 54.175.155.56

También en su código Java, ya que está usando el cliente de transporte, necesita usar el puerto 9300 (para comunicación TCP) y no el 9200, que está destinado a la comunicación HTTP (por ejemplo, mediante curl)

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


El nodo al que me estaba conectando era solo un nodo maestro. Tenía node.ingest y node.data como false . Al conectarme a un nodo que tenía node.ingest como true y eliminar la configuración client.transport.sniff en el cliente Java, pude conectarme al clúster de ES.