Spec-Zone.ru › Elasticsearch 8
›Elasticsearch Руководство [8.17] ›Настройка Elasticsearch ›Обнаружение и формирование кластера

Обнаружение

Обнаружение — это процесс, с помощью которого модуль формирования кластера находит другие узлы для формирования кластера. Этот процесс запускается при запуске узла Elasticsearch или когда узел считает, что мастер-узел вышел из строя, и продолжается до тех пор, пока не будет найден мастер-узел или не будет выбран новый мастер-узел.

Этот процесс начинается со списка адресов семян из одного или нескольких поставщиков узлов-семян, а также с адресов любых узлов, имеющих право быть мастером, которые находились в последнем известном кластере. Процесс выполняется в две фазы: во-первых, каждый узел зондирует адреса семян, подключаясь к каждому адресу и пытаясь определить узел, к которому он подключен, и проверить, имеет ли он право быть мастером. Во-вторых, при успешном завершении он обменивается со удалённым узлом списком всех своих известных узлов, имеющих право быть мастером, и удалённый узел, в свою очередь, отвечает списком своих узлов. Затем узел зондирует все новые узлы, которые он только что обнаружил, запрашивает их узлы, и так далее.

Если узел не имеет права быть мастером, то он продолжает этот процесс обнаружения до тех пор, пока не обнаружит выбранный мастер-узел. Если выбранный мастер не обнаружен, узел повторит попытку через discovery.find_peers_interval, что по умолчанию равно 1s.

Если узел имеет право быть мастером, то он продолжает этот процесс обнаружения до тех пор, пока не обнаружит выбранный мастер-узел или же не обнаружит достаточно узлов, имеющих право быть мастером, но не являющихся мастерами, чтобы завершить выборы. Если ни одно из этих событий не произойдёт достаточно быстро, узел повторит попытку через discovery.find_peers_interval, что по умолчанию равно 1s.

После того, как мастер выбран, он обычно остается выбранным мастером до тех пор, пока его специально не остановят. Он также может перестать действовать как мастер, если обнаружение ошибок кластера определит, что кластер неисправен. Когда узел перестает быть избранным мастером, он снова начинает процесс обнаружения.

См. отладку обнаружения для устранения неполадок с обнаружением.

Поставщики узлов-семян

По умолчанию модуль формирования кластера предлагает два поставщика узлов-семян для настройки списка узлов-семян: поставщик узлов-семян на основе настроек и поставщик узлов-семян на основе файла. Он может быть расширен для поддержки облачных сред и других типов поставщиков узлов-семян с помощью плагинов обнаружения. Поставщики узлов-семян настраиваются с помощью настройки discovery.seed_providers, которая по умолчанию имеет значение поставщик узлов на основе настроек. Эта настройка принимает список различных поставщиков, что позволяет использовать несколько способов поиска узлов-семян для вашего кластера.

Каждый поставщик узлов-семян возвращает IP-адреса или имена хостов узлов-семян. Если он возвращает какие-либо имена хостов, они разрешаются в IP-адреса с помощью запроса DNS. Если имя хоста разрешается в несколько IP-адресов, Elasticsearch пытается найти узел-семя на всех этих адресах. Если поставщик узлов явно не указывает TCP-порт узла, он неявно использует первый порт в диапазоне портов, заданном transport.profiles.default.port или transport.port, если transport.profiles.default.port не задан. Количество одновременных запросов контролируется значением discovery.seed_resolver.max_concurrent_resolvers, которое по умолчанию равно 10, а таймаут для каждого запроса контролируется значением discovery.seed_resolver.timeout, которое по умолчанию равно 5s. Обратите внимание, что запросы DNS зависят от кэширования DNS JVM.

Поставщик узлов-семян на основе настроек

Поставщик узлов-семян на основе настроек использует настройку узла для конфигурации статического списка адресов узлов-семян. Эти адреса могут быть заданы как имена хостов или IP-адреса; хосты, заданные как имена хостов, разрешаются в IP-адреса во время каждого цикла обнаружения.

Список хостов задаётся с помощью статической настройки discovery.seed_hosts. Например:

discovery.seed_hosts:
   - 192.168.1.10:9300
   - 192.168.1.11 
   - seeds.mydomain.com 

Порт по умолчанию будет transport.profiles.default.port, а в качестве резервного будет использоваться transport.port, если он не указан.

Если имя хоста разрешается в несколько IP-адресов, Elasticsearch попытается подключиться ко всем разрешенным адресам.

Поставщик узлов-семян на основе файла

Поставщик узлов-семян на основе файла настраивает список узлов через внешний файл. Elasticsearch перезагружает этот файл при его изменении, так что список узлов-семян может динамически меняться без необходимости перезапуска каждого узла. Это, например, удобный механизм для экземпляра Elasticsearch, выполняемого в контейнере Docker, для динамического получения списка IP-адресов для подключения, когда эти IP-адреса могут быть неизвестны при запуске узла.

Для включения обнаружения на основе файла настройте поставщик узлов file следующим образом в файле elasticsearch.yml:

discovery.seed_providers: file

Затем создайте файл по адресу $ES_PATH_CONF/unicast_hosts.txt в формате, описанном ниже. Всякий раз, когда вносятся изменения в файл unicast_hosts.txt, Elasticsearch их подхватывает и использует новый список хостов.

Обратите внимание, что плагин обнаружения на основе файла дополняет список узлов unicast в elasticsearch.yml: если в discovery.seed_hosts есть допустимые адреса семян, Elasticsearch использует эти адреса в дополнение к адресам, предоставленным в unicast_hosts.txt.

Файл unicast_hosts.txt содержит по одной записи узла на строке. Каждая запись узла состоит из хоста (имени хоста или IP-адреса) и необязательного номера порта транспортного уровня. Если номер порта указан, он должен следовать сразу за хостом (в той же строке) через разделитель :. Если номер порта не указан, Elasticsearch неявно использует первый порт в диапазоне портов, заданном transport.profiles.default.port или transport.port, если transport.profiles.default.port не задан.

Например, это пример unicast_hosts.txt для кластера с четырьмя узлами, участвующими в обнаружении, некоторые из которых не работают на стандартном порту:

10.10.10.5
10.10.10.6:9305
10.10.10.5:10005
# an IPv6 address
[2001:0db8:85a3:0000:0000:8a2e:0370:7334]:9301

Допускаются имена хостов вместо IP-адресов, которые разрешаются с помощью DNS, как описано выше. IP-адреса IPv6 должны быть указаны в квадратных скобках, а порт, при необходимости, следует после скобок.

Вы также можете добавлять комментарии в этот файл. Все комментарии должны начинаться с новой строки и символа # (т.е. комментарии не могут начинаться посередине строки).

Поставщик узлов EC2

Плагин обнаружения EC2 добавляет поставщика узлов, который использует API AWS для поиска списка узлов-семян.

Поставщик узлов Azure Classic

Плагин обнаружения Azure Classic добавляет поставщика узлов, который использует API Azure Classic для поиска списка узлов-семян.

Поставщик узлов Google Compute Engine

Плагин обнаружения GCE добавляет поставщика узлов, который использует API GCE для поиска списка узлов-семян.

© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/discovery-hosts-providers.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API