web-dev-qa-db-fra.com

Elasticsearch - NoNodeAvailableException

L'erreur suivante s'affiche lorsque j'essaie de me connecter à Elasticsearch 2 à l'aide de l'API Java pour ES 2. Il s'agit du code:

Settings settings = Settings.settingsBuilder().put("cluster.name", Receptor.clusterName).build();
TransportClient transportClient = TransportClient.builder().settings(settings).build();
Client c = null;
try {
     c = transportClient.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(Receptor.es_ip), 9300));
} catch (UnknownHostException e) {
     System.err.println(Util.getTimestampStr() + "UnknownHostException error.");
     e.printStackTrace();
}

CreateIndexRequestBuilder createIndexRequestBuilder = c.admin().indices().prepareCreate(indexName);
createIndexRequestBuilder.addMapping(documentName, json);
createIndexRequestBuilder.execute().actionGet();

Je peux obtenir mon nœud ES sur transportClient.connectedNodes (), mais lorsque j'essaie d'ajouter un nouveau mappage, je reçois le NoNodeAvailableException exception. Ce code fonctionnait avec les versions précédentes de Elasticsearch. Une idée de ce qui ne va pas?

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.client.support.AbstractClient$IndicesAdmin.execute(AbstractClient.Java:1177)
    at
org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.Java:85)
    at
org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.Java:59)
10
Carlos Vega

@AndreiStefan a donné la solution à mon problème grâce à le message qu'il a lié . La solution était aussi simple que:

network.bind_Host: 0

Merci les gars.

7
Carlos Vega

Le problème peut être dans les paramètres que vous utilisez.

Au lieu de créer le client dans ces trois étapes:

TransportClient transportClient = TransportClient.builder().settings(settings).build();
Client c = null;
try {
 c = transportClient.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(Receptor.es_ip), 9300));
} catch (UnknownHostException e) {
 System.err.println(Util.getTimestampStr() + "UnknownHostException error.");
 e.printStackTrace();
}

Essayez de le créer comme ceci:

Client client = new TransportClient()
            .addTransportAddress(new InetSocketTransportAddress(
                    InetAddress.getByName(Receptor.es_ip),
                    9300));

Si vous voulez plus de données, cochez cette ancienne réponse à une question similaire: Problèmes de recherche élastiques

0
crigore

Si vous utilisez network.Host: _site_ dans une connexion elasticsearch.yml AND sniffed TransportClient, plusieurs adresses locales au site sont disponibles dans le nœud hôte de la machine.

Si vous désactivez la configuration du sniff et que l'exception NoNodeAvailableException disparaît, vous devez alors revérifier la configuration du réseau.

Obtenir la stat des noeuds 

GET /_nodes

et archivez le résultat pour trouver la configuration transport, c.-à-d.

"transport": {
    "bound_address": [
      "192.168.1.84:9300",
      "172.29.0.1:9300"
    ],
    "publish_address": "172.29.0.1:9300",
    "profiles": {}
  },

S'il existe plusieurs adresses locales sur le site, le network.publish_Host auquel sniffé TransportClient se connectera peut être une adresse inattendue, car

S'il n'est pas spécifié, la meilleure adresse par défaut est network.Host, classée par préférence de pile IPv4/IPv6, puis par accessibilité.

Pour le résoudre, il suffit de spécifier le network.publish_Host 

network.publish_Host: $ DESIRED_IP_ADDRESS

dans elasticsearch.yml.

0
Torrence