Добавление и удаление узлов в кластере
При запуске экземпляра Elasticsearch вы запускаете узел. Elasticsearch кластер — это группа узлов, которые имеют одинаковое cluster.name свойство. По мере присоединения или выхода узлов из кластера кластер автоматически перестраивается, чтобы равномерно распределить данные по доступным узлам.
Если вы работаете с одним экземпляром Elasticsearch, у вас есть кластер из одного узла. Все первичные фрагменты находятся на единственном узле. Реплики фрагментов не могут быть назначены, поэтому состояние кластера остается жёлтым. Кластер полностью функционален, но подвержен риску потери данных в случае сбоя.
Вы добавляете узлы в кластер, чтобы увеличить его емкость и надёжность. По умолчанию узел является одновременно узлом данных и имеет право быть избранным узлом-мастером, управляющим кластером. Вы также можете настроить новый узел для определённой цели, например, обработки запросов ingest. Дополнительную информацию см. в Узлы.
При добавлении дополнительных узлов в кластер он автоматически назначает реплики фрагментов. Когда все первичные и реплицированные фрагменты активны, состояние кластера меняется на зелёное.
Вы можете запустить несколько узлов на локальной машине, чтобы поэкспериментировать с поведением кластера Elasticsearch с несколькими узлами. Чтобы добавить узел в кластер, работающий на локальной машине:
- Настройте новый экземпляр Elasticsearch.
- Укажите имя кластера с помощью параметра
cluster.nameвelasticsearch.yml. Например, чтобы добавить узел в кластерlogging-prod, добавьте строкуcluster.name: "logging-prod"вelasticsearch.yml. - Запустите Elasticsearch. Узел автоматически обнаруживает и присоединяется к указанному кластеру.
Чтобы добавить узел в кластер, работающий на нескольких машинах, вам также необходимо настроить discovery.seed_hosts, чтобы новый узел мог обнаружить остальные узлы кластера.
Дополнительную информацию об обнаружении и назначении фрагментов см. в Обнаружении и формировании кластера и Настройки распределения и маршрутизации фрагментов на уровне кластера.
Узлы, имеющие право на роль мастера
При добавлении или удалении узлов Elasticsearch поддерживает оптимальный уровень отказоустойчивости, автоматически обновляя конфигурацию голосования кластера, которая представляет собой набор узлов с правом быть мастером, ответы которых учитываются при принятии решений, таких как избрание нового мастера или утверждение нового состояния кластера.
Рекомендуется иметь небольшое и фиксированное количество узлов с правом быть мастером в кластере и масштабировать кластер путём добавления и удаления только узлов, не имеющих права быть мастером. Однако существуют ситуации, когда может потребоваться добавить или удалить некоторые узлы с правом быть мастером в кластер.
Добавление узлов с правом быть мастером
Если вы хотите добавить некоторые узлы в свой кластер, просто настройте новые узлы на поиск существующего кластера и запустите их. Elasticsearch добавляет новые узлы в конфигурацию голосования, если это уместно.
Во время выборов мастера или при присоединении к существующему сформированному кластеру узел отправляет запрос на присоединение мастеру, чтобы быть официально добавленным в кластер.
Удаление узлов с правом быть мастером
При удалении узлов с правом быть мастером важно не удалять слишком много их одновременно. Например, если в настоящее время есть семь узлов с правом быть мастером, и вы хотите уменьшить это число до трёх, просто остановить четыре узла сразу нельзя: это оставит только три узла, что меньше половины конфигурации голосования, а это значит, что кластер не может выполнять дальнейшие действия.
Точнее, если вы выключаете половину или более узлов с правом быть мастером одновременно, кластер обычно становится недоступным. В таком случае вы можете вернуть кластер в работу, запустив удалённые узлы снова.
Пока в кластере есть как минимум три узла с правом быть мастером, как общее правило, лучше удалять узлы по одному, позволяя кластеру автоматически корректировать конфигурацию голосования и адаптировать уровень отказоустойчивости к новому набору узлов.
Если остаются только два узла с правом быть мастером, ни один узел безопасно удалить нельзя, так как оба требуются для надёжного продвижения. Чтобы удалить один из этих узлов, вы должны сначала сообщить Elasticsearch, что он не должен входить в конфигурацию голосования, а вместо этого голосующая сила должна быть передана другому узлу. Затем вы можете отключить исключённый узел, не препятствуя другому узлу двигаться вперёд. Узел, который добавлен в список исключений конфигурации голосования, всё равно работает нормально, но Elasticsearch пытается удалить его из конфигурации голосования, так что его голос больше не требуется. Важно, что Elasticsearch никогда не будет автоматически перемещать узел из списка исключений конфигурации голосования обратно в конфигурацию голосования. После успешной автоматической переконфигурации исключённого узла из конфигурации голосования его можно безопасно выключить, не влияя на доступность кластера на уровне мастера. Узел можно добавить в список исключений конфигурации голосования, используя API исключений конфигурации голосования. Например:
# Add node to voting configuration exclusions list and wait for the system # to auto-reconfigure the node out of the voting configuration up to the # default timeout of 30 seconds POST /_cluster/voting_config_exclusions?node_names=node_name # Add node to voting configuration exclusions list and wait for # auto-reconfiguration up to one minute POST /_cluster/voting_config_exclusions?node_names=node_name&timeout=1m
Узлы, которые должны быть добавлены в список исключений, указываются по имени с помощью параметра запроса ?node_names или по постоянным идентификаторам узлов с помощью параметра запроса ?node_ids. Если вызов API исключений конфигурации голосования завершается неудачно, вы можете безопасно повторить его. Только успешный ответ гарантирует, что узел фактически был удалён из конфигурации голосования и не будет восстановлен. Если избранный узел-мастер исключён из конфигурации голосования, он передаст власть другому узлу с правом быть мастером, который всё ещё находится в конфигурации голосования, если такой узел доступен.
Хотя API исключений конфигурации голосования наиболее полезен для уменьшения масштаба кластера из двух узлов до одного узла, его также можно использовать для удаления нескольких узлов с правом быть мастером одновременно. Добавление нескольких узлов в список исключений заставляет систему пытаться автоматически переконфигурировать все эти узлы из конфигурации голосования, позволяя их безопасно выключить, сохранив доступность кластера. В описанном выше примере уменьшения кластера из семи узлов с правом быть мастером до трёх узлов вы можете добавить четыре узла в список исключений, подождать подтверждения и затем выключить их одновременно.
Исключения голосования необходимы только при удалении как минимум половины узлов с правом быть мастером из кластера в короткий промежуток времени. Они не требуются при удалении узлов, не имеющих права быть мастером, а также при удалении менее половины узлов с правом быть мастером.
Добавление исключения для узла создаёт запись для этого узла в списке исключений конфигурации голосования, что заставляет систему автоматически пытаться переконфигурировать конфигурацию голосования для удаления этого узла и предотвращает его возвращение в конфигурацию голосования после удаления. Текущий список исключений хранится в состоянии кластера и может быть просмотрен следующим образом:
GET /_cluster/state?filter_path=metadata.cluster_coordination.voting_config_exclusions
Этот список ограничен размером параметром cluster.max_voting_config_exclusions, который по умолчанию равен 10. См. Настройки обнаружения и формирования кластера. Поскольку исключения конфигурации голосования постоянны и ограничены по количеству, их необходимо очистить. Обычно исключение добавляется при выполнении некоторых операций технического обслуживания в кластере, а исключения должны быть очищены по завершении обслуживания. Кластеры в обычной работе не должны иметь исключений конфигурации голосования.
Если узел исключён из конфигурации голосования, потому что он будет выключен постоянно, его исключение может быть удалено после его выключения и удаления из кластера. Исключения также могут быть очищены, если они были созданы ошибочно или были необходимы только временно, указав ?wait_for_removal=false.
# Wait for all the nodes with voting configuration exclusions to be removed from # the cluster and then remove all the exclusions, allowing any node to return to # the voting configuration in the future. DELETE /_cluster/voting_config_exclusions # Immediately remove all the voting configuration exclusions, allowing any node # to return to the voting configuration in the future. DELETE /_cluster/voting_config_exclusions?wait_for_removal=false
© 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/add-elasticsearch-nodes.html