Elasticsearch: no se pudo conectar al puerto localhost 9200 - Conexión rechazada

110

Cuando intenté conectarme a Elasticsearch usando el curl http://localhost:9200, está funcionando bien.

Pero cuando ejecuto el curl http://IpAddress:9200, arroja un error que dice

No se pudo conectar al puerto localhost 9200: conexión rechazada

¿Cómo solucionar este error?

chinna2580
fuente
Si ya configuró network.host: localhost en el archivo elasticsearch.yml, puede intentar agregar el protocolo http en la solicitud:curl -X GET "http://localhost:9200"
Xxx Xxx
Al menos usando Elasticsearch 7.8.0 en Windows 10, simplemente descomentar network.host en el archivo elasticsearch.yml funciona para mí.
DLyons

Respuestas:

81

De forma predeterminada, debería vincularse a todas las direcciones locales. Por lo tanto, suponiendo que no tienen un problema de capa de red con servidores de seguridad, el único establecimiento de ES que se me ocurre a comprobar es network.bind_hosty asegúrese de que o bien no se establece o se establece en 0.0.0.0o ::0oa la dirección IP correcta para la red.

Actualización: según los comentarios en ES 2.3, debe establecer en su network.hostlugar.

Andrew White
fuente
11
Tuve que establecer explícitamente el network.bind_hostvalor, dejarlo sin configurar era mi problema.
Joe
¿Cómo configurar explícitamente network.bind_host en Windows?
Rizwan Patel
¿Estás seguro de que esto es seguro? Creo que el derecho es el acceso solo desde el servidor local.
Liko
Bueno, en la mayoría de los casos esto es seguro. Pero sí, es por eso que la cláusula de "dirección IP correcta para su red" está ahí.
Andrew White
3
Como se indica a continuación, "network.bind_host" ahora es "network.host" para
elasticsearch
78

Edite /etc/elasticsearch/elasticsearch.ymly agregue la siguiente línea:

host de red: 0.0.0.0

Esto "desarmará" este parámetro y permitirá conexiones desde otras IP.

Ramon
fuente
1
Esto funcionó para mí, ¡gracias! Sin embargo, en mi Mac, el archivo de configuración se encuentra en /Applications/elasticsearch-2.1.1/config/elasticsearch.yml, y el parámetro que tenía que editar network.hostno era network.bind_host.
bjornte
8
en elasticsearch 2.2 el parámetro se llama network.host
Orr
este archivo /etc/elasticsearch/elasticsearch.yml debería estar en el contenedor Docker?
Ashish Karpe
2
Esto me resuelve, estoy usando elasticsearch-6.0.0 ejecutándose dentro del contenedor docker. Después del cambio de configuración, ahora puedo acceder mediante curl http://172.17.0.2:9200. Reconocerá que es la dirección IP de la ventana acoplable más utilizada.
Truthadjustr
1
network.host: 0.0.0.0 - no ayuda, pero esta excepción la recibo de cerebro
Mindaugas K.
29

Probé todo en esta página y solo ayudaron las instrucciones de aquí .

en /etc/default/elasticsearch, asegúrese de que no estén comentados:

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

asegúrese de que /var/lib/elasticsearchsea ​​propiedad del usuario de elasticsearch:

chown -R elasticsearch:elasticsearch /var/lib/elasticsearch/
dikirill
fuente
1
Tuvo el mismo problema y la solución fue justa chown -R elasticsearch:elasticsearch /var/lib/elasticsearch/y sin comentarios elSTART_DAEMON=true
Estevex
1
para mí, esta solución + sudo systemctl restart elasticsearchcomo respondió @kalanit, resolvió el problema
Sabre
1
Esta es la única solución que me ayudó en Ubuntu 16.04.
Snehal
21

En mi caso, se inició elasticsearch. Pero todavía tenía

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

El siguiente comando no tuvo éxito

sudo service elasticsearch restart

Para que funcione, tuve que correr

sudo systemctl restart elasticsearch

Entonces todo salió bien.

Kalanit
fuente
1
El problema que tengo es exactamente el mismo que el tuyo, y tu solución me funciona. ¡Muchas gracias!
shaosh
6
Yo también tenía que hacer sudo systemctl enable elasticsearch.
pleaner máximo
Tengo el mismo problema, pero no puedo entender por qué systemctlfunciona y el servicio no funciona.
Luv33preet
@ Luv33preet systemctl funciona con systemd y es un programa completamente diferente
haff
Reiniciar el servicio funcionó para mí en Ubuntu 16.04 y búsqueda elástica 1.74
racl101
19

¿Por qué no comienzas con esta línea de comandos?

$ sudo service elasticsearch status

Lo hice y obtuve:

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

Luego edité el /etc/elasticsearch/jvm.optionsarchivo:

...

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

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

#-Xms2g
#-Xms2g

-Xms512m
-Xmx512m

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

...

Funcionó como por arte de magia.

Dao Minh Duc
fuente
Esto parece dar la misma información que la respuesta del 22 de marzo bu @ Jefferson.macedo. Una nueva respuesta no debería simplemente reescribir los detalles existentes, debería proporcionar información nueva y útil.
AdrianHHH
17

Ninguna de las soluciones propuestas aquí funcionó para mí, pero lo que finalmente hizo que funcionara fue agregar lo siguiente a elasticsearch.yml

network:
  host: 0.0.0.0
http:
  port: 9200

Después de eso, reinicié el servicio y ahora puedo curlhacerlo desde dentro de la VM y desde afuera. Por alguna extraña razón, tuve que probar algunas variantes diferentes de una curlllamada dentro de la VM antes de que funcionara:

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

Nota: estoy usando Elasticsearch 5.5 en Ubuntu 14.04

El desarrollador desconocido
fuente
1
Eres un salvavidas. Esto es lo único que funcionó para mí después de leer una variedad de publicaciones diferentes.
Yu Chen
1
sí, muy útil, ¡esto es lo único que funcionó para mí también!
osehgol
Gracias, probé tu solución y funcionó. Lo cual me pareció extraño, porque solo tuve que descomentar el número de puerto. Pensé que las líneas comentadas eran como valores predeterminados predefinidos
zwep
13
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000085330000, 2060255232, 0) failed; error='Cannot allocate memory' (errno=12)

asegúrese de que el servidor esté iniciado. He visto este problema cuando mi máquina virtual tenía muy poca RAM y no se podía iniciar.

sudo systemctl status elasticsearch

lo anterior le mostrará si es realmente en ejecución.

Jes Chergui
fuente
4
Consulte stackoverflow.com/questions/29447434/… para obtener ayuda para solucionar este problema.
Ryan Miller
8

Para este problema, tuve que usar: sudo /usr/share/elasticsearch/bin/elasticsearch start

para poder obtener algo en los puertos 9200/9300 (sudo netstat -ntlp) y una respuesta a:

curl -XGET http://localhost:9200

Dependencia Infierno
fuente
1
Gracias. Esto es para las versiones ElasticSearch 1. ~.
MontrealDevOne
comprobar el estado, el mensaje de error no ayuda. solo cuando se ejecuta el archivo bin manualmente, se muestra el mensaje de error correcto.
sulaiman sudirman
6

Edite elasticsearch.ymly agregue la siguiente línea

http.host: 0.0.0.0

network.host: 0.0.0.0 no funcionó para

Miguel
fuente
3

Abra su Dockerfile bajo elasticsearch carpeta y actualización "network.host = 0.0.0.0" con "network.host = 127.0.0.1" . Luego reinicie el contenedor. Comprueba tu conexión con 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
fuente
3

Tuve el mismo problema al rechazar las conexiones en el puerto 9200. Verifique el estado del servicio elasticsearch con el comando sudo service elasticsearch status. Si está presentando un error y lee cualquier cosa relacionada con Java, probablemente el problema sea su memoria jvm. Puede editarlo en formato /etc/elasticsearch/jvm.options. Para una máquina de memoria RAM de 1GB en el entorno de Amazon, mantuve mi configuración en:

-Xms128m
-Xmx128m

Después de configurar eso y reiniciar el servicio elasticsearch, funcionó a la perfección. La verificación de Nmap y UFW (si usa un firewall local) también debería ser útil.

jefferson.macedo
fuente
1
Esto es lo que hizo por mí. Mi configuración tenía 1g para ambos, y la instancia de AWS (t2.micro) no podía asignarle tanta memoria. Los comandos de inicio y reinicio fallaron silenciosamente, pero el comando de estado detalló el error.
Greg Charles
2

Experimenté un problema similar.

Así es como lo resolví

Ejecute el comando de servicio a continuación para iniciar ElasticSearch

sudo service elasticsearch start

O

sudo systemctl start elasticsearch

Si sigues recibiendo el error

curl: (7) No se pudo conectar al puerto localhost 9200: Conexión rechazada

Ejecute el comando de servicio a continuación para verificar el estado de ElasticSearch

sudo service elasticsearch status

O

sudo systemctl status elasticsearch

Si obtiene una respuesta ( Activo: activo (en ejecución) ) como la que se muestra a continuación, entonces ElasticSearch está activo y en ejecución.

● elasticsearch.service - Elasticsearch Loaded: cargado (/usr/lib/systemd/system/elasticsearch.service; deshabilitado; preajuste del proveedor: habilitado) Activo: activo (en ejecución) desde el sábado 21-09-2019 11:22:21 WAT; Hace 3s

Luego, puede probar que su nodo Elasticsearch se está ejecutando enviando una solicitud HTTP al puerto 9200 en localhost usando el siguiente comando:

curl http://localhost:9200

De lo contrario, si obtiene una respuesta diferente, es posible que deba depurar más para solucionarlo, pero ejecutar el comando a continuación lo ayudará a detectar qué advertencias están reteniendo el servicio ElasticSearch desde el inicio.

sudo service elasticsearch status

O

sudo systemctl status elasticsearch

Si desea detener el servicio ElasticSearch , simplemente ejecute el comando de servicio a continuación;

sudo service elasticsearch stop

O

sudo systemctl stop elasticsearch

N / B: Es posible que deba ejecutar el comando sudo service elasticsearch status O sudo systemctl status elasticsearch cada vez que encuentre el error, para saber el estado de ElasticSearch servicio .

Esto también se aplica a Kibana , ejecute el comando sudo service kibana status O sudo systemctl status kibana cada vez que encuentre el error, para saber el estado de Kibana servicio de .

Eso es todo.

Espero que esto ayude.

Promesa Preston
fuente
1

En este caso, en primer lugar, debe verificar la versión de Java usando el siguiente comando:

java -version

después de ejecutar este comando, obtienes algo como esto:

Java versión "1.7.0_51" Entorno de tiempo de ejecución OpenJDK (rhel-2.4.5.5.el7-x86_64 u51-b31) VM de servidor OpenJDK de 64 bits (compilación 24.51-b03, modo mixto)

luego usa este comando:

update-alternatives --config java

y seleccione la versión siguiente

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

Ingrese para mantener la selección actual [+], o escriba el número de selección: 2

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

Mis 2 centavos

Acabo de seguir el procedimiento de instalación en Digital Ocean, aparentemente el paquete disponible en los repositorios no está actualizado, eliminé todo y seguí el procedimiento de instalación directamente desde Elastic Search y todo está funcionando ahora, básicamente el comportamiento listo para usar está activado un localhost apuntando a 9200. Lo mismo / problema encontrado con Kibana, la solución para mí también fue eliminar todo y seguir su procedimiento. Espero que esto le ahorre a alguien dos horas (¡el tiempo que pasé averiguando cómo configurar ELK!)

en

ximbal
fuente
1

Actualice su jdk a la última versión mínima para su elasticsearch.

Zhu Xiaohu
fuente
1

Cambie network.bind a 0.0.0.0 y http: port a 9200. La dirección de enlace 0.0.0.0 significa todas las direcciones IPv4 en la máquina local. Si un host tiene dos direcciones IP, 192.168.1.1 y 10.1.2.1, y un servidor que se ejecuta en el host escucha en 0.0.0.0, será accesible en ambas direcciones IP.

Siddu
fuente
1

Si encuentra el error Conexión rechazada , simplemente ejecute el comando a continuación para verificar el estado del servicio ElasticSearch

sudo service elasticsearch status

Esto le ayudará a descifrar el estado del servicio ElasticSearch y qué hacer al respecto.

Jessica Fav
fuente
1

No es útil para 7.5.0 y superior.

VishalJ
fuente
0

Después de utilizar algunas de las respuestas anteriores, no olvide que después de una instalación de apt, podría ser necesario reiniciar por completo.

Altus
fuente
0

Solo para agregar esto, me encontré con muchos documentos a través de Google que decían configurar network.host en localhost.

Hacerlo me dio la infame conexión rechazada. Debe utilizar una dirección IP (127.0.0.1), no un FQDN.

Jeff

JFGratton
fuente
0

Asegúrese de que el puerto 9200esté abierto para mi caso, era una instancia de Amazon, así que cuando lo abrí en mi grupo de seguridad, el comando curl funcionó.

Buhiire Keneth
fuente
0

Desactivar SELinux funcionó para mí, aunque no lo sugiero, lo hice solo para un PoC

Adhitya Ganesan
fuente
0

Mi problema era que no podía trabajar localhost, necesitaba configurarlo en la dirección IP de localhost

network.bind_host: 127.0.0.1

Mahdi Younesi
fuente
0

En mi caso, el problema es con la versión de Java, la instalé open-jdk 11previamente. Eso está creando el problema al iniciar el servicio. Lo cambié open-jdk 8y empezó a funcionar

Satyaaditya
fuente