Elasticsearch: Не вдалося підключитися до порту localhost 9200 - з’єднання відмовлено


110

Коли я спробував підключитися до Elasticsearch, використовуючи його, curl http://localhost:9200він працює чудово.

Але коли я запускаю, curl http://IpAddress:9200це кидає помилку

Не вдалося підключитися до порту localhost 9200: з’єднання відмовлено

Як вирішити цю помилку?


Якщо ви вже встановили мережу.host: localhost у файл elasticsearch.yml, ви можете спробувати додати протокол http у запит:curl -X GET "http://localhost:9200"
Xxx Xxx

Принаймні, використовуючи Elasticsearch 7.8.0 в Windows 10, мені просто допомагає network.host у файлі elasticsearch.yml.
DLyons

Відповіді:


81

За замовчуванням він повинен прив'язуватися до всіх локальних адрес. Таким чином, передбачається , що ви не маєте проблеми на мережевому рівні з міжмережевими екранами, тільки ES настройки я можу думати перевірити, network.bind_hostі переконайтеся , що він або не встановлений або встановлений в 0.0.0.0або ::0або на правильний IP - адреса для вашої мережі.

Оновлення: за коментарями в ES 2.3 слід встановити network.hostзамість цього.


11
Мені довелося чітко встановити network.bind_hostзначення, залишаючи його невідомим - це моя проблема.
joe

як явно встановити network.bind_host у Windows?
Rizwan Patel

Ви впевнені, що це безпечно? Я думаю, що право - це доступ лише з локального сервера.
Ліко

Ну, у більшості випадків це безпечно. Але так, саме тому пункт про "правильну IP-адресу для вашої мережі" є.
Ендрю Білий

3
Як зазначено нижче, "network.bind_host" тепер "network.host" для
гумового пошуку

78

Відредагуйте /etc/elasticsearch/elasticsearch.ymlта додайте наступний рядок:

network.host: 0.0.0.0

Це "скасує" цей параметр і дозволить з'єднання з іншими IP-адресами.


1
Це працювало для мене, дякую! Однак на моєму Mac, конфігураційний файл розташований на /Applications/elasticsearch-2.1.1/config/elasticsearch.yml, а параметр, який я повинен був редагувати network.host, - ні network.bind_host.
bjornte

8
у elastsearch 2.2 параметр називається network.host
Orr

цей файл /etc/elasticsearch/elasticsearch.yml повинен бути в контейнері Docker?
Ашиш Карпе

2
Це вирішує для мене, я використовую еластичний пошук-6.0.0, що працює всередині контейнера докера. Після зміни конфігурації я зараз можу отримати доступ до curl http://172.17.0.2:9200. Ви розпізнаєте, що це найпоширеніша ip-адреса докера.
truthadjustr

1
network.host: 0.0.0.0 - не допомагають, але цей виняток я отримую від cerebro
Mindaugas K.

29

Спробував усе на цій сторінці, і лише інструкції звідси допомогли.

в /etc/default/elasticsearch, переконайтеся , що це не-коментар:

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

переконайтеся, що /var/lib/elasticsearchналежить користувачеві elasesearch:

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

1
Була така ж проблема, і рішення було просто chown -R elasticsearch:elasticsearch /var/lib/elasticsearch/і не коментувалосяSTART_DAEMON=true
Estevex

1
для мене це рішення + sudo systemctl restart elasticsearchяк відповів @kalanit, вирішило проблему
Saber

1
Це єдине рішення, яке допомогло мені на Ubuntu 16.04.
Snehal

21

У моєму випадку було розпочато еластичний пошук. Але все-таки мав

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

Наступна команда була невдалою

sudo service elasticsearch restart

Для того, щоб це працювало, мені довелося замість нього бігати

sudo systemctl restart elasticsearch

Потім все пішло нормально.


1
Проблема, яку я отримав, точно збігається з вашим, і ваше рішення працює на мене. Дуже дякую!
шаош

6
Я також повинен був зробити sudo systemctl enable elasticsearch.
Макс-чиститель

Я отримав те саме питання, але не міг зрозуміти, чому systemctlроботи та сервіс не роблять?
Luv33preet

@ Luv33preet systemctl працює від systemd і є зовсім іншою програмою
haff

Перезапуск сервісу працював для мене на Ubuntu 16.04 та еластичний пошук 1,74
racl101

19

Чому б не почати з цього командного рядка:

$ sudo service elasticsearch status

Я це зробив і отримав:

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

Потім я відредагував /etc/elasticsearch/jvm.optionsфайл:

...

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

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

#-Xms2g
#-Xms2g

-Xms512m
-Xmx512m

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

...

Це спрацювало як шарм.


Це, мабуть, дає ту саму інформацію, що і відповідь 22 березня bu @ Jefferson.macedo. Нова відповідь не повинна просто переписувати наявні подробиці, вона повинна надавати нову та корисну інформацію.
AdrianHHH

17

Жодне із запропонованих тут рішень не працювало для мене, але те, що в кінцевому підсумку спрацювало, було додати наступне elasticsearch.yml

network:
  host: 0.0.0.0
http:
  port: 9200

Після цього я перезапустив службу, і тепер я можу curlїї як з VM, так і зовні. З якоїсь дивної причини мені довелося спробувати кілька різних варіантів curlвиклику всередині VM, перш ніж воно працювало:

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

Примітка. Я використовую Elasticsearch 5.5 для Ubuntu 14.04


1
Ви рятувальник. Це єдине, що працювало для мене після прочитання різних публікацій.
Ю Чен

1
так, дуже корисно, це єдине, що працювало і для мене!
осеголь

Дякую, я спробував ваше рішення, і воно спрацювало. Що мені здалося дивним, адже мені просто довелося скаментувати номер порту. Я подумав, що коментовані рядки схожі на заздалегідь задані значення за замовчуванням
zwep

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

переконайтеся, що сервер запущений. Я бачив цю проблему, коли на моїй віртуальній машині була занадто запалена оперативна пам'ять, і її не вдалося запустити.

sudo systemctl status elasticsearch

вищесказане покаже, чи справді працює es.


4
Перевірте stackoverflow.com/questions/29447434/…, щоб допомогти вирішити цю проблему.
Райан Міллер

8

Для цієї проблеми мені довелося використовувати: sudo /usr/share/elasticsearch/bin/elasticsearch start

мати можливість отримати щось на порти 9200/9300 (sudo netstat -ntlp) та відповідь на:

curl -XGET http://localhost:9200


1
Дякую. Це для версій ElasticSearch 1. ~.
MontrealDevOne

перевіряючи стан, повідомлення про помилку не допомагає. лише при запуску файлу бін вручну він дає правильне повідомлення про помилку.
sulaiman sudirman

6

Відредагуйте elasticsearch.ymlта додайте наступний рядок

http.host: 0.0.0.0

network.host: 0.0.0.0 не працював


3

Відкрийте Dockerfile під elasticsearch папки і поновлення "network.host = 0.0.0.0" з "network.host = 127.0.0.1" . Потім перезавантажте контейнер. Перевірте свій зв’язок із завитком.

$ 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

У мене була така ж проблема відмови від з'єднань на порту 9200. Перевірте стан служби elasesearch за допомогою команди sudo service elasticsearch status. Якщо він представляє помилку, і ви читаєте що-небудь, що стосується Java, ймовірно, проблема полягає у вашій jvm пам'яті. Ви можете відредагувати його /etc/elasticsearch/jvm.options. Для оперативної пам'яті на 1 Гб оперативної пам’яті в середовищі Amazon я зберігав конфігурацію:

-Xms128m
-Xmx128m

Після встановлення цього пункту та перезапуску еластичного пошукового сервісу він працював як принадність. Перевірка Nmap та UFW (якщо ви використовуєте локальний брандмауер) також повинна бути корисною.


1
Це те, що зробило це для мене. У мого конфігурації було 1 г для обох, і екземпляр AWS (t2.micro) не міг виділити йому стільки пам'яті. Команди запуску та перезапуску не вдалися безшумно, але команда стану детально пояснила помилку.
Грег Чарльз

2

У мене виникло подібне питання.

Ось як я це вирішив

Запустіть команду служби нижче, щоб запустити ElasticSearch

sudo service elasticsearch start

АБО

sudo systemctl start elasticsearch

Якщо ви все-таки отримаєте помилку

curl: (7) Не вдалося підключитися до порту localhost 9200: Підключення відмовлено

Запустіть команду служби нижче, щоб перевірити стан ElasticSearch

sudo service elasticsearch status

АБО

sudo systemctl status elasticsearch

Якщо ви отримаєте відповідь ( Активна: активна (запущена) ), як описана нижче, то ElasticSearch активний і працює

● plasticsearch.service - Elasticsearch Loaded: завантажений (/usr/lib/systemd/system/elasticsearch.service; вимкнено; попередньо встановлений постачальник: увімкнено) Активний: активний (працює) з сб 2019-09-21 11:22:21 WAT; 3 роки тому

Потім ви можете перевірити, чи працює ваш вузол Elasticsearch , відправивши запит HTTP на порт 9200 на localhost, скориставшись командою нижче:

curl http://localhost:9200

В іншому випадку, якщо ви отримаєте відповідь іншої відповіді, вам, можливо, доведеться додатково налагодити її, щоб виправити її, але виконання команди нижче, допоможе вам виявити, які застереження містять службу ElasticSearch від запуску.

sudo service elasticsearch status

АБО

sudo systemctl status elasticsearch

Якщо ви хочете зупинити службу ElasticSearch , просто запустіть команду служби нижче;

sudo service elasticsearch stop

АБО

sudo systemctl stop elasticsearch

N / B: Можливо, вам доведеться запускати команду sudo service elasticsearch status АБО sudo systemctl status elasticsearch кожен раз, коли ви виявляєте помилку, щоб повідомити про стан служби ElasticSearch .

Це стосується і Kibana , запускайте команду sudo service kibana status АБО sudo systemctl status kibana кожен раз, коли ви стикаєтесь з помилкою, щоб повідомити про стан Кібани .

Це все.

Я сподіваюся, що це допомагає.


1

У цьому випадку насамперед потрібно перевірити версію java за допомогою команди нижче:

java -version

Після запуску цієї команди ви отримуєте щось подібне:

java версія "1.7.0_51" середовище виконання OpenJDK (rhel-2.4.5.5.el7-x86_64 u51-b31) 64-бітний сервер VM OpenJDK (збірка 24.51-b03, змішаний режим)

потім використовуйте цю команду:

update-alternatives --config java

і виберіть нижченаведену версію

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

Введіть, щоб зберегти поточний вибір [+], або введіть номер вибору: 2

curl -XGET http://127.0.0.1:9200

1

Мої 2 копійки,

Я щойно дотримувався процедури встановлення Digital Digital, мабуть, пакет, доступний у репост, не є актуальним, я видалив усе та дотримувався процедури встановлення безпосередньо з Elastic Search, і все працює зараз, в основному, поза поведінкою місцевий хост, який вказує на 9200. Те саме / проблема, знайдена з Kibana, для мене також було рішення, щоб видалити все і просто дотримуватися їх процедури. Сподіваюсь, це заощадить когось дві години (час, який я витратив на пошук способу налаштування ELK!)

en


1

Оновіть jdk до останньої мінімальної версії для вашого еластичного пошуку.


1

Змініть network.bind на 0.0.0.0, а http: порт - на 9200. Адреса зв’язування 0.0.0.0 означає всі IPv4 адреси на локальній машині. Якщо хост має дві IP-адреси, 192.168.1.1 і 10.1.2.1, а сервер, який працює на хості, слухає 0.0.0.0, він буде доступний для обох цих IP-адрес.


1

Якщо ви зіткнулися з помилкою підключення , просто запустіть команду нижче, щоб перевірити стан служби ElasticSearch

sudo service elasticsearch status

Це допоможе розшифрувати стан служби ElasticSearch та що з цим робити.



0

Використовуючи деякі відповіді, наведені вище, не забувайте, що після влучної установки, може бути повна перезавантаження.


0

Просто для додання цього, я натрапив на багато документів через google, який сказав встановити network.host на localhost.

Це дало мені сумнозвісний зв’язок відмовився. Потрібно використовувати IP-адресу (127.0.0.1), а не FQDN.

Джефф


0

Переконайтеся, що порт 9200відкритий для мого випадку, це був екземпляр Amazon, тому коли я відкрив його в своїй групі безпеки, команда curl працювала.



0

Моя проблема полягала в тому, що я не міг працювати, localhostмені потрібно було встановити його на IP-адресу localhost

network.bind_host: 127.0.0.1


0

У моєму випадку проблема полягає у версії java, яку я встановив open-jdk 11раніше. Це створює проблему під час запуску послуги. Я змінив це, open-jdk 8і воно почало працювати

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.