Elasticsearch: не удалось подключиться к порту localhost 9200 - в соединении отказано


110

Когда я попытался подключиться к Elasticsearch с помощью, curl http://localhost:9200он работал нормально.

Но когда я запускаю, curl http://IpAddress:9200он выдает ошибку, говоря

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

Как устранить эту ошибку?


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

По крайней мере, используя Elasticsearch 7.8.0 в Windows 10, мне подходит просто раскомментирование network.host в файле elasticsearch.yml.
DLyons

Ответы:


82

По умолчанию он должен быть привязан ко всем локальным адресам. Итак, если у вас нет проблемы сетевого уровня с брандмауэрами, единственный параметр ES, который я могу проверить, - это network.bind_hostубедиться, что он либо не установлен, либо установлен на 0.0.0.0или ::0или на правильный IP-адрес для вашей сети.

Обновление: network.hostвместо комментариев в ES 2.3 вы должны установить .


11
Мне пришлось явно установить network.bind_hostзначение, и моя проблема заключалась в том , чтобы оставить его неустановленным.
Джо

как явно установить network.bind_host в окнах?
Ризван Патель,

Вы уверены, что это безопасно? Я считаю правильным доступ только с локального сервера.
Liko

Что ж, в большинстве случаев это безопасно. Но да, именно поэтому здесь есть пункт «правильный IP-адрес для вашей сети».
Эндрю Уайт

3
Как указано ниже "network.bind_host" теперь "network.host" для elasticsearch 2.3
bkunzi01 06

79

Отредактируйте /etc/elasticsearch/elasticsearch.ymlи добавьте следующую строку:

network.host: 0.0.0.0

Это «сбросит» этот параметр и разрешит соединения с других IP-адресов.


1
У меня это сработало, спасибо! Однако на моем Mac файл конфигурации находится по адресу /Applications/elasticsearch-2.1.1/config/elasticsearch.yml, а параметр, который мне пришлось редактировать, был network.hostnot network.bind_host.
bjornte

8
в elasticsearch 2.2 параметр называется network.host
Орр

этот файл /etc/elasticsearch/elasticsearch.yml должен находиться в контейнере Docker?
Ашиш Карпе

2
Это решает для меня, я использую elasticsearch-6.0.0, работающий внутри контейнера докеров. После изменения конфигурации я могу получить доступ через curl http://172.17.0.2:9200. Вы узнаете, что это обычно используемый IP-адрес докеров.
truthadjustr

1
network.host: 0.0.0.0 - не помогает, но это исключение я получаю от cerebro
Миндаугас К.

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принадлежит пользователю elasticsearch:

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, решило проблему
Sabre

1
Это единственное решение, которое помогло мне в Ubuntu 16.04.
Snehal

21

В моем случае был запущен elasticsearch. Но все еще имел

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

Следующая команда была неудачной

sudo service elasticsearch restart

Чтобы заставить его работать, мне пришлось вместо этого запустить

sudo systemctl restart elasticsearch

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


1
Проблема, которую я получил, точно такая же, как и у вас, и ваше решение работает для меня. Большое спасибо!
shaosh

6
Мне тоже пришлось сделать sudo systemctl enable elasticsearch.
max Pleaner

У меня такая же проблема, но я не могу понять, почему systemctlработает, а служба нет?
Luv33preet

@ Luv33preet systemctl питается от Systemd и это совершенно другая программа
Хафф

Перезапуск службы сработал для меня на 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ее как внутри виртуальной машины, так и извне. По какой-то странной причине мне пришлось попробовать несколько разных вариантов curlвызова внутри виртуальной машины, прежде чем он сработал:

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

Примечание: я использую Elasticsearch 5.5 в Ubuntu 14.04.


1
Вы палочка-выручалочка. Это единственное, что у меня сработало после прочтения множества разных сообщений.
Yu Chen

1
да, очень полезно, это единственное, что сработало и у меня!
osehgol

Спасибо, я попробовал ваше решение, и оно сработало. Что мне показалось странным, потому что мне просто нужно было раскомментировать номер порта. Я думал, что прокомментированные строки похожи на предопределенные значения по умолчанию
zwep

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

убедитесь, что сервер запущен. Я видел эту проблему, когда у моей виртуальной машины было слишком мало ОЗУ и es не мог запуститься.

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

проверка статуса, сообщение об ошибке не помогает. только при запуске bin-файла вручную отображается правильное сообщение об ошибке.
сулайман судирман 06

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.

$ 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. Проверьте статус службы elasticsearch с помощью команды sudo service elasticsearch status. Если он выдает ошибку и вы читаете что-либо, связанное с Java, вероятно, проблема в вашей памяти jvm. Вы можете редактировать его в формате /etc/elasticsearch/jvm.options. Для машины с оперативной памятью 1 ГБ в среде Amazon я сохранил свою конфигурацию:

-Xms128m
-Xmx128m

После настройки и перезапуска службы elasticsearch все заработало как шарм. Также должна быть полезна проверка Nmap и UFW (если вы используете локальный брандмауэр).


1
Вот что сделало это для меня. В моей конфигурации было 1g для обоих, и экземпляр 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

Если вы получили ответ ( Active: active (running) ), как показано ниже, значит ElasticSearch активен и работает.

● elasticsearch.service - Elasticsearch загружен: загружен (/usr/lib/systemd/system/elasticsearch.service; отключен; предустановка поставщика: включен) Active: активен (работает) с сб 2019-09-21 11:22:21 WAT; 3с назад

Затем вы можете проверить, работает ли ваш узел Elasticsearch , отправив HTTP-запрос на порт 9200 на локальном хосте, используя следующую команду:

curl http://localhost:9200

В противном случае, если вы получите другой ответ, вам может потребоваться дополнительная отладка, чтобы исправить это, но выполнение приведенной ниже команды поможет вам определить, какие предостережения удерживают запуск службы ElasticSearch .

sudo service elasticsearch status

ИЛИ

sudo systemctl status elasticsearch

Если вы хотите остановить службу ElasticSearch , просто выполните команду службы ниже;

sudo service elasticsearch stop

ИЛИ

sudo systemctl stop elasticsearch

Н / Д: вам может потребоваться запускать команду sudo service elasticsearch status ИЛИ sudo systemctl status elasticsearch каждый раз, когда вы сталкиваетесь с ошибкой, чтобы узнать состояние службы ElasticSearch .

Это также применимо к Kibana : запускайте команду sudo service kibana status ИЛИ sudo systemctl status kibana каждый раз, когда вы сталкиваетесь с ошибкой, чтобы узнать состояние службы Kibana .

Вот и все.

Надеюсь, это поможет.


1

В этом случае, прежде всего, вам нужно проверить версию Java, используя следующую команду:

java -version

после выполнения этой команды вы получите что-то вроде этого:

java версия "1.7.0_51" OpenJDK Runtime Environment (rhel-2.4.5.5.el7-x86_64 u51-b31) 64-разрядная серверная виртуальная машина 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/ Ява

Введите, чтобы сохранить текущий выбор [+], или введите номер выбора: 2

curl -XGET http://127.0.0.1:9200

1

Мои 2 цента,

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

en



1

Измените network.bind на 0.0.0.0 и http: port на 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), а не полное доменное имя.

Джефф


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.