Elasticsearch: Échec de la connexion au port localhost 9200 - Connexion refusée

110

Lorsque j'ai essayé de me connecter à Elasticsearch en utilisant le, curl http://localhost:9200cela fonctionne bien.

Mais quand je cours, curl http://IpAddress:9200ça lance une erreur en disant

Échec de la connexion au port 9200 de l'hôte local: connexion refusée

Comment résoudre cette erreur?

chinna2580
la source
Si vous avez déjà défini network.host: localhost dans le fichier elasticsearch.yml, vous pouvez essayer d'ajouter le protocole http dans la requête:curl -X GET "http://localhost:9200"
Xxx Xxx
Au moins en utilisant Elasticsearch 7.8.0 sur Windows 10, il suffit de décommenter network.host dans le fichier elasticsearch.yml pour moi.
DLyons

Réponses:

81

Par défaut, il doit se lier à toutes les adresses locales. Donc, en supposant que vous n'ayez pas de problème de couche réseau avec les pare-feu, le seul paramètre ES que je peux penser à vérifier est network.bind_hostet assurez-vous qu'il n'est pas défini ou est défini sur 0.0.0.0ou ::0ou sur l'adresse IP correcte pour votre réseau.

Mise à jour: par commentaires dans ES 2.3, vous devez définir à la network.hostplace.

Andrew White
la source
11
J'ai dû définir explicitement la network.bind_hostvaleur, la laisser non définie était mon problème.
joe
comment définir explicitement le network.bind_host dans Windows?
Rizwan Patel
Êtes-vous sûr que c'est sûr? Je pense que le droit est d'accéder uniquement à partir du serveur local.
Liko
Eh bien, dans la plupart des cas, c'est sûr. Mais oui, c'est pourquoi la clause «adresse IP correcte pour votre réseau» est là.
Andrew White
3
Comme indiqué ci-dessous, "network.bind_host" est maintenant "network.host" pour
elasticsearch
78

Modifiez /etc/elasticsearch/elasticsearch.ymlet ajoutez la ligne suivante:

network.host: 0.0.0.0

Cela "annulera" ce paramètre et autorisera les connexions à partir d'autres adresses IP.

Ramon
la source
1
Cela a fonctionné pour moi, merci! Cependant, sur mon Mac, le fichier de configuration se trouve à /Applications/elasticsearch-2.1.1/config/elasticsearch.yml, et le paramètre que j'ai dû modifier ne l'était network.hostpas network.bind_host.
bjornte le
8
dans elasticsearch 2.2, le paramètre est appelé network.host
Orr
ce fichier /etc/elasticsearch/elasticsearch.yml doit être dans le conteneur Docker?
Ashish Karpe
2
Cela résout pour moi, j'utilise elasticsearch-6.0.0 en cours d'exécution à l'intérieur du conteneur Docker. Après le changement de configuration, je peux maintenant accéder par curl http://172.17.0.2:9200. Vous reconnaîtrez qu'il s'agit de l'adressage IP du docker couramment utilisé.
truthadjustr
1
network.host: 0.0.0.0 - ne m'aide pas, mais cette exception que je reçois de cerebro
Mindaugas K.
29

J'ai tout essayé sur cette page, et seules les instructions d' ici ont aidé.

dans /etc/default/elasticsearch, assurez-vous qu'ils ne sont pas commentés:

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

assurez-vous qu'il /var/lib/elasticsearchappartient à l'utilisateur elasticsearch:

chown -R elasticsearch:elasticsearch /var/lib/elasticsearch/
dikirill
la source
1
J'ai eu le même problème et la solution était juste chown -R elasticsearch:elasticsearch /var/lib/elasticsearch/et non commentéeSTART_DAEMON=true
Estevex
1
pour moi, cette solution + sudo systemctl restart elasticsearchcomme répondu par @kalanit, a résolu le problème
Sabre
1
C'est la seule solution qui m'a aidé sur Ubuntu 16.04.
Snehal
21

Dans mon cas, elasticsearch a été lancé. Mais avait encore

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

La commande suivante a échoué

sudo service elasticsearch restart

Pour que ça marche, je devais courir à la place

sudo systemctl restart elasticsearch

Ensuite, tout s'est bien passé.

Kalanit
la source
1
Le problème que j'ai rencontré est exactement le même que le vôtre, et votre solution fonctionne pour moi. Merci beaucoup!
shaosh
6
Je devais aussi faire sudo systemctl enable elasticsearch.
max pleaner
J'ai eu le même problème, mais je ne pouvais pas comprendre pourquoi les systemctltravaux et le service ne fonctionnent pas?
Luv33preet
@ Luv33preet systemctl est alimenté par systemd et est un programme entièrement différent
haff
Le redémarrage du service a fonctionné pour moi sur Ubuntu 16.04 et la recherche élastique 1.74
racl101
19

Pourquoi ne pas commencer par cette ligne de commande:

$ sudo service elasticsearch status

Je l'ai fait et j'ai obtenu:

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

Ensuite, j'ai édité le /etc/elasticsearch/jvm.optionsfichier:

...

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

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

#-Xms2g
#-Xms2g

-Xms512m
-Xmx512m

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

...

Cela a fonctionné comme un charme.

Dao Minh Duc
la source
Cela semble donner les mêmes informations que la réponse du 22 mars bu @ Jefferson.macedo. Une nouvelle réponse ne doit pas simplement réécrire les détails existants, elle doit fournir des informations nouvelles et utiles.
AdrianHHH
17

Aucune des solutions proposées ici n'a fonctionné pour moi, mais ce qui l'a finalement fait fonctionner a été d'ajouter ce qui suit à elasticsearch.yml

network:
  host: 0.0.0.0
http:
  port: 9200

Après cela, j'ai redémarré le service et maintenant je peux le curlfaire à la fois dans la VM et en externe. Pour une raison étrange, j'ai dû essayer différentes variantes d'un curlappel à l' intérieur de la machine virtuelle avant que cela fonctionne:

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

Remarque: j'utilise Elasticsearch 5.5 sur Ubuntu 14.04

Le développeur inconnu
la source
1
Tu es un sauveur. C'est la seule chose qui a fonctionné pour moi après avoir lu une variété de messages différents.
Yu Chen
1
oui, très utile c'est la seule chose qui a fonctionné pour moi aussi!
osehgol
Merci, j'ai essayé votre solution et cela a fonctionné. Ce que j'ai trouvé étrange, car je devais simplement décommenter le numéro de port. Je pensais que les lignes commentées étaient comme des valeurs par défaut prédéfinies
zwep
13
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000085330000, 2060255232, 0) failed; error='Cannot allocate memory' (errno=12)

assurez-vous que le serveur est démarré. J'ai vu ce problème lorsque ma machine virtuelle avait trop peu de RAM et ne pouvait pas démarrer.

sudo systemctl status elasticsearch

ce qui précède vous montrera si es fonctionne effectivement.

Jes Chergui
la source
4
Consultez stackoverflow.com/questions/29447434/… pour obtenir de l'aide pour résoudre ce problème.
Ryan Miller
8

Pour ce problème, j'ai dû utiliser: sudo /usr/share/elasticsearch/bin/elasticsearch start

pour pouvoir obtenir quelque chose sur les ports 9200/9300 (sudo netstat -ntlp) et une réponse à:

curl -XGET http://localhost:9200

DépendanceEnfer
la source
1
Merci. Ceci est pour les versions ElasticSearch 1. ~.
MontrealDevOne
vérifier l'état, le message d'erreur n'aide pas. seulement lors de l'exécution manuelle du fichier bin, il donne un message d'erreur correct.
sulaiman sudirman
6

Modifiez elasticsearch.ymlet ajoutez la ligne suivante

http.host: 0.0.0.0

network.host: 0.0.0.0 n'a pas fonctionné pour

Mike
la source
3

Ouvrez votre Dockerfile sous ElasticSearch dossier et mise à jour "network.host = 0.0.0.0" avec "network.host = 127.0.0.1" . Redémarrez ensuite le conteneur. Vérifiez votre connexion avec 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
la source
3

J'ai eu le même problème en refusant les connexions sur le port 9200. Vérifiez l'état du service elasticsearch avec la commande sudo service elasticsearch status. S'il présente une erreur et que vous lisez quelque chose concernant Java, le problème est probablement votre mémoire jvm. Vous pouvez le modifier au format /etc/elasticsearch/jvm.options. Pour une machine à mémoire RAM de 1 Go sur l'environnement Amazon, j'ai conservé ma configuration sur:

-Xms128m
-Xmx128m

Après avoir configuré cela et redémarré le service elasticsearch, cela a fonctionné comme un charme. La vérification Nmap et UFW (si vous utilisez un pare-feu local) devrait également être utile.

jefferson.macedo
la source
1
C'est ce qui a fait ça pour moi. Ma configuration avait 1g pour les deux et l'instance AWS (t2.micro) ne pouvait pas lui allouer autant de mémoire. Les commandes de démarrage et de redémarrage ont échoué en silence, mais la commande d'état a détaillé l'erreur.
Greg Charles
2

J'ai rencontré un problème similaire.

Voici comment je l'ai résolu

Exécutez la commande de service ci-dessous pour démarrer ElasticSearch

sudo service elasticsearch start

OU

sudo systemctl start elasticsearch

Si vous obtenez toujours l'erreur

curl: (7) Échec de la connexion au port localhost 9200: Connexion refusée

Exécutez la commande de service ci-dessous pour vérifier l'état d' ElasticSearch

sudo service elasticsearch status

OU

sudo systemctl status elasticsearch

Si vous obtenez une réponse ( Active: active (en cours d'exécution) ) comme celle ci-dessous, alors ElasticSearch est actif et en cours d'exécution

● elasticsearch.service - Elasticsearch Chargé: chargé (/usr/lib/systemd/system/elasticsearch.service; désactivé; prédéfini fournisseur: activé) Actif: actif (en cours d'exécution) depuis le samedi 21/09/2019 11:22:21 WAT; Il y a 3s

Vous pouvez ensuite tester que votre nœud Elasticsearch est en cours d'exécution en envoyant une requête HTTP au port 9200 sur localhost à l'aide de la commande ci-dessous:

curl http://localhost:9200

Sinon, si vous obtenez une réponse différente, vous devrez peut-être déboguer davantage pour le corriger, mais l'exécution de la commande ci-dessous vous aidera à détecter les mises en garde empêchant le démarrage du service ElasticSearch .

sudo service elasticsearch status

OU

sudo systemctl status elasticsearch

Si vous souhaitez arrêter le service ElasticSearch , exécutez simplement la commande de service ci-dessous;

sudo service elasticsearch stop

OU

sudo systemctl stop elasticsearch

N / B: Vous devrez peut-être exécuter la commande sudo service elasticsearch status OU sudo systemctl status elasticsearch chaque fois que vous rencontrez l'erreur, afin de connaître l'état du service ElasticSearch .

Cela vaut également pour Kibana , exécutez la commande sudo service kibana status OU à sudo systemctl status kibana chaque fois que vous rencontrez l'erreur, afin d'indiquer l'état du service Kibana .

C'est tout.

J'espère que ça aide.

Promesse Preston
la source
1

Dans ce cas, vous devez tout d'abord vérifier la version java en utilisant la commande ci-dessous:

java -version

après avoir exécuté cette commande, vous obtenez quelque chose comme ceci:

Java version "1.7.0_51" Environnement d'exécution OpenJDK (rhel-2.4.5.5.el7-x86_64 u51-b31) VM serveur OpenJDK 64 bits (build 24.51-b03, mode mixte)

puis utilisez cette commande:

update-alternatives --config java

et sélectionnez la version ci-dessous

* + 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

Entrez pour conserver la sélection actuelle [+], ou tapez le numéro de sélection: 2

curl -XGET http://127.0.0.1:9200
saurabh cse
la source
1

Mes 2 cents,

Je viens de suivre la procédure d'installation sur Digital Ocean, apparemment le package disponible dans les dépôts n'est pas à jour, j'ai tout supprimé et suivi la procédure d'installation directement depuis Elastic Search et tout fonctionne maintenant, essentiellement le comportement prêt à l'emploi est activé un localhost pointant vers 9200. Même chose / problème trouvé avec Kibana, la solution pour moi était aussi, de tout supprimer et de suivre leur procédure, j'espère que cela fait gagner deux heures à quelqu'un (le temps que j'ai passé à comprendre comment configurer ELK!)

fr

ximbal
la source
1

Mettez à jour votre jdk vers la dernière version minimale de votre elasticsearch.

Zhu Xiaohu
la source
1

Modifiez network.bind en 0.0.0.0 et http: port en 9200. L'adresse de liaison 0.0.0.0 signifie toutes les adresses IPv4 sur la machine locale. Si un hôte a deux adresses IP, 192.168.1.1 et 10.1.2.1, et qu'un serveur fonctionnant sur l'hôte écoute sur 0.0.0.0, il sera accessible à ces deux adresses IP.

Siddu
la source
1

Si vous rencontrez l' erreur de connexion refusée , exécutez simplement la commande ci-dessous pour vérifier l'état du service ElasticSearch

sudo service elasticsearch status

Cela vous aidera à déchiffrer l'état du service ElasticSearch et ce qu'il faut faire à ce sujet.

Jessica Fav
la source
1

Pas utile pour les versions 7.5.0 et supérieures.

VishalJ
la source
0

Après avoir utilisé certaines des réponses ci-dessus, n'oubliez pas qu'après une installation d'apt, un redémarrage total peut être nécessaire.

Altus
la source
0

Pour ajouter à cela, je suis tombé sur de nombreux documents via Google qui disaient de définir network.host sur localhost.

Cela m'a donné la connexion infâme refusée. Vous devez utiliser une adresse IP (127.0.0.1), pas un FQDN.

Jeff

JFGratton
la source
0

Assurez-vous que le port 9200est ouvert pour mon cas, il s'agissait d'une instance Amazon.Ainsi, lorsque je l'ai ouvert dans mon groupe de sécurité, la commande curl a fonctionné.

Buhiire Keneth
la source
0

La désactivation de SELinux a fonctionné pour moi, bien que je ne le suggère pas - je l'ai fait juste pour un PoC

Adhitya Ganesan
la source
0

Mon problème était que je ne pouvais pas travailler avec localhostje devais le définir sur l'adresse IP de l'hôte local

network.bind_host: 127.0.0.1

Mahdi Younesi
la source
0

Dans mon cas, le problème est avec la version java, j'ai installé open-jdk 11précédemment. Cela crée le problème lors du démarrage du service. Je l'ai changé open-jdk 8et ça a commencé à fonctionner

Satyaaditya
la source