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?


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.


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.


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/

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.


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.


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


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.


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


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


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"
}

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.


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.


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

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


1

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


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.


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.



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.


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


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ó.


0

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


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


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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.