Elasticsearch: nie można połączyć się z portem hosta lokalnego 9200 - połączenie odrzucone


110

Kiedy próbowałem połączyć się z Elasticsearch za pomocą tego curl http://localhost:9200, działa dobrze.

Ale kiedy uruchamiam curl http://IpAddress:9200, rzuca komunikat o błędzie

Nie można połączyć się z portem hosta lokalnego 9200: odmowa połączenia

Jak rozwiązać ten błąd?


Jeśli już ustawiłeś network.host: localhost w pliku flexiblesearch.yml, możesz spróbować dodać protokół http w żądaniu:curl -X GET "http://localhost:9200"
Xxx Xxx

Przynajmniej przy użyciu Elasticsearch 7.8.0 w systemie Windows 10, po prostu odkomentowanie network.host w pliku flexiblesearch.yml działa dla mnie.
DLyons

Odpowiedzi:


82

Domyślnie powinien być powiązany ze wszystkimi lokalnymi adresami. Tak więc, zakładając, że nie masz problemu z warstwą sieciową z zaporami ogniowymi, jedyne ustawienie ES, które mogę sprawdzić, to network.bind_hosti upewnić się, że nie jest ustawione lub jest ustawione na 0.0.0.0lub ::0lub na prawidłowy adres IP dla Twojej sieci.

Aktualizacja: za komentarze w ES 2.3 należy ustawić network.hostzamiast.


11
Musiałem wyraźnie ustawić network.bind_hostwartość, pozostawienie jej nieustawionej było moim problemem.
joe

jak jawnie ustawić network.bind_host w systemie Windows?
Rizwan Patel

Czy na pewno to jest bezpieczne? Myślę, że prawo to dostęp tylko z lokalnego serwera.
Liko

Cóż, w większości przypadków jest to bezpieczne. Ale tak, właśnie dlatego jest tam klauzula „poprawny adres IP dla Twojej sieci”.
Andrew White

3
Jak stwierdzono poniżej, „network.bind_host” to teraz „network.host” dla
aplikacji Flexiblesearch

79

Edytuj /etc/elasticsearch/elasticsearch.ymli dodaj następujący wiersz:

network.host: 0.0.0.0

Spowoduje to "usunięcie" tego parametru i umożliwi połączenia z innych adresów IP.


1
To zadziałało dla mnie, dzięki! Jednak na moim Macu plik konfiguracyjny znajduje się pod adresem /Applications/elasticsearch-2.1.1/config/elasticsearch.yml, a parametr, który musiałem edytować network.host, nie network.bind_host.
bjornte

8
w elasticsearch 2.2 parametr nazywa się network.host
Orr

ten plik /etc/elasticsearch/elasticsearch.yml powinien znajdować się w kontenerze Dockera?
Ashish Karpe,

2
To rozwiązuje dla mnie, używam elastycznego wyszukiwania-6.0.0 działającego w kontenerze docker. Po zmianie konfiguracji mogę teraz uzyskać dostęp przez curl http://172.17.0.2:9200. Zrozumiesz, że jest to powszechnie używany adres IP dockera.
trueadjustr

1
network.host: 0.0.0.0 - nie pomagam, ale ten wyjątek dostaję od cerebro
Mindaugas K.

29

Wypróbowałem wszystko na tej stronie i pomogły tylko instrukcje z tego miejsca .

w /etc/default/elasticsearch, upewnij się, że te nie są komentowane:

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

upewnij się, że /var/lib/elasticsearchnależy do użytkownika Flexiblesearch:

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

1
Miałem ten sam problem, a rozwiązaniem było tylko chown -R elasticsearch:elasticsearch /var/lib/elasticsearch/i bez komentarzaSTART_DAEMON=true
Estevex

1
dla mnie to rozwiązanie + sudo systemctl restart elasticsearchjak odpowiedział @kalanit, rozwiązało problem
Sabre

1
To jedyne rozwiązanie, które pomogło mi w Ubuntu 16.04.
Snehal

21

W moim przypadku uruchomiono elastyczne wyszukiwanie. Ale nadal miał

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

Następujące polecenie nie powiodło się

sudo service elasticsearch restart

Aby to zadziałało, musiałem zamiast tego biec

sudo systemctl restart elasticsearch

Potem wszystko poszło dobrze.


1
Problem, który otrzymałem, jest dokładnie taki sam jak twój, a twoje rozwiązanie działa dla mnie. Wielkie dzięki!
shaosh

6
Ja też musiałem to zrobić sudo systemctl enable elasticsearch.
max pleaner

Mam ten sam problem, ale nie mogłem zrozumieć, dlaczego systemctldziała i nie działa?
Luv33preet

@ Luv33preet systemctl jest obsługiwany przez systemd i jest zupełnie innym programem
haff

Ponowne uruchomienie usługi działało dla mnie w systemie Ubuntu 16.04 i elastycznym wyszukiwaniu 1.74
racl101

19

Dlaczego nie zaczniesz od tego wiersza poleceń:

$ sudo service elasticsearch status

Zrobiłem to i otrzymałem:

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

Następnie edytowałem /etc/elasticsearch/jvm.optionsplik:

...

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

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

#-Xms2g
#-Xms2g

-Xms512m
-Xmx512m

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

...

To zadziałało jak urok.


Wydaje się, że zawiera te same informacje, co odpowiedź z 22 marca bu @ Jefferson.macedo. Nowa odpowiedź nie powinna po prostu przepisać istniejących szczegółów, powinna zawierać nowe i użyteczne informacje.
AdrianHHH

17

Żadne z proponowanych tutaj rozwiązań nie działało dla mnie, ale ostatecznie udało się to dodać do elasticsearch.yml

network:
  host: 0.0.0.0
http:
  port: 9200

Następnie ponownie uruchomiłem usługę i teraz mogę to curlzrobić zarówno z maszyny wirtualnej, jak i zewnętrznie. Z jakiegoś dziwnego powodu musiałem wypróbować kilka różnych wariantów curlpołączenia wewnątrz maszyny wirtualnej, zanim zadziałało:

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

Uwaga: używam Elasticsearch 5.5 na Ubuntu 14.04


1
Jesteś ratownikiem. To jedyna rzecz, która zadziałała dla mnie po przeczytaniu różnych postów.
Yu Chen

1
tak, bardzo pomocne, to jedyna rzecz, która też działała dla mnie!
osehgol

Dzięki, wypróbowałem twoje rozwiązanie i zadziałało. Co wydało mi się dziwne, ponieważ musiałem tylko odkomentować numer portu. Myślałem, że skomentowane linie były jak predefiniowane wartości domyślne
zwep

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

upewnij się, że serwer jest uruchomiony. Widziałem ten problem, gdy moja maszyna wirtualna miała zbyt małą pamięć RAM i nie można było uruchomić es.

sudo systemctl status elasticsearch

powyższe pokaże, czy es rzeczywiście działa.


4
Zajrzyj na stackoverflow.com/questions/29447434/…, aby uzyskać pomoc w rozwiązaniu tego problemu.
Ryan Miller,

8

Do tego problemu musiałem użyć: sudo /usr/share/elasticsearch/bin/elasticsearch start

aby móc uzyskać coś na portach 9200/9300 (sudo netstat -ntlp) i odpowiedź na:

curl -XGET http://localhost:9200


1
Dzięki. Dotyczy to wersji ElasticSearch 1. ~.
MontrealDevOne

sprawdzanie statusu, komunikat o błędzie nie pomaga. tylko podczas ręcznego uruchamiania pliku bin daje poprawny komunikat o błędzie.
sulaiman sudirman

6

Edytuj elasticsearch.ymli dodaj następujący wiersz

http.host: 0.0.0.0

network.host: 0.0.0.0 nie pracował dla


3

Otwórz Dockerfile pod elasticsearch folderu i aktualizacji "network.host = 0.0.0.0" z "network.host = 127.0.0.1" . Następnie uruchom ponownie kontener. Sprawdź połączenie z 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

Miałem ten sam problem z odmową połączenia na porcie 9200. Sprawdź stan usługi Flexiblesearch za pomocą polecenia sudo service elasticsearch status. Jeśli wyświetla błąd i czytasz cokolwiek związanego z Javą, prawdopodobnie problem dotyczy pamięci jvm. Możesz go edytować w /etc/elasticsearch/jvm.options. W przypadku maszyny z 1 GB pamięci RAM w środowisku Amazon zachowałem konfigurację na:

-Xms128m
-Xmx128m

Po ustawieniu tego i ponownym uruchomieniu usługi elastycznego wyszukiwania działało to jak marzenie. Sprawdzanie Nmapa i UFW (jeśli używasz lokalnej zapory) również powinno być przydatne.


1
To właśnie zrobiło to dla mnie. Moja konfiguracja miała 1g dla obu, a instancja AWS (t2.micro) nie mogła przydzielić do niej tak dużej ilości pamięci. Polecenia uruchomienia i ponownego uruchomienia po cichu nie powiodły się, ale polecenie stanu wyszczególniło błąd.
Greg Charles,

2

Miałem podobny problem.

Oto jak to rozwiązałem

Uruchom poniższe polecenie usługi, aby uruchomić ElasticSearch

sudo service elasticsearch start

LUB

sudo systemctl start elasticsearch

Jeśli nadal otrzymujesz błąd

curl: (7) Nie można połączyć się z portem hosta lokalnego 9200: Odmowa połączenia

Uruchom poniższe polecenie usługi, aby sprawdzić stan ElasticSearch

sudo service elasticsearch status

LUB

sudo systemctl status elasticsearch

Jeśli otrzymasz odpowiedź ( Active: active (running) ), jak ta poniżej, oznacza to, że ElasticSearch jest aktywny i działa

● flexiblesearch.service - Elasticsearch Loaded: załadowano (/usr/lib/systemd/system/elasticsearch.service; wyłączone; ustawienie dostawcy: włączone) Aktywne: aktywne (działa) od sob. 21.09.2019 11:22:21 WAT; 3 s temu

Następnie możesz sprawdzić, czy węzeł Elasticsearch działa, wysyłając żądanie HTTP do portu 9200 na hoście lokalnym za pomocą poniższego polecenia:

curl http://localhost:9200

W przeciwnym razie, jeśli otrzymasz inną odpowiedź, być może będziesz musiał dalej debugować, aby to naprawić, ale uruchomienie poniższego polecenia pomoże Ci wykryć, jakie zastrzeżenia powstrzymują uruchomienie usługi ElasticSearch .

sudo service elasticsearch status

LUB

sudo systemctl status elasticsearch

Jeśli chcesz zatrzymać usługę ElasticSearch , po prostu uruchom poniższe polecenie usługi;

sudo service elasticsearch stop

LUB

sudo systemctl stop elasticsearch

N / B: Może być konieczne uruchomienie polecenia sudo service elasticsearch status LUB za sudo systemctl status elasticsearch każdym razem, gdy napotkasz błąd, aby poinformować o stanie usługi ElasticSearch .

Dotyczy to również Kibany , uruchom polecenie sudo service kibana status LUB za sudo systemctl status kibana każdym razem, gdy napotkasz błąd, aby poinformować o stanie usługi Kibana .

To wszystko.

Mam nadzieję, że to pomoże.


1

W takim przypadku w pierwszej kolejności należy sprawdzić wersję java za pomocą poniższego polecenia:

java -version

po uruchomieniu tego polecenia otrzymujesz coś takiego:

wersja java „1.7.0_51” Środowisko wykonawcze OpenJDK (rhel-2.4.5.5.el7-x86_64 u51-b31) 64-bitowa maszyna wirtualna serwera OpenJDK (kompilacja 24.51-b03, tryb mieszany)

następnie użyj tego polecenia:

update-alternatives --config java

i wybierz poniższą wersję

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

Enter, aby zachować bieżący wybór [+], lub wpisz numer wyboru: 2

curl -XGET http://127.0.0.1:9200

1

Moje 2 centy,

Właśnie wykonałem procedurę instalacji na Digital Ocean, najwyraźniej pakiet dostępny w repozytoriach nie jest aktualny, usunąłem wszystko i wykonałem procedurę instalacji bezpośrednio z Elastic Search i wszystko działa teraz, w zasadzie jest włączone zachowanie po wyjęciu z pudełka lokalny host wskazujący na 9200. To samo / problem znaleziony w Kibanie, rozwiązaniem dla mnie było również usunięcie wszystkiego i po prostu wykonanie ich procedury. Mam nadzieję, że zaoszczędzi to komuś dwie godziny (czas, który spędziłem na zastanawianiu się, jak skonfigurować ELK!)

en


1

Zaktualizuj swój plik jdk do najnowszej minimalnej wersji dla swojej elastycznej wyszukiwarki.


1

Zmień network.bind na 0.0.0.0 i http: port na 9200. Adres powiązania 0.0.0.0 oznacza wszystkie adresy IPv4 na komputerze lokalnym. Jeśli host ma dwa adresy IP, 192.168.1.1 i 10.1.2.1, a serwer działający na hoście nasłuchuje na 0.0.0.0, będzie osiągalny z obu tych adresów IP.


1

Jeśli napotkasz błąd odmowy połączenia , po prostu uruchom poniższe polecenie, aby sprawdzić stan usługi ElasticSearch

sudo service elasticsearch status

Pomoże ci to rozszyfrować stan usługi ElasticSearch i co z tym zrobić.



0

Po skorzystaniu z niektórych z powyższych odpowiedzi nie zapominaj, że po instalacji apt może być konieczne całkowite ponowne uruchomienie.


0

Aby to dodać, natknąłem się na wiele dokumentów za pośrednictwem Google, które mówiły o ustawieniu network.host na localhost.

W ten sposób odmówiono mi niesławnego połączenia. Musisz użyć adresu IP (127.0.0.1), a nie nazwy FQDN.

Jeff


0

Upewnij się, że port 9200jest otwarty dla mojej sprawy, była to instancja amazon, więc kiedy otworzyłem go w mojej grupie bezpieczeństwa, polecenie curl zadziałało.


0

Wyłączenie SELinux działało dla mnie, chociaż nie sugeruję tego - zrobiłem to tylko dla PoC


0

Mój problem polegał na tym, że nie mogłem pracować localhost, musiałem ustawić go na adres IP lokalnego hosta

network.bind_host: 127.0.0.1


0

W moim przypadku problem dotyczy wersji java, którą zainstalowałem open-jdk 11wcześniej. To powoduje problem podczas uruchamiania usługi. Zmieniłem to open-jdk 8i zaczęło działać

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.