2015-11-13 8 views
9

ich folgende Fehlermeldung erhalten, wenn 2. Dies ist der Code Elasticsearch 2 unter Verwendung des Java-API für ES zu verbinden versuchen: mein ES Knoten auf dem transportClientElasticsearch - 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(); 

ich in der Lage bin zu erhalten .connectedNodes(), aber wenn ich versuche, ein neues Mapping hinzuzufügen, bekomme ich die Ausnahme NoNodeAvailableException. Dieser Code hat mit früheren Versionen von Elasticsearch funktioniert. Irgendeine Idee von was ist falsch?

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

Wenn Sie Ihren Knoten im Cluster konfigurieren, auf den Sie zugreifen möchten, wie [in diesem Beitrag] (http://stackoverflow.com/questions/33412549/how-to-bind-elasticsearch-2-0-on-both -loopback-and-non-loopback-interfaces/33438638 # 33438638) siehst du irgendeine verbesserung? Ich wäre auch neugierig zu wissen, welche IP verwenden Sie für die Verbindung zu den Knoten, relativ zu welchen IPs die ES-Knoten beim Start gebunden werden (etwas wie '[INFO] [Transport] [main_node_2_0] publ ish_address {127.0.0.1:9300}, bound_addresses {127.0.0.1:9300}, {[:: 1]: 9300} 'in Protokollen beim Start). –

+0

Haben Sie mit Ihrer Konfiguration in 'elasticsearch.yml' gespielt? Gibt es etwas für 'minimum_master_nodes'? –

+0

Sie versuchen, den externen elasticsearch Client zu kommunizieren, der im Host ['Receptor.es_ip'] mit dem Port' 9300' läuft. Bitte vergewissern Sie sich, dass der Elasticsearch ausgeführt wird oder nicht –

Antwort

7

@AndreiStefan gab die Lösung für mein Problem dank the post he linked. Die Lösung war so einfach wie:

network.bind_host: 0 

Danke Jungs.

+0

Execuce mir, wo soll ich das hinzufügen? im elasticsearch.yml? –

+0

Ja, tatsächlich. Wie die [Dokumentation] (https://www.elastic.co/guide/en/elasticsearch/reference/2.0/modules-network.html) anzeigt, und [andere Beiträge] (https://discuss.elastic.co/ t/es-2-0-Netzwerk-Konfiguration-Optionen/33396/2). Denken Sie daran, dass dies für Elasticsearch 2.x ist, nicht sicher, ob es mit späteren Versionen funktionieren würde. –

0

Das Problem könnte in den Einstellungen sein, die Sie verwenden.

Statt dem Kunden in diesen drei Schritten erstellen:

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

Versuchen Sie es wie folgt zu erstellen:

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

Wenn Sie mehr Daten wollen überprüfen Sie diese alte Antwort auf eine ähnliche Frage: Elastic search problems

+0

Was ist das Problem mit meiner Lösung, ich gebe nur den Cluster-Namen. Ich habe diesen Code mit früheren Versionen von Elasticsearch und seiner API verwendet. –

Verwandte Themen