Ошибка Elasticsearch curl: (7) Не удалось подключиться к локальному порту 9200: соединение отклонено, но локальный хост: 9200 работает в браузере

Я пытаюсь подключить Elasticsearch 5.5.2 к проекту Django 2, следуя этому руководство :

При запуске: curl -X GET 'http://localhost:9200' на терминале я получил эту ошибку: curl: (7) Failed to connect to localhost port 9200: Connection refused, в то время как localhost:9200 очень хорошо работает в моем браузере.

Вот обзор моего файла elasticsearch.yml:

# Use a descriptive name for your cluster:
#
#cluster.name: my-application
#
# Use a descriptive name for the node:
#
#node.name: node-1
#
# Add custom attributes to the node:
#
#node.attr.rack: r1
#
# Path to directory where to store the data (separate multiple locations by comma):
#
#path.data: /path/to/data
#
# Path to log files:
#
#path.logs: /path/to/logs
#
# Lock the memory on startup:
#
#bootstrap.memory_lock: true

# Elasticsearch performs poorly when the system is swapping the memory.
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: 0.0.0.0
#
# Set a custom port for HTTP:
#
#http.port: 9200
#
# Pass an initial list of hosts to perform discovery when new node is started:
# The default list of hosts is ["127.0.0.1", "[::1]"]
#
#discovery.zen.ping.unicast.hosts: ["host1", "host2"]
#
# Prevent the "split brain" by configuring the majority of nodes (total number of master-eligible nodes / 2 + 1):
#
#discovery.zen.minimum_master_nodes: 3
#
# For more information, consult the zen discovery module documentation.
#
# ---------------------------------- Gateway -----------------------------------
#
# Block initial recovery after a full cluster restart until N nodes are started:
#
#gateway.recover_after_nodes: 3
#
# For more information, consult the gateway module documentation.
#
# ---------------------------------- Various -----------------------------------
#
# Require explicit names when deleting indices:
#
#action.destructive_requires_name: true

/var/log/elasticsearch/ пусто.

Пожалуйста, что не так с curl?


person kabrice    schedule 21.02.2018    source источник
comment
Вроде все в порядке... Можешь попробовать http://127.0.0.1:9200? Ваш браузер может выполнять для вас какое-то разрешение локального хоста, которого может не быть в вашем /etc/hosts или что-то в этом роде.   -  person wholevinski    schedule 21.02.2018
comment
Можете ли вы также выполнить sudo netstat -anp | grep 9200, чтобы убедиться, что он прослушивает коробку, из которой вы пытаетесь выполнить завивку?   -  person wholevinski    schedule 21.02.2018
comment
Попытка http://127.0.0.1:9200 ничего не дает. sudo netstat -anp | grep 9200 ничего не показывает :(   -  person kabrice    schedule 21.02.2018
comment
Хорошо, тогда похоже, что вы пытаетесь скручиваться из другого ящика. У вас что-нибудь работает на виртуальной машине? Докер-контейнер? Что вы получаете, когда заходите на него в браузере?   -  person wholevinski    schedule 21.02.2018
comment
Я использую virtualenv и Ubuntu 16.04 с vagrant. Когда я захожу в браузер, я получаю { "name" : "Payback", "cluster_name" : "elasticsearch", "cluster_uuid" : "cXwea1mHQyeQrUCTF2lVJg", "version" : { "number" : "2.4.6", "build_hash" : "5376dca9f70f3abef96a77f4bb22720ace8240fd", "build_timestamp" : "2017-07-18T12:17:44Z", "build_snapshot" : false, "lucene_version" : "5.5.4" }, "tagline" : "You Know, for Search" }   -  person kabrice    schedule 21.02.2018
comment
/var/log/elasticsearch/ не существует. Я установил elasticsearch с python (pip)   -  person kabrice    schedule 21.02.2018
comment
Попробуйте посетить http://localhost:9200/_nodes в своем браузере. Затем посетите http://localhost:9200/_nodes/{node_name} на основе возвращенных узлов. Это должно дать вам информацию о работающем узле. Затем проверьте IP-адрес ящика, который вы пытаетесь получить с помощью ifconfig -a. Рискну предположить, что IP-адреса не совпадают.   -  person wholevinski    schedule 21.02.2018
comment
Вот первые строки http://localhost:9200/_nodes/: {"cluster_name":"elasticsearch","nodes":{"hSQhDjeHQFqx0FJf1iTwkQ":{"name":"Payback","transport_address":"10.0.2.15:9300","host":"10.0.2.15","ip":"10.0.2.15","version":"2.4.6","build":"5376dca","http_address":"10.0.2.15:9200","settings":{"pidfile":"/var/run/elasticsearch/elasticsearch.pid","cluster":{"name":"elasticsearch"}   -  person kabrice    schedule 21.02.2018
comment
IP-адрес при выполнении ifconfig -a: 10.0.2.15. Нужна другая информация?   -  person kabrice    schedule 21.02.2018
comment
Можете ли вы добавить -4 к своей команде curl, чтобы принудительно использовать IPv4? После этого у меня закончились идеи...   -  person wholevinski    schedule 21.02.2018
comment
Все равно получите curl: (7) Failed to connect to localhost port 9200: Connection refused   -  person kabrice    schedule 21.02.2018
comment
Не могли бы вы опубликовать вывод статуса эластичного поиска службы sudo?   -  person Lupanoide    schedule 21.02.2018
comment
Вот начало того, что у меня есть: elasticsearch.service - Elasticsearch Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; bad; vendor preset: enabled) Active: failed (Result: exit-code) since Wed 2018-02-21 06:27:04 UTC; 9h ago Docs: http://www.elastic.co Main PID: 1691 (code=exited, status=1/FAILURE)   -  person kabrice    schedule 21.02.2018
comment
Следующие строки: Feb 21 06:27:04 ubuntu-xenial elasticsearch[1691]: Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x000000008a660000, 1973026816, 0) failed; error='Cann Feb 21 06:27:04 ubuntu-xenial elasticsearch[1691]: # Feb 21 06:27:04 ubuntu-xenial elasticsearch[1691]: # There is insufficient memory for the Java Runtime Environment to continue. Feb 21 06:27:04 ubuntu-xenial elasticsearch[1691]: # Native memory allocation (mmap) failed to map 1973026816 bytes for committing reserved memory. и так далее...   -  person kabrice    schedule 21.02.2018


Ответы (3)


ok eureka !, у вас ошибка пространства кучи java. Посмотрите на эту ошибку:

# There is insufficient memory for the Java Runtime Environment to continue

Вы можете увеличить/уменьшить - я не знаю, возникает ли проблема из-за того, что на вашей машине слишком мало оперативной памяти, и es не может запуститься, или вы выделили слишком мало оперативной памяти для es - пространство, выделенное для эластичности в виртуальной машине Java, редактирующей этот файл /etc/elasticsearch/jvm.options Чтобы выделить 2 ГБ оперативной памяти, вы должны изменить:

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

 -Xms2g
 -Xmx2g

Затем вам нужно перезапустить службу

sudo service elasticsearch restart

И попробуйте еще раз с завитком

person Lupanoide    schedule 21.02.2018
comment
/etc/elasticsearch/ не существует! Я установил elasticsearch с pip install elasticsearch==5.5.2 - person kabrice; 21.02.2018
comment
Хорошо, вы установили библиотеку Python для управления запросами в elasticsearch. Но вы также установили пакет elasticsearch — deb или tar.gz — на локальном хосте, потому что у вас активна служба elasticsearch — она отвечает на статус sudo службы elasticsearch и на localhost:9200/_nodes, и вы можете визуализировать localhost:9200 в браузере. Библиотека ES python не является ES DB! одна — клиентская библиотека высокого уровня, а другая — сервер ES. - person Lupanoide; 21.02.2018
comment
машина, на которой нет /etc/elasticsearch, — это та же самая машина, которая отвечает на ввод статуса sudo service elasticsearch? - person Lupanoide; 21.02.2018
comment
Да, я работаю с бродягой, где я создал Ubuntu Virtualen - person kabrice; 21.02.2018
comment
Ах хорошо. Я не знаю, как работает Ubuntu Virtualen. Вероятно, пути на virtualenv разные. И я не могу помочь вам в этом, извините - person Lupanoide; 21.02.2018
comment
У меня есть другая идея... где твой elasticsearch.yml? jvm.options находится в той же папке - person Lupanoide; 21.02.2018
comment
Я только что узнал, что Elasticsearch не установлен. Но это очень странно, потому что http://localhost:9200/ продолжают работать и отображать информацию в моем браузере Windows, пока я закрываю vagrant. - person kabrice; 21.02.2018
comment
Перезагрузив компьютер и используя ваш метод, все заработало. Спасибо за ваше время - person kabrice; 22.02.2018

В моем случае проблема связана с версией Java, я ранее установил open-jdk 11. Это создает проблему при запуске службы. Я изменил его на open-jdk 8, и он начал работать

curl localhost:9200
{
  "name" : "My First Node",
  "cluster_name" : "mycluster1",
  "version" : {
    "number" : "2.3.1",
    "build_hash" : "bd980929010aef404e7cb0843e61d0665269fc39",
    "build_timestamp" : "2016-04-04T12:25:05Z",
    "build_snapshot" : false,
    "lucene_version" : "5.5.0"
  },
  "tagline" : "You Know, for Search"
}

person Satyaaditya    schedule 30.10.2019

У меня была та же проблема, но не та же причина, на которую ответил Лупаноид. Добавляю свои выводы для других.

Я также получал отказ в подключении по ip: 9200, но localhost: 9200 работал. Когда я попробовал «network.host: 0.0.0.0», служба не запустилась. Я изменил значение на «http.host», как показано ниже, и это позволило службе запускаться и вызываться через ip.

/etc/elasticsearch/elasticsearch.yml

# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
http.host: 192.168.1.199
#
# Set a custom port for HTTP:
#
http.port: 9200
#

До:

[root@Loki-03 ~]# curl localhost:9200
    "name" : "Loki-03"

[root@Loki-03 ~]# curl 192.168.1.199:9200
curl: (7) Failed to connect to 192.168.1.199 port 9200: Connection refused

После:

[root@Loki-03 ~]# systemctl restart elasticsearch.service 
[root@Loki-03 ~]# curl 192.168.1.199:9200
    {
      "name" : "Loki-03",

Надеюсь это поможет. Кроме того, я бегу:

  "version" : {
    "number" : "7.4.0",
    "build_flavor" : "default",
    "build_type" : "rpm",
    "build_hash" : "22e1767283e61a198cb4db791ea66e3f11ab9910",
    "build_date" : "2019-09-27T08:36:48.569419Z",
    "build_snapshot" : false,
    "lucene_version" : "8.2.0",
person Edwrd_T_Justice    schedule 04.10.2019