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

Инициализация кластера

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

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

  • Имя узла.
  • Имя хоста узла, если node.name не задано, так как node.name по умолчанию равно имени хоста узла. Необходимо использовать либо полное доменное имя, либо просто имя хоста в зависимости от конфигурации системы.
  • IP-адрес транспортного адреса опубликования узла, если нельзя использовать node.name узла. Обычно это IP-адрес, к которому network.host выполняет разрешение, но это можно переопределить здесь.
  • IP-адрес и порт адреса опубликования узла в формате IP:PORT, если нельзя использовать node.name узла и несколько узлов используют один IP-адрес.

При запуске узла, способного выполнять роль мастера, этот параметр можно указать в командной строке или в файле elasticsearch.yml. После формирования кластера удалите этот параметр из конфигурации каждого узла. Он не должен быть задан для узлов, не способных выполнять роль мастера, узлов, присоединяющихся к существующему кластеру, или при перезапуске одного или нескольких узлов.

Технически достаточно задать cluster.initial_master_nodes на одном узле, способном выполнять роль мастера в кластере, и упомянуть только этот узел в значении параметра, но это не обеспечивает отказоустойчивость до полного формирования кластера. Поэтому лучше всего использовать как минимум три узла, способных выполнять роль мастера, каждый с параметром cluster.initial_master_nodes, содержащим все три узла.

Необходимо задать cluster.initial_master_nodes один и тот же список узлов на каждом узле, на котором он задан, чтобы быть уверенным, что во время инициализации сформируется только один кластер, и, следовательно, чтобы избежать риска потери данных.

Для кластера с 3 узлами, способными выполнять роль мастера (с именами узлов master-a, master-b и master-c), конфигурация будет выглядеть следующим образом:

cluster.initial_master_nodes:
  - master-a
  - master-b
  - master-c

Как и все параметры узла, начальный набор узлов, способных выполнять роль мастера, также можно указать в командной строке, используемой для запуска Elasticsearch:

bin/elasticsearch -E cluster.initial_master_nodes=master-a,master-b,master-c

Форматы имён узлов должны совпадать

Имена узлов, используемые в списке cluster.initial_master_nodes, должны точно совпадать со свойствами node.name узлов. По умолчанию имя узла устанавливается на имя машины, которое может быть или не быть полным доменным именем в зависимости от конфигурации системы. Если каждое имя узла является полным доменным именем, например, master-a.example.com, то вы должны использовать полные доменные имена в списке cluster.initial_master_nodes; в противном случае, если имена ваших узлов являются простыми именами хостов (без суффикса .example.com), вы должны использовать простые имена хостов в списке cluster.initial_master_nodes. Если вы используете смесь полных доменных имён и простых имён хостов или есть какое-либо другое несоответствие между node.name и cluster.initial_master_nodes, то кластер не будет успешно сформирован, и вы увидите сообщения в логах, подобные следующим.

[master-a.example.com] master not discovered yet, this node has
not previously joined a bootstrapped (v7+) cluster, and this
node must discover master-eligible nodes [master-a, master-b] to
bootstrap a cluster: have discovered [{master-b.example.com}{...

Это сообщение показывает имена узлов master-a.example.com и master-b.example.com, а также записи cluster.initial_master_nodes master-a и master-b, и из этого сообщения ясно, что они не совпадают точно.

Выбор имени кластера

Параметр cluster.name позволяет создавать несколько кластеров, которые изолированы друг от друга. Узлы проверяют, что они согласны с именем своего кластера, когда они впервые подключаются друг к другу, и Elasticsearch сформирует кластер только из узлов, у которых есть одно и то же имя кластера. Значение по умолчанию для имени кластера — elasticsearch, но рекомендуется изменить его, чтобы отразить логическое имя кластера.

Автоматическая инициализация в режиме разработки

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

Если любой из следующих параметров настроен, автоматическая инициализация не будет выполняться, и вы должны настроить cluster.initial_master_nodes, как описано в разделе по инициализации кластера:

  • discovery.seed_providers
  • discovery.seed_hosts
  • cluster.initial_master_nodes

Формирование одного кластера

Если вы запускаете узел Elasticsearch без настройки этих параметров, он запустится в режиме разработки и автоматически инициализирует себя в новый кластер. Если вы запускаете узлы Elasticsearch на разных хостах, по умолчанию они не будут обнаруживать друг друга и будут формировать разные кластеры на каждом хосте. Elasticsearch не будет объединять отдельные кластеры после их формирования, даже если вы впоследствии попытаетесь настроить все узлы в один кластер. Это связано с тем, что нет способа объединить эти отдельные кластеры без риска потери данных. Вы можете определить, что вы сформировали отдельные кластеры, проверив UUID кластера, сообщенные GET / на каждом узле. Если вы намеревались сформировать один кластер, вам следует начать заново:

  • Остановите все узлы.
  • Полностью очистите каждый узел, удалив содержимое папок данных.
  • Настройте cluster.initial_master_nodes, как описано выше.
  • Перезапустите все узлы и убедитесь, что они сформировали один кластер.

© 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/7.17/modules-discovery-bootstrap-cluster.html

Spec-Zone.ru

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