elasticsearch-node
Команда elasticsearch-node позволяет выполнить некоторые небезопасные операции с узлом, которые возможны только при его остановке. Эта команда позволяет изменить роль узла, небезопасно изменить настройки кластера и, возможно, восстановить некоторые данные после катастрофы или запустить узел, даже если он несовместим с данными на диске.
Синопсис
bin/elasticsearch-node repurpose|unsafe-bootstrap|detach-cluster|override-version [--ordinal <Integer>] [-E <KeyValuePair>] [-h, --help] ([-s, --silent] | [-v, --verbose])
Описание
Этот инструмент имеет несколько режимов:
-
elasticsearch-node repurposeможет быть использован для удаления нежелательных данных с узла, если он ранее был узлом данных или узлом, имеющим право на роль мастера, но с тех пор перестал быть таковым. -
elasticsearch-node remove-settingsможет быть использован для удаления постоянных настроек из состояния кластера в случае, если он содержит несовместимые настройки, препятствующие формированию кластера. -
elasticsearch-node remove-index-settingsможет быть использован для удаления настроек индекса из состояния кластера в случае, если он содержит несовместимые настройки индекса, препятствующие формированию кластера. -
elasticsearch-node remove-customsможет быть использован для удаления пользовательских метаданных из состояния кластера в случае, если оно содержит поврежденные метаданные, препятствующие загрузке состояния кластера. -
elasticsearch-node unsafe-bootstrapможет быть использован для выполнения небезопасного запуска кластера. Он принудительно заставляет один из узлов сформировать совершенно новый кластер самостоятельно, используя его локальную копию метаданных кластера. -
elasticsearch-node detach-clusterпозволяет перемещать узлы из одного кластера в другой. Это может быть использовано для перемещения узлов в новый кластер, созданный с помощью командыelasticsearch-node unsafe-bootstrap. Если небезопасный запуск кластера невозможен, он также позволяет перемещать узлы в новый кластер. -
elasticsearch-node override-versionпозволяет запустить узел, даже если данные в пути к данным были записаны несовместимой версией Elasticsearch. Это иногда позволяет понизить версию до более ранней версии Elasticsearch.
Изменение роли узла
Могут возникнуть ситуации, когда вам нужно изменить роль узла без соблюдения надлежащих процессов переназначения. Инструмент elasticsearch-node
repurpose позволяет вам удалить излишние данные на диске и запустить узел после его переназначения.
Предполагаемое использование:
- Остановить узел
- Обновить
elasticsearch.yml, установивnode.rolesпо желанию. - Запустить
elasticsearch-node repurposeна узле - Запустить узел
Если вы запустите elasticsearch-node repurpose на узле без роли data и с ролью master, то он удалит все оставшиеся данные фрагментов на этом узле, но оставит индекс и метаданные кластера в покое. Если вы запустите elasticsearch-node repurpose на узле без ролей data и master, то он удалит все оставшиеся данные фрагментов и метаданные индексов, но оставит метаданные кластера в покое.
Запуск этой команды может привести к потере данных для упомянутых индексов, если данные не доступны на других узлах кластера. Запускайте этот инструмент только если вы понимаете и принимаете возможные последствия и только после того, как вы определите, что узел нельзя переназначить надлежащим образом.
Инструмент предоставляет сводку данных, которые будут удалены, и запрашивает подтверждение перед внесением каких-либо изменений. Вы можете получить подробную информацию об индексах и фрагментах, на которые повлияют изменения, передав опцию verbose (-v).
Удаление постоянных настроек кластера
Могут возникнуть ситуации, когда узел содержит постоянные настройки кластера, препятствующие формированию кластера. Поскольку кластер не может быть сформирован, эти настройки невозможно удалить с помощью API обновления настроек кластера.
Инструмент elasticsearch-node remove-settings позволяет принудительно удалить эти постоянные настройки из состояния кластера на диске. Инструмент принимает список настроек, которые должны быть удалены, а также поддерживает шаблоны подстановок.
Предполагаемое использование:
- Остановить узел
- Запустить
elasticsearch-node remove-settings name-of-setting-to-removeна узле - Повторить для всех остальных узлов, имеющих право на роль мастера
- Запустить узлы
Удаление настроек индекса
Могут возникнуть ситуации, когда индекс содержит настройки индекса, препятствующие формированию кластера. Поскольку кластер не может быть сформирован, эти настройки невозможно удалить с помощью API обновления настроек индекса.
Инструмент elasticsearch-node remove-index-settings позволяет принудительно удалить эти настройки индекса из состояния кластера на диске. Инструмент принимает список настроек индекса, которые должны быть удалены, а также поддерживает шаблоны подстановок.
Предполагаемое использование:
- Остановить узел
- Запустить
elasticsearch-node remove-index-settings name-of-index-setting-to-removeна узле - Повторить для всех узлов
- Запустить узлы
Удаление пользовательских метаданных из состояния кластера
Могут возникнуть ситуации, когда узел содержит пользовательские метаданные, обычно предоставляемые плагинами, которые препятствуют запуску узла и загрузке кластера с диска.
Инструмент elasticsearch-node remove-customs позволяет принудительно удалить проблемные пользовательские метаданные. Инструмент принимает список имен пользовательских метаданных, которые должны быть удалены, а также поддерживает шаблоны подстановок.
Предполагаемое использование:
- Остановить узел
- Запустить
elasticsearch-node remove-customs name-of-custom-to-removeна узле - Повторить для всех остальных узлов, имеющих право на роль мастера
- Запустить узлы
Восстановление данных после катастрофы
Иногда узлы Elasticsearch временно останавливаются, возможно, из-за необходимости выполнения некоторых задач по техническому обслуживанию или из-за аппаратного сбоя. После устранения временной проблемы и перезапуска узла он присоединится к кластеру и продолжит работу нормально. В зависимости от вашей конфигурации, ваш кластер может оставаться полностью доступным, даже если один или несколько его узлов остановлены.
Иногда может быть невозможно перезапустить узел после его остановки. Например, у узла может быть проблема с оборудованием, которую нельзя исправить. Если кластер по-прежнему доступен, вы можете запустить новый узел на другом хосте, и Elasticsearch добавит этот узел в кластер вместо вышедшего из строя узла.
Каждый узел хранит свои данные в каталогах данных, определенных настройкой path.data. Это означает, что в случае катастрофы вы также можете перезапустить узел, переместив его каталоги данных на другой хост, предполагая, что эти каталоги данных можно восстановить с неисправного хоста.
Elasticsearch требует ответа от большинства узлов, имеющих право на роль мастера, чтобы выбрать мастера и обновить состояние кластера. Это означает, что если у вас три узла, имеющих право на роль мастера, кластер останется доступным, даже если один из них вышел из строя. Однако, если два из трех узлов, имеющих право на роль мастера, выйдут из строя, кластер станет недоступным, пока не будет перезапущен хотя бы один из них.
В очень редких случаях может быть невозможно перезапустить достаточно узлов для восстановления доступности кластера. Если произошла такая катастрофа, вы должны создать новый кластер из недавнего снимка и повторно импортировать любые данные, которые были получены после создания этого снимка.
Однако, если катастрофа достаточно серьезная, то восстановить кластер из недавнего снимка может быть невозможно. К сожалению, в этом случае нет пути вперед, который не рискует потерей данных, но может быть возможно использовать инструмент elasticsearch-node для построения нового кластера, содержащего некоторые данные из неисправного кластера.
Обход проверок версии
Данные, которые Elasticsearch записывает на диск, предназначены для чтения текущей версией и ограниченным набором будущих версий. Их обычно нельзя прочитать более старыми версиями, а также версиями, которые более чем на одну основную версию новее. Хранящиеся на диске данные включают версию узла, который их записал, и Elasticsearch проверяет их совместимость с этой версией при запуске.
В редких случаях может потребоваться обойти эту проверку и запустить узел Elasticsearch с использованием данных, записанных несовместимой версией. Это может не сработать, если формат хранящихся данных изменился, и это рискованный процесс, потому что формат может измениться таким образом, что Elasticsearch может неправильно его интерпретировать, что приведет к потере данных.
Чтобы обойти эту проверку, вы можете использовать инструмент elasticsearch-node override-version для перезаписи номера версии, хранящегося в пути к данным, текущей версией, заставив Elasticsearch считать, что он совместим с данными на диске.
Небезопасный запуск кластера
Если хотя бы один узел, имеющий право на роль мастера, остался, но невозможно перезапустить большинство из них, то команда elasticsearch-node unsafe-bootstrap небезопасно переопределит конфигурацию голосования кластера, как будто выполняется другой процесс запуска кластера. Целевой узел может затем сформировать новый кластер самостоятельно, используя метаданные кластера, хранящиеся локально на целевом узле.
Эти шаги могут привести к произвольной потере данных, так как целевой узел может не содержать последние метаданные кластера, и эти устаревшие метаданные могут сделать невозможным использование некоторых или всех индексов в кластере.
Поскольку небезопасный запуск создает новый кластер, содержащий один узел, после его запуска необходимо использовать инструмент elasticsearch-node
detach-cluster для миграции других выживших узлов из неисправного кластера в этот новый кластер.
При запуске инструмента elasticsearch-node unsafe-bootstrap он проанализирует состояние узла и запросит подтверждение перед выполнением каких-либо действий. Перед запросом подтверждения он сообщит о термине и версии состояния кластера на узле, на котором он запущен, следующим образом:
Current node cluster state (term, version) pair is (4, 12)
Если у вас есть выбор узлов, на которых нужно запустить этот инструмент, то вы должны выбрать узел с максимально возможным термином. Если существует более одного узла с одинаковым термином, выберите узел с наибольшей версией. Эта информация идентифицирует узел с самым свежим состоянием кластера, что минимизирует количество данных, которые могут быть потеряны. Например, если первый узел сообщает (4, 12), а второй узел сообщает (5, 3), то второй узел предпочтительнее, поскольку его термин больше. Однако, если второй узел сообщает (3, 17), то предпочтительнее первый узел, поскольку его термин больше. Если второй узел сообщает (4, 10), то он имеет тот же термин, что и первый узел, но меньшую версию, поэтому предпочтительнее первый узел.
Запуск этой команды может привести к произвольной потере данных. Запускайте этот инструмент только в том случае, если вы понимаете и принимаете возможные последствия и исчерпали все другие возможности для восстановления вашего кластера.
Последовательность операций для использования этого инструмента следующая:
- Убедитесь, что у вас действительно потерян доступ по крайней мере к половине узлов, имеющих право быть мастером, в кластере, и их нельзя исправить или восстановить, перемещая их пути данных на здоровое оборудование.
- Остановите все оставшиеся узлы.
- Выберите один из оставшихся узлов, имеющих право быть мастером, чтобы он стал новым избранным мастером, как описано выше.
- На этом узле запустите команду
elasticsearch-node unsafe-bootstrap, как показано ниже. Убедитесь, что инструмент сообщилMaster node was successfully bootstrapped. - Запустите этот узел и убедитесь, что он избран как мастер-узел.
- Запустите инструмент
elasticsearch-node detach-cluster, описанный ниже, на каждом другом узле в кластере. - Запустите все остальные узлы и проверьте, что каждый из них присоединяется к кластеру.
- Исследуйте данные в кластере, чтобы определить, были ли потеряны какие-либо данные в ходе этого процесса.
При запуске инструмента он убедится, что узел, используемый для загрузки кластера, не запущен. Важно, чтобы все остальные узлы, имеющие право быть мастером, также были остановлены во время работы этого инструмента, но инструмент этого не проверяет.
Сообщение Master node was successfully bootstrapped не означает, что не было потери данных, это просто означает, что инструмент смог завершить свою задачу.
Отсоединение узлов от их кластера
Перемещение узлов между кластерами небезопасно, так как разные кластеры имеют совершенно разные данные метаданных кластера. Нет способа безопасно объединить метаданные двух кластеров вместе.
Чтобы защититься от непреднамеренного присоединения к неправильному кластеру, каждый кластер создаёт уникальный идентификатор, известный как UUID кластера, при первом запуске. Каждый узел записывает UUID своего кластера и отказывается присоединяться к кластеру с другим UUID.
Однако, если кластер узла навсегда вышел из строя, то может быть желательно попытаться переместить его в новый кластер. Команда elasticsearch-node detach-cluster позволяет отсоединить узел от его кластера, сбросив его UUID кластера. После этого он может присоединиться к другому кластеру с другим UUID.
Например, после небезопасной загрузки кластера вам нужно будет отсоединить все другие выжившие узлы от их старого кластера, чтобы они могли присоединиться к новому, небезопасно загруженному кластеру.
Небезопасная загрузка кластера возможна только в том случае, если существует по крайней мере один выживший узел, имеющий право быть мастером. Если не осталось ни одного узла, имеющего право быть мастером, то метаданные кластера полностью теряются. Однако отдельные узлы данных также содержат копию метаданных индексов, соответствующих их фрагментам. Иногда это позволяет новому кластеру импортировать эти фрагменты как висящие индексы. Иногда вы можете восстановить некоторые индексы после потери всех узлов, имеющих право быть мастером, в кластере, создав новый кластер и затем выполнив команду elasticsearch-node
detach-cluster, чтобы переместить любые выжившие узлы в этот новый кластер.
Существует риск потери данных при импорте висящего индекса, потому что узлы данных могут не иметь последней копии метаданных индекса и не иметь никакой информации о том, какие копии фрагментов синхронизированы. Это означает, что может быть выбрана устаревшая копия фрагмента в качестве основной, и некоторые фрагменты могут быть несовместимы с импортированной схемой.
Выполнение этой команды может привести к произвольной потере данных. Запускайте этот инструмент только в том случае, если вы понимаете и принимаете возможные последствия и исчерпали все другие возможности для восстановления вашего кластера.
Последовательность операций для использования этого инструмента следующая:
- Убедитесь, что у вас действительно потерян доступ ко всем узлам, имеющим право быть мастером, в кластере, и их нельзя исправить или восстановить, перемещая их пути данных на здоровое оборудование.
- Запустите новый кластер и убедитесь, что он работает. Этот кластер может состоять из одного или нескольких совершенно новых узлов, имеющих право быть мастером, или может быть небезопасно загруженным кластером, сформированным, как описано выше.
- Остановите все оставшиеся узлы данных.
- На каждом узле данных запустите инструмент
elasticsearch-node detach-cluster, как показано ниже. Убедитесь, что инструмент сообщилNode was successfully detached from the cluster. - При необходимости настройте каждый узел данных на обнаружение нового кластера.
- Запустите каждый узел данных и убедитесь, что он присоединился к новому кластеру.
- Дождитесь завершения всех восстановлений и изучите данные в кластере, чтобы определить, были ли потеряны какие-либо данные в процессе.
Сообщение Node was successfully detached from the cluster не означает, что потери данных не было, это просто означает, что инструмент смог завершить свою работу.
Параметры
-
repurpose - Удалить избыточные данные при изменении ролей узла.
-
unsafe-bootstrap - Указывает на небезопасную загрузку этого узла как нового одноузлового кластера.
-
detach-cluster - Указывает на небезопасное отсоединение этого узла от его кластера, чтобы он мог присоединиться к другому кластеру.
-
override-version - Перезаписывает номер версии, хранящийся в пути данных, чтобы узел мог запуститься, несмотря на несовместимость с данными на диске.
-
remove-settings - Принудительно удаляет предоставленные постоянные настройки кластера из состояния кластера на диске.
-
--ordinal <Integer> - Если существует несколько узлов, использующих один путь данных, то это определяет, на какой узел нацелиться. По умолчанию
0, означающее использование первого узла в пути данных. -
-E <KeyValuePair> - Настраивает параметр.
-
-h, --help - Возвращает все параметры команды.
-
-s, --silent - Показать минимальный вывод.
-
-v, --verbose - Показать подробный вывод.
Примеры
Переназначение узла как выделенного узла-мастера
В этом примере бывший узел данных переназначен как выделенный узел-мастер. Сначала обновите настройки узла до node.roles: [ "master" ] в файле конфигурации elasticsearch.yml. Затем запустите команду elasticsearch-node repurpose, чтобы найти и удалить избыточные данные фрагментов:
node$ ./bin/elasticsearch-node repurpose
WARNING: Elasticsearch MUST be stopped before running this tool.
Found 2 shards in 2 indices to clean up
Use -v to see list of paths and indices affected
Node is being re-purposed as master and no-data. Clean-up of shard data will be performed.
Do you want to proceed?
Confirm [y/N] y
Node successfully repurposed to master and no-data. Переназначение узла как узла только для координации
В этом примере узел, который ранее содержал данные, переназначен как узел только для координации. Сначала обновите настройки узла до node.roles: [] в файле конфигурации elasticsearch.yml. Затем запустите команду elasticsearch-node repurpose, чтобы найти и удалить избыточные данные фрагментов и метаданные индекса:
node$./bin/elasticsearch-node repurpose
WARNING: Elasticsearch MUST be stopped before running this tool.
Found 2 indices (2 shards and 2 index meta data) to clean up
Use -v to see list of paths and indices affected
Node is being re-purposed as no-master and no-data. Clean-up of index data will be performed.
Do you want to proceed?
Confirm [y/N] y
Node successfully repurposed to no-master and no-data. Удаление постоянных настроек кластера
Если ваши узлы содержат постоянные настройки кластера, которые препятствуют формированию кластера, т.е. не могут быть удалены с помощью API настроек обновления кластера, вы можете выполнить следующие команды для удаления одной или нескольких настроек кластера.
node$ ./bin/elasticsearch-node remove-settings xpack.monitoring.exporters.my_exporter.host
WARNING: Elasticsearch MUST be stopped before running this tool.
The following settings will be removed:
xpack.monitoring.exporters.my_exporter.host: "10.1.2.3"
You should only run this tool if you have incompatible settings in the
cluster state that prevent the cluster from forming.
This tool can cause data loss and its use should be your last resort.
Do you want to proceed?
Confirm [y/N] y
Settings were successfully removed from the cluster state Вы также можете использовать подстановочные знаки для удаления нескольких настроек, например, используя
node$ ./bin/elasticsearch-node remove-settings xpack.monitoring.*
Удаление настроек индекса
Если ваши индексы содержат настройки индекса, которые препятствуют формированию кластера, вы можете выполнить следующую команду для удаления одной или нескольких настроек индекса.
node$ ./bin/elasticsearch-node remove-index-settings index.my_plugin.foo
WARNING: Elasticsearch MUST be stopped before running this tool.
You should only run this tool if you have incompatible index settings in the
cluster state that prevent the cluster from forming.
This tool can cause data loss and its use should be your last resort.
Do you want to proceed?
Confirm [y/N] y
Index settings were successfully removed from the cluster state Вы также можете использовать подстановочные знаки для удаления нескольких настроек индекса, например, используя
node$ ./bin/elasticsearch-node remove-index-settings index.my_plugin.*
Удаление пользовательских метаданных из состояния кластера
Если состояние кластера на диске содержит пользовательские метаданные, которые препятствуют запуску узла и загрузке состояния кластера, вы можете выполнить следующие команды для удаления этих пользовательских метаданных.
node$ ./bin/elasticsearch-node remove-customs snapshot_lifecycle
WARNING: Elasticsearch MUST be stopped before running this tool.
The following customs will be removed:
snapshot_lifecycle
You should only run this tool if you have broken custom metadata in the
cluster state that prevents the cluster state from being loaded.
This tool can cause data loss and its use should be your last resort.
Do you want to proceed?
Confirm [y/N] y
Customs were successfully removed from the cluster state Небезопасная загрузка кластера
Предположим, что ваш кластер имел пять узлов, имеющих право быть мастером, и вы навсегда потеряли три из них, оставив два узла.
- Запустите инструмент на первом оставшемся узле, но ответьте
nна шаге подтверждения.
node_1$ ./bin/elasticsearch-node unsafe-bootstrap
WARNING: Elasticsearch MUST be stopped before running this tool.
Current node cluster state (term, version) pair is (4, 12)
You should only run this tool if you have permanently lost half or more
of the master-eligible nodes in this cluster, and you cannot restore the
cluster from a snapshot. This tool can cause arbitrary data loss and its
use should be your last resort. If you have multiple surviving master
eligible nodes, you should run this tool on the node with the highest
cluster state (term, version) pair.
Do you want to proceed?
Confirm [y/N] n - Запустите инструмент на втором оставшемся узле и снова ответьте
nна шаге подтверждения.
node_2$ ./bin/elasticsearch-node unsafe-bootstrap
WARNING: Elasticsearch MUST be stopped before running this tool.
Current node cluster state (term, version) pair is (5, 3)
You should only run this tool if you have permanently lost half or more
of the master-eligible nodes in this cluster, and you cannot restore the
cluster from a snapshot. This tool can cause arbitrary data loss and its
use should be your last resort. If you have multiple surviving master
eligible nodes, you should run this tool on the node with the highest
cluster state (term, version) pair.
Do you want to proceed?
Confirm [y/N] n - Поскольку у второго узла более поздний срок, у него состояние кластера свежее, поэтому лучше небезопасно запустить процесс инициализации кластера с использованием этого узла:
node_2$ ./bin/elasticsearch-node unsafe-bootstrap
WARNING: Elasticsearch MUST be stopped before running this tool.
Current node cluster state (term, version) pair is (5, 3)
You should only run this tool if you have permanently lost half or more
of the master-eligible nodes in this cluster, and you cannot restore the
cluster from a snapshot. This tool can cause arbitrary data loss and its
use should be your last resort. If you have multiple surviving master
eligible nodes, you should run this tool on the node with the highest
cluster state (term, version) pair.
Do you want to proceed?
Confirm [y/N] y
Master node was successfully bootstrapped Отсоединение узлов от кластера
После небезопасной инициализации нового кластера выполните команду elasticsearch-node
detach-cluster, чтобы отсоединить все оставшиеся узлы от вышедшего из строя кластера, чтобы они могли присоединиться к новому кластеру:
node_3$ ./bin/elasticsearch-node detach-cluster
WARNING: Elasticsearch MUST be stopped before running this tool.
You should only run this tool if you have permanently lost all of the
master-eligible nodes in this cluster and you cannot restore the cluster
from a snapshot, or you have already unsafely bootstrapped a new cluster
by running `elasticsearch-node unsafe-bootstrap` on a master-eligible
node that belonged to the same cluster as this node. This tool can cause
arbitrary data loss and its use should be your last resort.
Do you want to proceed?
Confirm [y/N] y
Node was successfully detached from the cluster Обход проверки версий
Выполните команду elasticsearch-node override-version, чтобы перезаписать версию, хранящуюся в пути к данным, чтобы узел мог начать работу, несмотря на несовместимость с данными, хранящимися в пути к данным:
node$ ./bin/elasticsearch-node override-version
WARNING: Elasticsearch MUST be stopped before running this tool.
This data path was last written by Elasticsearch version [x.x.x] and may no
longer be compatible with Elasticsearch version [y.y.y]. This tool will bypass
this compatibility check, allowing a version [y.y.y] node to start on this data
path, but a version [y.y.y] node may not be able to read this data or may read
it incorrectly leading to data loss.
You should not use this tool. Instead, continue to use a version [x.x.x] node
on this data path. If necessary, you can use reindex-from-remote to copy the
data from here into an older cluster.
Do you want to proceed?
Confirm [y/N] y
Successfully overwrote this node's metadata to bypass its version compatibility checks.
© 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/node-tool.html