2013-08-28 2 views
5

У меня есть установка по умолчанию для elasticsearch, которую я пытаюсь запросить с стороннего сервера. Однако кажется, что по умолчанию это заблокировано.Разрешающий удаленный доступ к Elasticsearch

Кто-нибудь может рассказать мне, как я могу настроить elasticsearch, чтобы я мог запросить его с другого сервера?

Любая помощь будет высоко оценена.

Джеймс

ответ

1

Когда elasticsearch установлен и запускается без каких-либо изменений конфигурации по умолчанию, он привязывается только к локальному хосту. Чтобы удаленно получить доступ к конечной точке API-интерфейса elasticsearch, приведенные ниже изменения должны быть сделаны на сервере, на котором установлен elasticsearch.

  • Конфигурация Elasticsearch Изменить Update network.host недвижимости в elasticsearch.yml в соответствии с указаниями, приведенными в документации elasticsearch Например, чтобы связать для всех IPv4-адресов на локальном компьютере, изменения, как показано ниже сети. host: 0.0.0.0

  • Обновление правил брандмауэра Обновление брандмауэра Linux для доступа к порту 9200. Пожалуйста, обратитесь к документации по Linux для добавления правил в брандмауэр.

Например, чтобы разрешить доступ ко всем серверам (общественного) в CentosOS использовать брандмауэр-CMD $ SUDO брандмауэр-CMD --zone = общественный --permanent --add-порт = 9200/TCP успех $ sudo firewall-cmd --reload Успех

Примечание: В производственной среде доступ общественности не рекомендуется. Предпочтительным должен быть ограниченный доступ.

1

Там нет ограничений по умолчанию, ElasticSearch выставить стандартный HTTP API на порт 9200.

С вашего сервера сторонних производителей вы можете: curl http://es_hostname:9200/?

+0

Damien - вы обряд. нет ограничений по умолчанию. – naren

+1

Там ** есть ** ограничение для IPv4. Стандартный API отвечает за локальные тесты. Не удаленные тесты. –

+0

С ES> 2.0 есть новое ограничение, настройте network.host (теперь у вас есть специальные ключевые слова, такие как «_local_» и «_site_»). – Damien

2

Редактировать: Как упоминает Sisso в своем комментарии ниже, Elasticsearch в 2,0, по меньшей мере связывается локальный по умолчанию. См. https://www.elastic.co/guide/en/elasticsearch/reference/2.0/modules-network.html для получения дополнительной информации.


Как Damien упоминает в своем ответе, по умолчанию ES позволяет любой доступ к порту 9200. На самом деле вам необходимо использовать внешние инструменты для обеспечения аутентификации ресурса ES - что-то вроде интерфейса webapp или просто простого nginx с включенным Basic Auth.

Вещи, которые могут помешать вам получить доступ к удаленной системе (вы, наверное, знаете это):

  • конфигурации сети проблемы
  • брандмауэр блокирует
  • ES принимающие входящие запросы на порт 9200
  • блокирует удаленный брандмауэр хоста исходящие запросы на хост ES и/или порт 9200
  • ES настроен на привязку к неправильному IP-адресу (по умолчанию, однако, он связывается со всеми доступными IP-адресами)

Лучшее мнение? Убедитесь, что вы можете подключиться с удаленного хоста к ES-хосту, а затем проверить брандмауэр в обеих системах. Если вы не можете диагностировать дальше, может помочь кто-то из списка рассылки ES (https://groups.google.com/forum/#!forum/elasticsearch) или IRC-канала (#elasticsearch on Freenode).

+2

Я не думаю, что это все еще так. Текущая версия привязывается только к localhost. https://www.elastic.co/guide/en/elasticsearch/reference/2.0/modules-network.html – Sisso

3

В config/elasticsearch.yml, поместите network.host: 0.0.0.0. А также добавьте входящее правило в брандмауэре для вашего порта ElasticSearch (9200 ByDefault). Он работал в ElasticSearch версии 2.3.0

1

Чтобы разрешить удаленный доступ с одного узла по умолчанию, settings\elasticsearch.yml должен иметь:

network.host: 0.0.0.0 
http.port: 9200 

Мой случай мне нужно три экземпляра. Для каждого экземпляра необходимо указать также диапазон портов.

network.host: 0.0.0.0 
http.port: 9200-9202 
Смежные вопросы