Spec-Zone.ru › Elasticsearch 7
›Elasticsearch Guide [7.17] ›Модули индексов

Удержание истории

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

На уровне Lucene Elasticsearch выполняет всего две операции записи в индекс: новый документ может быть индексирован или существующий документ может быть удалён. Обновления реализуются путём атомарного удаления старого документа и последующего индексирования нового. Индексированный в Lucene документ уже содержит всю необходимую информацию для повторного выполнения операции индексирования, но это не относится к удалению документов. Для решения этой проблемы Elasticsearch использует функцию «мягких удалений» (soft deletes) для сохранения недавних удалений в индексе Lucene, чтобы их можно было повторно выполнить.

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

Elasticsearch отслеживает операции, которые, как ожидается, потребуются для повторного выполнения в будущем, используя механизм, называемый «лицензиями на удержание истории фрагментов» (shard history retention leases). Каждая копия фрагмента, для которой могут потребоваться повторно выполняемые операции, должна сначала создать лицензию на удержание истории фрагмента для себя. Например, эта копия фрагмента может быть репликой фрагмента или фрагментом индекса-ведомого при использовании кросс-кластерной репликации. Каждая лицензия на удержание отслеживает порядковый номер первой операции, которой соответствующая копия фрагмента не получила. По мере получения копии фрагмента новых операций она увеличивает порядковый номер, содержащийся в лицензии на удержание, чтобы указать, что не будет необходимости повторно выполнять эти операции в будущем. Elasticsearch удаляет мягко удалённые операции, как только они не удерживаются ни одной лицензией на удержание.

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

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

Кросс-кластерная репликация не будет работать, если мягкие удаления отключены.

Настройки удержания истории

index.soft_deletes.enabled
[7.6.0] Устарело в 7.6.0. Создание индексов с отключёнными мягкими удалениями устарело и будет удалено в будущих версиях Elasticsearch. Указывает, включены ли мягкие удаления в индексе. Мягкие удаления можно настроить только при создании индекса и только для индексов, созданных начиная с Elasticsearch 6.5.0. По умолчанию true.
index.soft_deletes.retention_lease.period
Максимальный период хранения лицензии на удержание истории фрагмента, прежде чем она считается истекшей. Лицензии на удержание истории фрагментов гарантируют, что мягкие удаления сохраняются во время слияний в индексе Lucene. Если мягкое удаление сливается до того, как оно может быть реплицировано в ведомый индекс, следующий процесс завершится из-за неполной истории в лидере. По умолчанию 12h.

© 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/index-modules-history-retention.html

Spec-Zone.ru

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