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:
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.