Elasticsearch: impossibile connettersi alla porta localhost 9200 - Connessione rifiutata


110

Quando ho provato a connettermi a Elasticsearch utilizzando il curl http://localhost:9200, funziona correttamente.

Ma quando eseguo curl http://IpAddress:9200, viene visualizzato un messaggio di errore

Impossibile connettersi alla porta localhost 9200: connessione rifiutata

Come risolvere questo errore?


Se hai già impostato network.host: localhost nel file elasticsearch.yml, puoi provare ad aggiungere il protocollo http nella richiesta:curl -X GET "http://localhost:9200"
Xxx Xxx

Almeno usando Elasticsearch 7.8.0 su Windows 10, per me funziona solo la rimozione dei commenti da network.host nel file elasticsearch.yml.
DLyons

Risposte:


81

Per impostazione predefinita, dovrebbe legarsi a tutti gli indirizzi locali. Quindi, supponendo che tu non abbia un problema a livello di rete con i firewall, l'unica impostazione ES che posso pensare di controllare è network.bind_hoste assicurarti che non sia impostata o sia impostata su 0.0.0.0o ::0o sull'indirizzo IP corretto per la tua rete.

Aggiornamento: per i commenti in ES 2.3 dovresti network.hostinvece impostare .


11
Ho dovuto impostare esplicitamente il network.bind_hostvalore, lasciarlo non impostato era il mio problema.
joe

come impostare esplicitamente network.bind_host in Windows?
Rizwan Patel

Sei sicuro che sia sicuro? Penso che il diritto sia l'accesso solo dal server locale.
Liko

Bene, nella maggior parte dei casi questo è sicuro. Ma sì, ecco perché c'è la clausola "indirizzo IP corretto per la tua rete".
Andrew White,

3
Come indicato di seguito, "network.bind_host" è ora "network.host" per
elasticsearch

78

Modifica /etc/elasticsearch/elasticsearch.ymle aggiungi la seguente riga:

network.host: 0.0.0.0

Questo "annullerà" questo parametro e consentirà le connessioni da altri IP.


1
Questo ha funzionato per me, grazie! Tuttavia, sul mio Mac, il file di configurazione si trova in /Applications/elasticsearch-2.1.1/config/elasticsearch.ymle il parametro che dovevo modificare network.hostnon era network.bind_host.
bjornte

8
in elasticsearch 2.2 il parametro si chiama network.host
Orr

questo file /etc/elasticsearch/elasticsearch.yml dovrebbe essere nel contenitore Docker?
Ashish Karpe

2
Questo risolve per me, sto usando elasticsearch-6.0.0 in esecuzione all'interno del contenitore docker. Dopo la modifica della configurazione, ora posso accedere tramite curl http://172.17.0.2:9200. Riconoscerai che è l'indirizzamento IP docker comunemente usato.
truthadjustr

1
network.host: 0.0.0.0 - non aiuta, ma questa eccezione ricevo da cerebro
Mindaugas K.

29

Ho provato tutto su questa pagina e solo le istruzioni da qui hanno aiutato.

in /etc/default/elasticsearch, assicurati che non siano commentati:

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

assicurati che /var/lib/elasticsearchsia di proprietà dell'utente elasticsearch:

chown -R elasticsearch:elasticsearch /var/lib/elasticsearch/

1
Ha avuto lo stesso problema e la soluzione è stata giusta chown -R elasticsearch:elasticsearch /var/lib/elasticsearch/e non commentataSTART_DAEMON=true
Estevex

1
per me, questa soluzione + sudo systemctl restart elasticsearchcome risposta da @kalanit, ha risolto il problema
Sabre

1
Questa è l'unica soluzione che mi ha aiutato su Ubuntu 16.04.
Snehal

21

Nel mio caso è stata avviata la ricerca elastica. Ma lo aveva ancora

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

Il seguente comando non ha avuto successo

sudo service elasticsearch restart

Per farlo funzionare, ho dovuto invece correre

sudo systemctl restart elasticsearch

Poi è andato tutto bene.


1
Il problema che ho riscontrato è esattamente lo stesso del tuo e la tua soluzione funziona per me. Molte grazie!
shaosh

6
Anch'io dovevo fare sudo systemctl enable elasticsearch.
max pleaner

Ho avuto lo stesso problema, ma non riuscivo a capire perché systemctlfunziona e il servizio non funziona?
Luv33preet

@ Luv33preet systemctl è alimentato da systemd ed è un programma completamente diverso
haff

Il riavvio del servizio ha funzionato per me su Ubuntu 16.04 e ricerca elastica 1.74
racl101

19

Perché non inizi con questa riga di comando:

$ sudo service elasticsearch status

L'ho fatto e ho ottenuto:

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

Quindi ho modificato il /etc/elasticsearch/jvm.optionsfile:

...

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

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

#-Xms2g
#-Xms2g

-Xms512m
-Xmx512m

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

...

Questo ha funzionato come un fascino.


Questo sembra fornire le stesse informazioni della risposta del 22 marzo bu @ Jefferson.macedo. Una nuova risposta non dovrebbe solo riscrivere i dettagli esistenti, ma dovrebbe fornire informazioni nuove e usefil.
AdrianHHH

17

Nessuna delle soluzioni proposte qui ha funzionato per me, ma ciò che alla fine l'ha fatto funzionare è stato aggiungere quanto segue a elasticsearch.yml

network:
  host: 0.0.0.0
http:
  port: 9200

Successivamente, ho riavviato il servizio e ora posso curlfarlo sia dalla VM che dall'esterno. Per qualche strana ragione, ho dovuto provare alcune diverse varianti di un filecurl chiamata all'interno della VM prima che funzionasse:

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

Nota: sto usando Elasticsearch 5.5 su Ubuntu 14.04


1
Sei un salvavita. Questa è l'unica cosa che ha funzionato per me dopo aver letto una varietà di post diversi.
Yu Chen

1
sì, molto utile questa è l'unica cosa che ha funzionato anche per me!
osehgol

Grazie, ho provato la tua soluzione e ha funzionato. Cosa che ho trovato strano, perché dovevo solo rimuovere il commento dal numero di porta. Ho pensato che le righe commentate fossero come valori predefiniti predefiniti
zwep

13
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000085330000, 2060255232, 0) failed; error='Cannot allocate memory' (errno=12)

assicurati che il server sia avviato. Ho visto questo problema quando la mia macchina virtuale aveva troppa RAM e non poteva avviarsi.

sudo systemctl status elasticsearch

quanto sopra ti mostrerà se es è effettivamente in esecuzione.


4
Dai un'occhiata a stackoverflow.com/questions/29447434/… per aiuto a risolvere questo problema.
Ryan Miller

8

Per questo problema, ho dovuto usare: sudo /usr/share/elasticsearch/bin/elasticsearch start

essere in grado di ottenere qualcosa sulle porte 9200/9300 (sudo netstat -ntlp) e una risposta a:

curl -XGET http://localhost:9200


1
Grazie. Questo è per ElasticSearch 1. ~ versioni.
MontrealDevOne

controllando lo stato, il messaggio di errore non aiuta. solo quando si esegue manualmente il file bin fornisce il messaggio di errore corretto.
sulaiman sudirman

6

Modifica elasticsearch.ymle aggiungi la seguente riga

http.host: 0.0.0.0

network.host: 0.0.0.0 non ha funzionato per


3

Aprire il Dockerfile sotto elasticsearch cartella e aggiornamento "network.host = 0.0.0.0" con "network.host = 127.0.0.1" . Quindi riavvia il contenitore. Controlla la tua connessione 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

Ho avuto lo stesso problema rifiutando le connessioni sulla porta 9200. Controlla lo stato del servizio elasticsearch con il comando sudo service elasticsearch status. Se presenta un errore e leggi qualcosa relativo a Java, probabilmente il problema è la tua memoria jvm. Puoi modificarlo in /etc/elasticsearch/jvm.options. Per una macchina con memoria RAM da 1 GB in ambiente Amazon, ho mantenuto la mia configurazione su:

-Xms128m
-Xmx128m

Dopo averlo impostato e riavviato il servizio di ricerca elastica, ha funzionato a meraviglia. Anche il controllo di Nmap e UFW (se usi il firewall locale) dovrebbe essere utile.


1
Questo è ciò che ha fatto per me. La mia configurazione aveva 1g per entrambi e l'istanza AWS (t2.micro) non poteva allocare così tanta memoria. I comandi di avvio e riavvio non sono riusciti silenziosamente, ma il comando di stato ha descritto l'errore.
Greg Charles,

2

Ho riscontrato un problema simile.

Ecco come l'ho risolto

Esegui il comando del servizio di seguito per avviare ElasticSearch

sudo service elasticsearch start

O

sudo systemctl start elasticsearch

Se ricevi ancora l'errore

curl: (7) Impossibile connettersi alla porta localhost 9200: connessione rifiutata

Esegui il comando di servizio di seguito per verificare lo stato di ElasticSearch

sudo service elasticsearch status

O

sudo systemctl status elasticsearch

Se ottieni una risposta ( Attivo: attivo (in esecuzione) ) come quella qui sotto, allora ElasticSearch è attivo e in esecuzione

● elasticsearch.service - Elasticsearch Loaded: caricato (/usr/lib/systemd/system/elasticsearch.service; disabilitato; vendor preset: abilitato) Attivo: attivo (in esecuzione) da sabato 21/09/2019 11:22:21 WAT; 3s fa

Puoi quindi verificare che il tuo nodo Elasticsearch sia in esecuzione inviando una richiesta HTTP alla porta 9200 su localhost utilizzando il comando seguente:

curl http://localhost:9200

Altrimenti, se ottieni una risposta diversa, potresti dover eseguire il debug ulteriormente per risolverlo, ma l'esecuzione del comando seguente ti aiuterà a rilevare quali avvertenze stanno impedendo l'avvio del servizio ElasticSearch .

sudo service elasticsearch status

O

sudo systemctl status elasticsearch

Se desideri interrompere il servizio ElasticSearch , esegui semplicemente il comando di servizio riportato di seguito;

sudo service elasticsearch stop

O

sudo systemctl stop elasticsearch

N / B: potrebbe essere necessario eseguire il comando sudo service elasticsearch status O sudo systemctl status elasticsearch ogni volta che si verifica l'errore, al fine di comunicare lo stato del servizio ElasticSearch .

Questo vale anche per Kibana , esegui il comando sudo service kibana status O sudo systemctl status kibana ogni volta che incontri l'errore, per comunicare lo stato del servizio Kibana .

È tutto.

Spero che aiuti.


1

In questo caso, prima di tutto devi controllare la versione java usando il comando seguente:

java -version

dopo aver eseguito questo comando ottieni qualcosa del genere:

Java versione "1.7.0_51" OpenJDK Runtime Environment (rhel-2.4.5.5.el7-x86_64 u51-b31) OpenJDK 64-Bit Server VM (build 24.51-b03, modalità mista)

quindi usa questo comando:

update-alternatives --config java

e seleziona la versione sottostante

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

Invio per mantenere la selezione corrente [+] o digitare il numero di selezione: 2

curl -XGET http://127.0.0.1:9200

1

I miei 2 centesimi,

Ho appena seguito la procedura di installazione su Digital Ocean, a quanto pare il pacchetto disponibile nei repository non è aggiornato, ho cancellato tutto e seguito la procedura di installazione direttamente da Elastic Search e ora tutto funziona, in pratica il comportamento out of the box è attivo un localhost che punta a 9200. Stessa cosa / problema riscontrato con Kibana, la soluzione anche per me era rimuovere tutto e seguire la loro procedura, spero che questo faccia risparmiare due ore a qualcuno (il tempo che ho speso per capire come configurare ELK!)

it


1

Aggiorna il tuo jdk all'ultima versione minima per il tuo elasticsearch.


1

Modificare network.bind in 0.0.0.0 e http: port in 9200. L'indirizzo di bind 0.0.0.0 indica tutti gli indirizzi IPv4 sulla macchina locale. Se un host ha due indirizzi IP, 192.168.1.1 e 10.1.2.1, e un server in esecuzione sull'host è in ascolto su 0.0.0.0, sarà raggiungibile su entrambi gli IP.


1

Se riscontri l' errore Connessione rifiutata , esegui semplicemente il comando seguente per verificare lo stato del servizio ElasticSearch

sudo service elasticsearch status

Questo ti aiuterà a decifrare lo stato del servizio ElasticSearch e cosa fare al riguardo.



0

Dopo aver utilizzato alcune delle risposte precedenti, non dimenticare che dopo un'installazione di apt, potrebbe essere necessario un riavvio totale.


0

Solo per aggiungere questo, mi sono imbattuto in molti documenti tramite Google che dicevano di impostare network.host su localhost.

In questo modo mi ha dato la famigerata connessione rifiutata. È necessario utilizzare un indirizzo IP (127.0.0.1), non un FQDN.

Jeff


0

Assicurati che la porta 9200sia aperta per il mio caso, era un'istanza di Amazon, quindi quando l'ho aperta nel mio gruppo di sicurezza il comando curl ha funzionato.


0

Disabilitare SELinux ha funzionato per me, anche se non lo suggerisco - l'ho fatto solo per un PoC


0

Il mio problema era che non potevo lavorare con la localhostnecessità di impostarlo sull'indirizzo IP di localhost

network.bind_host: 127.0.0.1


0

Nel mio caso, il problema è con la versione java, che ho installato in open-jdk 11precedenza. Quello sta creando il problema durante l'avvio del servizio. L'ho cambiato open-jdk 8e ha iniziato a funzionare

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.