Добавление и удаление узлов в кластере
При запуске экземпляра Elasticsearch вы запускаете узел. Elasticsearch кластер — это группа узлов, имеющих одинаковое cluster.name атрибут. По мере присоединения или выхода узлов из кластера, кластер автоматически перестраивается, чтобы равномерно распределить данные по доступным узлам.
Если вы запускаете один экземпляр Elasticsearch, у вас есть кластер из одного узла. Все первичные фрагменты находятся на единственном узле. Реплицированные фрагменты не могут быть выделены, поэтому состояние кластера остаётся жёлтым. Кластер полностью функционален, но подвержен риску потери данных в случае сбоя.
Вы добавляете узлы в кластер, чтобы увеличить его ёмкость и надёжность. По умолчанию узел является как узлом данных, так и может быть избран в качестве главного узла, который управляет кластером. Вы также можете настроить новый узел для определённой цели, например, для обработки запросов ingest. Для получения дополнительной информации см. Узлы.
Когда вы добавляете больше узлов в кластер, он автоматически выделяет реплицированные фрагменты. Когда все первичные и реплицированные фрагменты активны, состояние кластера меняется на зелёное.
Зачисление узлов в существующий кластер
Вы можете зачислить дополнительные узлы на вашем локальном компьютере, чтобы поэкспериментировать с тем, как ведёт себя кластер Elasticsearch с несколькими узлами.
Чтобы добавить узел в кластер, работающий на нескольких машинах, необходимо также установить discovery.seed_hosts, чтобы новый узел мог обнаружить остальную часть своего кластера.
При первом запуске Elasticsearch процесс автоматической настройки безопасности связывает HTTP-слой с 0.0.0.0, но связывает транспортный слой только с localhost. Это задуманное поведение гарантирует, что вы можете запустить кластер из одного узла с включённой безопасностью по умолчанию без дополнительной конфигурации.
Перед зачислением нового узла обычно необходимы дополнительные действия, такие как привязка к другому адресу, чем localhost или выполнение проверок bootstrap, в производственных кластерах. В это время автоматически сгенерированный токен зачисления может истечь, поэтому токены зачисления не генерируются автоматически.
Кроме того, только узлы на одном хосте могут присоединиться к кластеру без дополнительной конфигурации. Если вы хотите, чтобы узлы с другого хоста присоединились к вашему кластеру, необходимо установить transport.host на поддерживаемое значение (например, раскомментировать предлагаемое значение 0.0.0.0) или IP-адрес, привязанный к интерфейсу, к которому могут получить доступ другие хосты. Дополнительную информацию см. в разделе настройки транспорта.
Чтобы зачислить новые узлы в свой кластер, создайте токен зачисления с помощью инструмента elasticsearch-create-enrollment-token на любом существующем узле в вашем кластере. Затем вы можете запустить новый узел с параметром --enrollment-token, чтобы он присоединился к существующему кластеру.
-
В отдельном терминале, где запущен Elasticsearch, перейдите в каталог, где установлен Elasticsearch, и запустите инструмент
elasticsearch-create-enrollment-tokenдля создания токена зачисления для новых узлов.bin\elasticsearch-create-enrollment-token -s node
Скопируйте токен зачисления, который вы будете использовать для зачисления новых узлов в ваш кластер Elasticsearch.
-
Из каталога установки вашего нового узла запустите Elasticsearch и передайте токен зачисления с параметром
--enrollment-token.bin\elasticsearch --enrollment-token <enrollment-token>
Elasticsearch автоматически генерирует сертификаты и ключи в следующем каталоге:
config\certs
- Повторите предыдущий шаг для всех новых узлов, которые вы хотите зачислить.
Для получения дополнительной информации об обнаружении и распределении фрагментов см. Обнаружение и формирование кластера и Установки распределения и маршрутизации фрагментов на уровне кластера.
Узлы, подходящие для роли master
По мере добавления или удаления узлов Elasticsearch поддерживает оптимальный уровень отказоустойчивости, автоматически обновляя конфигурацию голосования кластера, которая представляет собой набор узлов, подходящих для роли master, ответы которых учитываются при принятии решений, таких как избрание нового master или сохранение нового состояния кластера.
Рекомендуется иметь небольшое и фиксированное число узлов, подходящих для роли master, в кластере, и масштабировать кластер вверх и вниз, добавляя и удаляя узлы, не подходящие для роли master. Однако есть ситуации, в которых может быть желательно добавить или удалить некоторые узлы, подходящие для роли master, в кластер.
Добавление узлов, подходящих для роли master
Если вы хотите добавить некоторые узлы в свой кластер, просто настройте новые узлы так, чтобы они находили существующий кластер, и запустите их. Elasticsearch добавляет новые узлы в конфигурацию голосования, если это уместно.
Во время выборов master или при присоединении к существующему сформированному кластеру узел отправляет запрос на присоединение master, чтобы официально быть добавленным в кластер.
Удаление узлов, подходящих для роли master
При удалении узлов, подходящих для роли master, важно не удалять слишком много сразу. Например, если в настоящее время есть семь узлов, подходящих для роли master, и вы хотите сократить это число до трёх, нельзя просто остановить четыре узла сразу: в результате останется только три узла, что меньше половины конфигурации голосования, а это значит, что кластер не может выполнять дальнейшие действия.
Точнее, если вы одновременно выключите половину или больше узлов, подходящих для роли master, кластер, как правило, станет недоступным. Если это произойдёт, вы можете вернуть кластер в онлайн-режим, запустив удалённые узлы снова.
Пока в кластере есть как минимум три узла, подходящих для роли master, как общее правило, лучше удалять узлы по одному, давая достаточно времени кластеру, чтобы автоматически настроить конфигурацию голосования и адаптировать уровень отказоустойчивости к новому набору узлов.
Если осталось только два узла, подходящих для роли master, ни один узел не может быть безопасно удалён, поскольку оба требуются для надёжного прогресса. Чтобы удалить один из этих узлов, вы должны сначала уведомить Elasticsearch о том, что он не должен входить в состав конфигурации голосования, и что роль голосования должна быть отдана другому узлу. После этого вы можете отключить исключённый узел, не препятствуя другому узлу выполнять работу. Узел, добавленный в список исключений конфигурации голосования, по-прежнему работает нормально, но Elasticsearch пытается удалить его из конфигурации голосования, чтобы его голос больше не требовался. Важно, что Elasticsearch никогда не будет автоматически перемещать узел из списка исключений конфигурации голосования обратно в конфигурацию голосования. После того, как исключённый узел успешно был автоматически переконфигурирован за пределами конфигурации голосования, его можно безопасно выключить, не влияя на доступность кластера master. Узел можно добавить в список исключений конфигурации голосования с помощью API исключений конфигурации голосования. Например:
resp = client.cluster.post_voting_config_exclusions(
node_names="node_name",
)
print(resp)
resp1 = client.cluster.post_voting_config_exclusions(
node_names="node_name",
timeout="1m",
)
print(resp1) const response = await client.cluster.postVotingConfigExclusions({
node_names: "node_name",
});
console.log(response);
const response1 = await client.cluster.postVotingConfigExclusions({
node_names: "node_name",
timeout: "1m",
});
console.log(response1); # 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 исключений конфигурации голосования завершается ошибкой, вы можете безопасно повторить его. Только успешный ответ гарантирует, что узел действительно был удалён из конфигурации голосования и не будет восстановлен. Если избранный узел master исключён из конфигурации голосования, он уступит другому узлу, подходящему для роли master, который всё ещё находится в конфигурации голосования, если такой узел доступен.
Хотя API исключений конфигурации голосования наиболее полезен для уменьшения кластера из двух узлов до одного узла, его также можно использовать для удаления нескольких узлов, подходящих для роли master, одновременно. Добавление нескольких узлов в список исключений заставляет систему попробовать автоматически переконфигурировать все эти узлы за пределами конфигурации голосования, что позволяет безопасно их выключить, сохраняя доступность кластера. В приведённом выше примере, сводя кластер из семи master-узлов до трёх master-узлов, вы можете добавить четыре узла в список исключений, дождаться подтверждения и затем выключить их одновременно.
Исключения голосования требуются только при удалении по крайней мере половины узлов, подходящих для роли master, из кластера в короткий промежуток времени. Они не требуются при удалении узлов, не подходящих для роли master, а также при удалении менее половины узлов, подходящих для роли master.
Добавление исключения для узла создаёт запись для этого узла в списке исключений конфигурации голосования, что заставляет систему автоматически пытаться переконфигурировать конфигурацию голосования, чтобы удалить этот узел, и предотвращает его возвращение в конфигурацию голосования после удаления. Текущий список исключений хранится в состоянии кластера и может быть просмотрен следующим образом:
resp = client.cluster.state(
filter_path="metadata.cluster_coordination.voting_config_exclusions",
)
print(resp) response = client.cluster.state( filter_path: 'metadata.cluster_coordination.voting_config_exclusions' ) puts response
const response = await client.cluster.state({
filter_path: "metadata.cluster_coordination.voting_config_exclusions",
});
console.log(response); GET /_cluster/state?filter_path=metadata.cluster_coordination.voting_config_exclusions
Этот список ограничен размером параметром cluster.max_voting_config_exclusions, который по умолчанию равен 10. См. Настройки обнаружения и формирования кластера. Поскольку исключения конфигурации голосования постоянные и ограничены по количеству, они должны быть очищены. Обычно исключение добавляется при выполнении каких-либо задач технического обслуживания кластера, и исключения должны быть очищены после завершения технического обслуживания. Кластеры обычно не должны иметь исключений конфигурации голосования в обычной работе.
Если узел исключён из конфигурации голосования, потому что он должен быть окончательно выключен, его исключение можно удалить после его выключения и удаления из кластера. Исключения также можно очистить, если они были созданы по ошибке или временно, указав ?wait_for_removal=false.
resp = client.cluster.delete_voting_config_exclusions()
print(resp)
resp1 = client.cluster.delete_voting_config_exclusions(
wait_for_removal=False,
)
print(resp1) const response = await client.cluster.deleteVotingConfigExclusions();
console.log(response);
const response1 = await client.cluster.deleteVotingConfigExclusions({
wait_for_removal: "false",
});
console.log(response1); # 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/8.17/add-elasticsearch-nodes.html