Кластерное соединение Elasticsearch через Java API при сбое главного узла
У меня есть кластер Elasticsearch из 10 узлов. При подключении к кластеру через Java API я подключаюсь только к главному узлу.
TransportClient client = new PreBuiltTransportClient(Settings.EMPTY)
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("masterNode"), 9300));
В случае сбоя главного узла моя программа автоматически подключится к следующему главному узлу? Что если мне придется перезапустить программу Java после сбоя исходного главного узла?
1 ответ
Для клиента TransportClient есть настройка сниффа для клиента:
Режимclient.transport.sniff имеет значение false, клиент будет пытаться подключить только настроенные IP-адреса, как:
addTransportAddress (новый InetSocketTransportAddress(InetAddress.getByName("masterNode"), 9300));
Режимclient.transport.sniff имеет значение true, и клиент сначала должен подключиться к настроенным IP-адресам, а с помощью API-интерфейса статистики - обнаружить доступные узлы данных кластера, чтобы динамически добавлять новые хосты и удалять старые.(Обратите внимание: если ваш кластер с вашим клиентским приложением имеет В другой сети возникнет проблема подключения к узлу данных кластера), так как:
Настройки настроек = Settings.settingsBuilder() .put("client.transport.sniff", true).build(); Клиент TransportClient = новый PreBuiltTransportClient(настройки);
Так что, как и ваш вопрос, когда настройки сниффа имеют значение true и они находятся в одной сети, ваш подключенный узел вышел из строя, он все еще может подключаться к кластеру.
Ссылка: https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.0/transport-client.html