API клонирования индекса
Клонирует существующий индекс.
POST /my-index-000001/_clone/cloned-my-index-000001
Запрос
POST /<index>/_clone/<target-index>
PUT /<index>/_clone/<target-index>
Предварительные условия
- Если включены функции безопасности Elasticsearch, у вас должны быть права
manageindex для индекса, который вы хотите клонировать. - Для клонирования индекса, он должен быть помечен как только для чтения и иметь состояние здоровья кластера
green.
Например, следующий запрос предотвращает операции записи на my_source_index, чтобы его можно было клонировать. Изменения метаданных, такие как удаление индекса, всё ещё разрешены.
PUT /my_source_index/_settings
{
"settings": {
"index.blocks.write": true
}
} Текущий индекс записи в потоке данных нельзя клонировать. Чтобы клонировать текущий индекс записи, поток данных необходимо сначала перевести в другое состояние, чтобы был создан новый индекс записи, а затем предыдущий индекс записи можно будет клонировать.
Описание
Используйте API клонирования индексов для клонирования существующего индекса в новый индекс, где каждый исходный первичный фрагмент клонируется в новый первичный фрагмент в новом индексе.
Elasticsearch не применяет шаблоны индексов к результирующему индексу. API также не копирует метаданные индекса из исходного индекса. Метаданные индекса включают алиасы, определения фаз ILM и информацию о последователях CCR. Например, если вы клонируете индекс последователя CCR, получившийся клон не будет индексом последователя.
API клонирования копирует большинство настроек индекса из исходного индекса в результирующий индекс, за исключением index.number_of_replicas и index.auto_expand_replicas. Чтобы установить количество реплик в результирующем индексе, настройте эти параметры в запросе клонирования.
Как работает клонирование
Клонирование работает следующим образом:
- Сначала создаётся новый целевой индекс с таким же определением, как и исходный индекс.
- Затем сегменты из исходного индекса жестко привязываются к целевому индексу. (Если файловая система не поддерживает жесткую привязку, то все сегменты копируются в новый индекс, что является намного более длительным процессом.)
- Наконец, целевой индекс восстанавливается так, как будто он был закрыт и только что был повторно открыт.
Клонирование индекса
Чтобы клонировать my_source_index в новый индекс под названием my_target_index, выполните следующий запрос:
POST /my_source_index/_clone/my_target_index
Вышеупомянутый запрос возвращает результат сразу после добавления целевого индекса в состояние кластера — он не ждёт начала операции клонирования.
Индексы могут быть клонированы только в том случае, если они соответствуют следующим требованиям:
- Целевой индекс не должен существовать.
- Исходный индекс должен иметь такое же количество первичных фрагментов, как и целевой индекс.
- Узел, обрабатывающий процесс клонирования, должен иметь достаточное количество свободного дискового пространства для размещения второй копии существующего индекса.
API _clone аналогичен API create index и принимает параметры settings и aliases для целевого индекса:
POST /my_source_index/_clone/my_target_index
{
"settings": {
"index.number_of_shards": 5
},
"aliases": {
"my_search_indices": {}
}
} | Количество фрагментов в целевом индексе. Это значение должно быть равно количеству фрагментов в исходном индексе. |
Карты не могут быть указаны в запросе _clone. Карты исходного индекса будут использоваться для целевого индекса.
Мониторинг процесса клонирования
Процесс клонирования можно отслеживать с помощью _cat recovery API, или API cluster health можно использовать для ожидания, пока все первичные фрагменты не будут назначены, установив параметр wait_for_status в yellow.
API _clone возвращает результат как только целевой индекс был добавлен в состояние кластера, до того как фрагменты были назначены. В этот момент все фрагменты находятся в состоянии unassigned. Если по какой-либо причине целевой индекс не может быть назначен, его первичный фрагмент останется unassigned, пока он не сможет быть назначен на этот узел.
После того, как первичный фрагмент назначен, он переходит в состояние initializing, и начинается процесс клонирования. Когда операция клонирования завершена, фрагмент станет active. В этот момент Elasticsearch попытается назначить любые реплики и может принять решение о перемещении первичного фрагмента на другой узел.
Ожидание активных фрагментов
Поскольку операция клонирования создаёт новый индекс для клонирования фрагментов, настройка ожидания активных фрагментов при создании индекса также применяется к действию клонирования индекса.
Параметры пути
-
<index> - (Обязательный, строка) Название исходного индекса для клонирования.
-
<target-index> -
(Обязательный, строка) Название целевого индекса для создания.
Имена индексов должны соответствовать следующим критериям:
- Только строчные буквы
- Нельзя включать
\,/,*,?,",<,>,|, ` ` (пробел),,,# - Индексы до 7.0 могли содержать двоеточие (
:), но это устарело и не будет поддерживаться в 7.0+ - Не могут начинаться с
-,_,+ - Не могут быть
.или.. - Не могут быть длиннее 255 байт (обратите внимание, это байты, поэтому многобайтные символы быстрее достигнут лимита в 255)
- Имена, начинающиеся с
., устарели, за исключением скрытых индексов и внутренних индексов, управляемых плагинами.
Параметры запроса
-
wait_for_active_shards -
(Необязательный, строка) Количество копий фрагментов, которые должны быть активными перед продолжением операции. Установите значение в
allили любое положительное целое число до общего количества фрагментов в индексе (number_of_replicas+1). По умолчанию: 1, первичный фрагмент.См. Активные фрагменты.
-
master_timeout - (Необязательный, единицы измерения времени) Время ожидания соединения с узлом-мастером. Если ответ не получен до истечения таймаута, запрос завершается ошибкой. По умолчанию
30s. -
timeout - (Необязательный, единицы измерения времени) Время ожидания ответа. Если ответ не получен до истечения таймаута, запрос завершается ошибкой. По умолчанию
30s.
Тело запроса
-
aliases -
(Необязательно, объект из объектов) Псевдонимы для результирующего индекса.
Свойства объектов
aliases-
<alias> -
(Обязательно, объект) Ключ — это имя псевдонима. Имена псевдонимов индекса поддерживают математику дат.
Тело объекта содержит параметры для псевдонима. Поддерживается пустой объект.
Свойства
<alias>-
filter - (Необязательно, объект Query DSL) Запрос, используемый для ограничения документов, к которым может получить доступ псевдоним.
-
index_routing - (Необязательно, строка) Значение, используемое для маршрутизации операций индексирования на определенный фрагмент. Если указано, это значение переопределяет значение
routingдля операций индексирования. -
is_hidden - (Необязательно, логическое значение) Если
true, псевдоним скрыт. По умолчаниюfalse. Все индексы для псевдонима должны иметь одинаковое значениеis_hidden. -
is_write_index - (Необязательно, логическое значение) Если
true, индекс является записываемым индексом для псевдонима. По умолчаниюfalse. -
routing - (Необязательно, строка) Значение, используемое для маршрутизации операций индексирования и поиска на определенный фрагмент.
-
search_routing - (Необязательно, строка) Значение, используемое для маршрутизации операций поиска на определенный фрагмент. Если указано, это значение переопределяет значение
routingдля операций поиска.
-
-
-
settings - (Необязательно, объект настроек индекса) Параметры конфигурации целевого индекса. См. Настройки индекса.
© 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/indices-clone-index.html