Elasticsearch: Verbindung zum lokalen Host-Port 9200 fehlgeschlagen - Verbindung abgelehnt

110

Als ich versuchte, eine Verbindung zu Elasticsearch herzustellen, curl http://localhost:9200funktioniert dies einwandfrei.

Aber wenn ich das curl http://IpAddress:9200starte, wird ein Fehler ausgegeben

Verbindung zum localhost-Port 9200 fehlgeschlagen: Verbindung abgelehnt

Wie kann dieser Fehler behoben werden?

chinna2580
quelle
Wenn Sie network.host: localhost bereits in der Datei curl -X GET "http://localhost:9200"
elasticsearch.yml festgelegt haben,
Zumindest mit Elasticsearch 7.8.0 unter Windows 10 funktioniert es für mich, wenn Sie network.host in der Datei elasticsearch.yml nur auskommentieren.
DLyons

Antworten:

81

Standardmäßig sollte es an alle lokalen Adressen gebunden sein. Unter der Annahme, dass Sie kein Problem mit der Netzwerkschicht mit Firewalls haben, kann ich nur prüfen network.bind_host, ob die ES-Einstellung entweder nicht oder auf 0.0.0.0oder ::0oder auf die richtige IP-Adresse für Ihr Netzwerk eingestellt ist.

Update: Gemäß Kommentaren in ES 2.3 sollten Sie network.hoststattdessen festlegen .

Andrew White
quelle
11
Ich musste den network.bind_hostWert explizit festlegen , es war mein Problem, ihn nicht festzulegen.
Joe
Wie setze ich die Datei network.bind_host explizit in Windows?
Rizwan Patel
Sind Sie sicher, dass dies sicher ist? Ich denke, das Recht ist der Zugriff nur vom lokalen Server.
Liko
Nun, in den meisten Fällen ist dies sicher. Aber ja, deshalb gibt es die Klausel für "richtige IP-Adresse für Ihr Netzwerk".
Andrew White
3
Wie unten angegeben, ist "network.bind_host" jetzt "network.host" für elasticsearch 2.3
bkunzi01
78

Bearbeiten /etc/elasticsearch/elasticsearch.ymlSie die folgende Zeile und fügen Sie sie hinzu:

network.host: 0.0.0.0

Dadurch wird dieser Parameter "deaktiviert" und Verbindungen von anderen IPs werden zugelassen.

Ramon
quelle
1
Das hat bei mir funktioniert, danke! Auf meinem Mac befindet sich die Konfigurationsdatei jedoch /Applications/elasticsearch-2.1.1/config/elasticsearch.ymlunter und der Parameter, den ich bearbeiten musste, war network.hostnicht network.bind_host.
bjornte
8
In Elasticsearch 2.2 heißt der Parameter network.host
Orr
Diese Datei /etc/elasticsearch/elasticsearch.yml sollte sich im Docker-Container befinden.
Ashish Karpe
2
Dies löst für mich, ich verwende elasticsearch-6.0.0, das im Docker-Container ausgeführt wird. Nach der Konfigurationsänderung kann ich jetzt über zugreifen curl http://172.17.0.2:9200. Sie werden erkennen, dass dies die häufig verwendete Docker-IP-Adresse ist.
Truthadjustr
1
network.host: 0.0.0.0 - nicht helfen, aber diese Ausnahme bekomme ich von cerebro
Mindaugas K.
29

Versuchte alles auf dieser Seite und nur Anweisungen von hier halfen.

in /etc/default/elasticsearch, stellen Sie sicher , dass diese unkommentiert sind:

START_DAEMON=true
ES_USER=elasticsearch
ES_GROUP=elasticsearch
LOG_DIR=/var/log/elasticsearch
DATA_DIR=/var/lib/elasticsearch
WORK_DIR=/tmp/elasticsearch
CONF_DIR=/etc/elasticsearch
CONF_FILE=/etc/elasticsearch/elasticsearch.yml
RESTART_ON_UPGRADE=true

Stelle sicher /var/lib/elasticsearch es dem Benutzer von elasticsearch gehört:

chown -R elasticsearch:elasticsearch /var/lib/elasticsearch/
Dikirill
quelle
1
Hatte das gleiche Problem und die Lösung war gerecht chown -R elasticsearch:elasticsearch /var/lib/elasticsearch/und START_DAEMON=true
unkommentiert
1
Für mich löste diese Lösung +, sudo systemctl restart elasticsearchwie von @kalanit beantwortet, das Problem
Sabre
1
Dies ist die einzige Lösung, die mir unter Ubuntu 16.04 geholfen hat.
Snehal
22

In meinem Fall wurde elasticsearch gestartet. Hatte aber immer noch

curl: (7) Failed to connect to localhost port 9200: Connection refused

Der folgende Befehl war nicht erfolgreich

sudo service elasticsearch restart

Damit es funktioniert, musste ich stattdessen rennen

sudo systemctl restart elasticsearch

Dann ging alles gut.

Kalanit
quelle
1
Das Problem, das ich habe, ist genau das gleiche bei Ihnen, und Ihre Lösung funktioniert für mich. Vielen Dank!
Shaosh
6
Ich musste es auch tun sudo systemctl enable elasticsearch.
Max Pleaner
Ich habe das gleiche Problem, konnte aber nicht verstehen, warum systemctlArbeiten und Service nicht funktionieren?
Luv33preet
@ Luv33preet systemctl wird von systemd betrieben und ist ein völlig anderes Programm
haff
Das Neustarten des Dienstes funktionierte für mich unter Ubuntu 16.04 und der elastischen Suche 1.74
racl101
19

Warum beginnen Sie nicht mit dieser Befehlszeile:

$ sudo service elasticsearch status

Ich habe es getan und bekommen:

"There is insufficient memory for the Java Runtime..."

Dann habe ich die /etc/elasticsearch/jvm.optionsDatei bearbeitet :

...

################################################################

# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space

#-Xms2g
#-Xms2g

-Xms512m
-Xmx512m

################################################################

...

Das hat wie ein Zauber gewirkt.

Dao Minh Duc
quelle
Dies scheint die gleichen Informationen zu liefern wie die Antwort vom 22. März bu @ Jefferson.macedo. Eine neue Antwort sollte nicht nur vorhandene Details umschreiben, sondern auch neue und nützliche Informationen enthalten.
AdrianHHH
16

Keine der hier vorgeschlagenen Lösungen funktionierte für mich, aber was letztendlich dazu führte, dass Folgendes hinzugefügt wurde elasticsearch.yml

network:
  host: 0.0.0.0
http:
  port: 9200

Danach habe ich den Dienst neu gestartet und kann curlihn nun sowohl innerhalb der VM als auch extern ausführen. Aus irgendeinem Grund musste ich einige verschiedene Varianten eines curlAufrufs in der VM ausprobieren, bevor er funktionierte:

curl localhost:9200
curl http://localhost:9200
curl 127.0.0.1:9200

Hinweis: Ich verwende Elasticsearch 5.5 unter Ubuntu 14.04

Der unbekannte Entwickler
quelle
1
Du bist ein Lebensretter. Dies ist das einzige, was für mich funktioniert hat, nachdem ich verschiedene Beiträge gelesen habe.
Yu Chen
1
Ja, sehr hilfreich, das ist das einzige, was auch für mich funktioniert hat!
Osehgol
Danke, ich habe deine Lösung ausprobiert und es hat funktioniert. Was ich seltsam fand, weil ich nur die Portnummer auskommentieren musste. Ich dachte, dass die kommentierten Zeilen wie vordefinierte Standardwerte waren
zwep
13
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000085330000, 2060255232, 0) failed; error='Cannot allocate memory' (errno=12)

Stellen Sie sicher, dass der Server gestartet ist. Ich habe dieses Problem gesehen, als meine virtuelle Maschine zu wenig RAM hatte und nicht gestartet werden konnte.

sudo systemctl status elasticsearch

Das Obige zeigt Ihnen, ob es tatsächlich läuft.

Jes Chergui
quelle
4
Weitere Informationen zum Beheben dieses Problems finden Sie unter stackoverflow.com/questions/29447434/… .
Ryan Miller
8

Für dieses Problem musste ich verwenden: sudo /usr/share/elasticsearch/bin/elasticsearch start

um etwas über die Ports 9200/9300 (sudo netstat -ntlp) zu bekommen und eine Antwort auf:

curl -XGET http://localhost:9200

DependencyHell
quelle
1
Vielen Dank. Dies ist für ElasticSearch 1. ~ Versionen.
MontrealDevOne
Wenn Sie den Status überprüfen, hilft die Fehlermeldung nicht weiter. Nur wenn die Bin-Datei manuell ausgeführt wird, wird die richtige Fehlermeldung angezeigt.
Sulaiman Sudirman
6

Bearbeiten elasticsearch.ymlSie die folgende Zeile und fügen Sie sie hinzu

http.host: 0.0.0.0

network.host: 0.0.0.0 hat nicht funktioniert für

Mike
quelle
3

Öffnen Sie Ihre Dockerfile unter Elasticsearch Ordner und aktualisieren "network.host = 0.0.0.0" mit "network.host = 127.0.0.1" . Starten Sie dann den Container neu. Überprüfen Sie Ihre Verbindung mit Curl.

$ curl http://docker-machine-ip:9200
{
  "name" : "vI6Zq_D",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "hhyB_Wa4QwSX6zZd1F894Q",
  "version" : {
    "number" : "5.2.0",
    "build_hash" : "24e05b9",
    "build_date" : "2017-01-24T19:52:35.800Z",
    "build_snapshot" : false,
    "lucene_version" : "6.4.0"
  },
  "tagline" : "You Know, for Search"
}
javasenior
quelle
3

Ich hatte das gleiche Problem, Verbindungen am 9200-Port abzulehnen. Überprüfen Sie den Status des Elasticsearch-Dienstes mit dem Befehl sudo service elasticsearch status. Wenn ein Fehler auftritt und Sie alles lesen, was mit Java zu tun hat, liegt das Problem wahrscheinlich in Ihrem JVM-Speicher. Sie können es in bearbeiten /etc/elasticsearch/jvm.options. Für einen 1-GB-RAM-Speicher in einer Amazon-Umgebung habe ich meine Konfiguration beibehalten:

-Xms128m
-Xmx128m

Nachdem Sie dies eingestellt und den Elasticsearch-Dienst neu gestartet hatten, funktionierte es wie ein Zauber. Die Überprüfung von Nmap und UFW (wenn Sie eine lokale Firewall verwenden) sollte ebenfalls hilfreich sein.

jefferson.macedo
quelle
1
Das hat es für mich getan. Meine Konfiguration hatte 1g für beide und die AWS-Instanz (t2.micro) konnte ihr nicht so viel Speicher zuweisen. Die Start- und Neustartbefehle sind unbemerkt fehlgeschlagen, aber der Statusbefehl hat den Fehler detailliert beschrieben.
Greg Charles
2

Ich habe ein ähnliches Problem festgestellt.

So habe ich es gelöst

Führen Sie den folgenden Dienstbefehl aus, um ElasticSearch zu starten

sudo service elasticsearch start

ODER

sudo systemctl start elasticsearch

Wenn Sie immer noch den Fehler erhalten

Curl: (7) Verbindung zum Localhost-Port 9200 fehlgeschlagen: Verbindung abgelehnt

Führen Sie den folgenden Servicebefehl aus, um den Status von ElasticSearch zu überprüfen

sudo service elasticsearch status

ODER

sudo systemctl status elasticsearch

Wenn Sie eine Antwort ( Aktiv: Aktiv ( Wird ausgeführt) ) wie die folgende erhalten, ist ElasticSearch aktiv und wird ausgeführt

● elasticsearch.service - Elasticsearch Geladen: geladen (/usr/lib/systemd/system/elasticsearch.service; deaktiviert; Hersteller-Voreinstellung: aktiviert) Aktiv: aktiv (läuft) seit Sa 2019-09-21 11:22:21 WAT; Vor 3s

Sie können dann testen, ob Ihr Elasticsearch- Knoten ausgeführt wird, indem Sie eine HTTP-Anforderung an Port 9200 auf localhost mit dem folgenden Befehl senden:

curl http://localhost:9200

Wenn Sie eine andere Antwort erhalten, müssen Sie möglicherweise ein weiteres Debugging durchführen, um das Problem zu beheben. Wenn Sie jedoch den folgenden Befehl ausführen, können Sie feststellen, welche Einschränkungen den ElasticSearch- Dienst vom Start abhalten .

sudo service elasticsearch status

ODER

sudo systemctl status elasticsearch

Wenn Sie den ElasticSearch- Dienst beenden möchten , führen Sie einfach den folgenden Dienstbefehl aus.

sudo service elasticsearch stop

ODER

sudo systemctl stop elasticsearch

N / B: Möglicherweise müssen Sie den Befehl sudo service elasticsearch status ODER sudo systemctl status elasticsearch jedes Mal ausführen, wenn der Fehler auftritt , um den Status des ElasticSearch- Dienstes zu ermitteln.

Dies gilt auch für Kibana . Führen Sie den Befehl sudo service kibana status ODER sudo systemctl status kibana jedes Mal aus, wenn Sie auf den Fehler stoßen, um den Status des Kibana- Dienstes zu ermitteln.

Das ist alles.

Ich hoffe das hilft.

Versprich Preston
quelle
1

In diesem Fall müssen Sie zunächst die Java-Version mit dem folgenden Befehl überprüfen:

java -version

Nachdem Sie diesen Befehl ausgeführt haben, erhalten Sie ungefähr Folgendes:

Java-Version "1.7.0_51" OpenJDK-Laufzeitumgebung (rhel-2.4.5.5.el7-x86_64 u51-b31) OpenJDK 64-Bit-Server-VM (Build 24.51-b03, gemischter Modus)

Verwenden Sie dann diesen Befehl:

update-alternatives --config java

und wählen Sie die folgende Version

* + 1 /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.51-2.4.5.5.el7.x86_64/jre/bin/java 2 /usr/java/jdk1.8.0_73/jre/bin/ Java

Geben Sie ein, um die aktuelle Auswahl [+] beizubehalten, oder geben Sie die Auswahlnummer ein: 2

curl -XGET http://127.0.0.1:9200
saurabh cse
quelle
1

Meine 2 Cent,

Ich habe gerade die Installationsprozedur auf Digital Ocean befolgt, anscheinend ist das in den Repos verfügbare Paket nicht auf dem neuesten Stand, ich habe alles gelöscht und die Installationsprozedur direkt von Elastic Search befolgt und alles funktioniert jetzt, im Grunde ist das Out-of-the-Box-Verhalten aktiviert Ein lokaler Host, der auf 9200 zeigt. Dasselbe Problem / Problem mit Kibana, die Lösung für mich war auch, alles zu entfernen und einfach dem Verfahren zu folgen. Ich hoffe, dies spart jemandem zwei Stunden (die Zeit, die ich damit verbracht habe, herauszufinden, wie man ELK einrichtet!).

en

Ximbal
quelle
1

Aktualisieren Sie Ihr JDK auf die neueste Mindestversion für Ihre Elasticsearch.

Zhu Xiaohu
quelle
1

Ändern Sie die Datei network.bind in 0.0.0.0 und http: port in 9200. Die Bindungsadresse 0.0.0.0 bedeutet alle IPv4-Adressen auf dem lokalen Computer. Wenn ein Host zwei IP-Adressen hat, 192.168.1.1 und 10.1.2.1, und ein auf dem Host ausgeführter Server auf 0.0.0.0 lauscht, ist er an beiden IPs erreichbar.

Siddu
quelle
1

Wenn der Fehler " Verbindung verweigert" auftritt, führen Sie einfach den folgenden Befehl aus, um den Status des ElasticSearch-Dienstes zu überprüfen

sudo service elasticsearch status

Auf diese Weise können Sie den Status des ElasticSearch-Dienstes entschlüsseln und feststellen, was Sie dagegen tun müssen.

Jessica Fav
quelle
1

Nicht nützlich für 7.5.0 und höher.

VishalJ
quelle
0

Vergessen Sie nach der Verwendung einiger der oben genannten Antworten nicht, dass nach einer geeigneten Installation möglicherweise ein vollständiger Neustart angebracht ist.

Altus
quelle
0

Um dies hinzuzufügen, bin ich über Google auf viele Dokumente gestoßen, die besagten, dass network.host auf localhost gesetzt wurde.

Dadurch wurde mir die berüchtigte Verbindung verweigert. Sie müssen eine IP-Adresse (127.0.0.1) verwenden, keinen vollqualifizierten Domänennamen.

Jeff

JFGratton
quelle
0

Stellen Sie sicher, dass der Port 9200für meinen Fall offen ist. Es war eine Amazon-Instanz. Als ich ihn in meiner Sicherheitsgruppe öffnete, funktionierte der Befehl curl.

Buhiire Keneth
quelle
0

Das Deaktivieren von SELinux hat bei mir funktioniert, obwohl ich es nicht vorschlage - ich habe das nur für einen PoC gemacht

Adhitya Ganesan
quelle
0

Mein Problem war, dass ich nicht damit arbeiten konnte. localhostIch musste es auf die IP-Adresse von localhost einstellen

network.bind_host: 127.0.0.1

Mahdi Younesi
quelle
0

In meinem Fall liegt das Problem bei der Java-Version, die ich open-jdk 11zuvor installiert habe . Dadurch wird das Problem beim Starten des Dienstes verursacht. Ich habe es geändert open-jdk 8und es fing an zu funktionieren

Satyaaditya
quelle