Кластерное соединение Elasticsearch через Java API при сбое главного узла

У меня есть кластер Elasticsearch из 10 узлов. При подключении к кластеру через Java API я подключаюсь только к главному узлу.

TransportClient client = new PreBuiltTransportClient(Settings.EMPTY)
        .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("masterNode"), 9300));

В случае сбоя главного узла моя программа автоматически подключится к следующему главному узлу? Что если мне придется перезапустить программу Java после сбоя исходного главного узла?

1 ответ

Решение

Для клиента TransportClient есть настройка сниффа для клиента:

  1. Режимclient.transport.sniff имеет значение false, клиент будет пытаться подключить только настроенные IP-адреса, как:

    addTransportAddress (новый InetSocketTransportAddress(InetAddress.getByName("masterNode"), 9300));

  2. Режим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

Другие вопросы по тегам