Конфигурация обнаружения сервера Elasticsearch
я установил сервер ElasticSearch, который я запускаю:
$ ./elasticsearch -f
{0.18.2}[11698]: initializing ...
loaded [], sites []
{0.18.2}[11698]: initialized
{0.18.2}[11698]: starting ...
bound_address {inet[/0:0:0:0:0:0:0:0:9300]}, publish_address {inet[/192.168.1.106:9300]}
new_master [Stingray][ocw4qPdmSfWuD9pUxHoN1Q][inet[/192.168.1.106:9300]], reason: zen-disco-join (elected_as_master)
elasticsearch/ocw4qPdmSfWuD9pUxHoN1Q
recovered [0] indices into cluster_state
bound_address {inet[/0:0:0:0:0:0:0:0:9200]}, publish_address {inet[/192.168.1.106:9200]}
{0.18.2}[11698]: started
как я могу настроить клиент Java для подключения к этому серверу? Я только что:
node.client=true
но, после попытки подключения я получаю:
org.elasticsearch.discovery.MasterNotDiscoveredException:
at org.elasticsearch.action.support.master.TransportMasterNodeOperationAction.onTimeout(TransportMasterNodeOperationAction.java:162)
если я настраиваю клиент java как:
node.data=false
я получаю следующие журналы:
INFO main node:internalInfo:93 - [Stark, Tony] {0.18.2}[13008]: starting ...
INFO main transport:internalInfo:93 - [Stark, Tony] bound_address {inet[/0:0:0:0:0:0:0:0:9301]}, publish_address {inet[/192.168.1.106:9301]}
INFO elasticsearch[Stark, Tony]clusterService#updateTask-pool-13-thread-1 service:internalInfo:93 - [Stark, Tony] new_master [Stark, Tony][WkNn96hgTkWXRnsR0EOZjA][inet[/192.168.1.106:9301]]{data=false}, reason: zen-disco-join (elected_as_master)
как я понял, это означает, что этот новый узел (предположительно клиентский узел) сделал себя новым главным узлом. и я не из журнала, что он найден и подключается к любому другому узлу.
сервер и клиент запущены на одной машине. 192.168.1.106:9200 доступны из браузера.
и я не могу найти хорошую документацию о конфигурации обнаружения. Где я могу узнать больше о конфигурациях ElasticSearch? И как настроить Java-клиент?
6 ответов
столкнулся с той же проблемой, когда узлы не смогли выбрать мастер на перезапуске узлов.
проблема заключается в связи узлов между собой.
пожалуйста, убедитесь в своих журналах эластичного поиска, говорит ли перезапуск узла
publish_address {127.0.0.1:9200}
or
publish_address {0.0.0.1:9200}
это означает, что текущий узел не публикует свой IP-адрес другим узлам, и, следовательно, узлы не распознают этот узел, даже если IP-адрес узла может присутствовать в открытие.дзен.свистеть.одноадресный.хозяева
решение Внесите следующие изменения в elasticsearch.в формате YML. Добавить
network.host: _non_loopback:ipv4_
and restart the node.
Ensure that the bound address now shows the <IP address>:<port no> and not the localhost.
Это означает, что теперь ваш узел доступен. Второй шаг, чтобы сделать его обнаруживаемым в кластере, - это добавить ip-адрес узла в списки одноадресных хостов всех главных узлов, чтобы каждый раз, когда у нас есть новый мастер, узел обнаруживался новому мастеру.
Add the node IP to the discovery.zen.ping.unicast.hosts
list of hosts of all the masters to make it disoverable. A masterpings all the
nodes present in the unicast list.
наиболее вероятной причиной этого сбоя является брандмауэр на вашем компьютере, который блокирует многоадресный трафик обнаружения на порту 54328. И клиент и мастер передают на этом порту во время первоначального обнаружения, и они не слышат друг от друга. Вот почему, когда вы указываете node.клиент=истинный клиентский узел (который не может быть мастером) терпит неудачу с MasterNotDiscoveredException и узел без данных выбирает себя в качестве мастера.
я столкнулся с той же проблемой и, используя IP-номера в файле конфигурации, решил ее для меня.
in/config / elasticsearch.в формате YML
раскомментировать и изменить сеть.установка хоста в:
network.host: 127.0.0.1
вы также можете изменить это на свой IP-номер машины в ifconfig.
У меня была та же проблема. В конце концов, оказалось, что у меня была проблема с брандмауэром, с моим брандмауэром (на Ubuntu), блокирующим порты ElasticSearch. Я использую брандмауэр по умолчанию на Ubuntu,ufw.
Итак, чтобы открыть порты, я запускаю эти команды в терминале:
sudo ufw allow proto tcp to any port 9200:9400
sudo ufw allow proto tcp to any port 54328
мой кластер работает локально на 9200, и все мои клиенты на 9300+. Итак, я только что открыл для них диапазон 9200-9400. 54328 предназначен для многоадресной трансляции.
просто чтобы быть полным: я также использовал TransportClient, который работает, но я добавил жестко закодированный localhost к адресу, на котором будет работать TransportClient. Не очень хорошо для производственного кода: -)
что-то вроде этого должно работать:
Settings s = ImmutableSettings.settingsBuilder()
.put(this.settings)
.build();
TransportClient client = new TransportClient(s);
client.addTransportAddress(new InetSocketTransportAddress(
"localhost",
9300)
);
что меня запутало, так это то, что я изначально пытался подключить клиента к 9200, а не 9300. Руководство по настройкам выше можно найти изhttp://www.elasticsearch.org/guide/reference/java-api/client.html