2015-11-13 13 views
9

ottengo il seguente errore quando si tenta di connettersi a elasticsearch 2 utilizzando l'API Java per ES 2. Questo è il codice:elasticsearch - NoNodeAvailableException

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(); 

sono in grado di ottenere il mio nodo ES sulla transportClient .connectedNodes() ma quando provo ad aggiungere una nuova mappatura ottengo l'eccezione NoNodeAvailableException. Questo codice ha funzionato con le versioni precedenti di Elasticsearch. Qualche idea di cosa c'è che non va?

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) 
+2

Se si configura il nodo nel cluster a cui si sta tentando di accedere come [in questo post] (http://stackoverflow.com/questions/33412549/how-to-bind-elasticsearch-2-0-on-oth -leopback-and-non-loopback-interface/33438638 # 33438638) vedi qualche miglioramento? Inoltre, sarei curioso di sapere quale IP stai usando per connettersi ai nodi, in relazione a quali IP i nodi ES riportano essere collegati all'avvio (qualcosa come '[INFO] [trasporto] [main_node_2_0] publ ish_address {127.0.0.1:9300}, bound_addresses {127.0.0.1:9300}, {[:: 1]: 9300} 'nei log all'avvio). –

+0

Hai giocato con la tua configurazione nel file 'elasticsearch.yml'? C'è qualcosa per 'minimum_master_nodes'? –

+0

stai provando a comunicare il client elasticsearch esterno che è in esecuzione nell'host ['Receptor.es_ip'] con la porta' 9300' assicurati che elasticsearch sia in esecuzione o meno –

risposta

7

@AndreiStefan ha fornito la soluzione al mio problema grazie a the post he linked. La soluzione era semplice come:

network.bind_host: 0 

Grazie ragazzi.

+0

scrivimi dove dovrei aggiungere questo? in elasticsearch.yml? –

+0

Sì, davvero. Come indica la [documentazione] (https://www.elastic.co/guide/en/elasticsearch/reference/2.0/modules-network.html) e [altri post] (https://discuss.elastic.co/ t/ES-2-0-network-config-options/33396/2). Tieni presente che questo è per Elasticsearch 2.x, non so se funzionerà con le versioni successive. –

0

Il problema potrebbe essere nelle impostazioni che si stanno utilizzando.

Invece di creare il Cliente in questi tre passaggi:

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(); 
} 

Prova a creare in questo modo:

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

Se si desidera controllare più dati questo vecchio risposta ad una domanda simile: Elastic search problems

+0

Qual è il problema con la mia soluzione, ho appena fornito il nome del cluster. Ho usato quel codice con le versioni precedenti di Elasticsearch e la sua API. –