Spec-Zone.ru › Elasticsearch 8
›Руководство по Elasticsearch [8.17] ›REST API ›API индексов

API клонирования индекса

Новая справка по API

Для получения самых последних деталей API обратитесь к API индексов.

Клонирует существующий индекс.

resp = client.indices.clone(
    index="my-index-000001",
    target="cloned-my-index-000001",
)
print(resp)
const response = await client.indices.clone({
  index: "my-index-000001",
  target: "cloned-my-index-000001",
});
console.log(response);
POST /my-index-000001/_clone/cloned-my-index-000001

Запрос

POST /<index>/_clone/<target-index>

PUT /<index>/_clone/<target-index>

Предварительные условия

  • Если включены функции безопасности Elasticsearch, у вас должна быть manage привилегия доступа к индексу для индекса, который вы хотите клонировать.
  • Для клонирования индекса индекс должен быть помечен как только для чтения и иметь статус состояния кластера green.

Например, следующий запрос предотвращает операции записи на my_source_index, чтобы он мог быть клонирован с помощью API добавления блока индекса. Изменения метаданных, такие как удаление индекса, всё ещё разрешены.

resp = client.indices.add_block(
    index="my_source_index",
    block="write",
)
print(resp)
response = client.indices.add_block(
  index: 'my_source_index',
  block: 'write'
)
puts response
const response = await client.indices.addBlock({
  index: "my_source_index",
  block: "write",
});
console.log(response);
PUT /my_source_index/_block/write

Текущий индекс записи в потоке данных не может быть клонирован. Для клонирования текущего индекса записи поток данных должен быть сначала перенесён, чтобы был создан новый индекс записи, а затем предыдущий индекс записи может быть клонирован.

Описание

Используйте API клонирования индекса, чтобы клонировать существующий индекс в новый индекс, где каждый исходный первичный фрагмент клонируется в новый первичный фрагмент в новом индексе.

Elasticsearch не применяет шаблоны индексов к результирующему индексу. API также не копирует метаданные индекса из исходного индекса. Метаданные индекса включают алиасы, определения фаз ILM и информацию о фолловерах CCR. Например, если вы клонируете индекс фолловера CCR, результирующий клон не будет индексом фолловера.

API клонирования копирует большинство настроек индекса из исходного индекса в результирующий индекс, за исключением index.number_of_replicas и index.auto_expand_replicas. Чтобы установить количество реплик в результирующем индексе, настройте эти параметры в запросе на клонирование.

Как работает клонирование

Клонирование работает следующим образом:

  • Сначала создаётся новый целевой индекс с таким же определением, как и исходный индекс.
  • Затем происходит жёсткое связывание сегментов из исходного индекса в целевой индекс. (Если файловая система не поддерживает жёсткое связывание, все сегменты копируются в новый индекс, что является гораздо более длительной процедурой.)
  • Наконец, выполняется восстановление целевого индекса так, как будто это закрытый индекс, который только что был повторно открыт.

Клонирование индекса

Чтобы клонировать my_source_index в новый индекс под названием my_target_index, отправьте следующий запрос:

resp = client.indices.clone(
    index="my_source_index",
    target="my_target_index",
)
print(resp)
response = client.indices.clone(
  index: 'my_source_index',
  target: 'my_target_index'
)
puts response
const response = await client.indices.clone({
  index: "my_source_index",
  target: "my_target_index",
});
console.log(response);
POST /my_source_index/_clone/my_target_index

Вышеупомянутый запрос возвращает результат сразу же, как только целевой индекс был добавлен в состояние кластера — он не ждёт начала операции клонирования.

Индексы могут быть клонированы только в том случае, если они соответствуют следующим требованиям:

  • Целевой индекс не должен существовать.
  • Исходный индекс должен иметь то же количество первичных фрагментов, что и целевой индекс.
  • У узла, обрабатывающего процесс клонирования, должно быть достаточно свободного дискового пространства для размещения второй копии существующего индекса.

API _clone аналогичен API create index и принимает параметры settings и aliases для целевого индекса:

resp = client.indices.clone(
    index="my_source_index",
    target="my_target_index",
    settings={
        "index.number_of_shards": 5
    },
    aliases={
        "my_search_indices": {}
    },
)
print(resp)
response = client.indices.clone(
  index: 'my_source_index',
  target: 'my_target_index',
  body: {
    settings: {
      'index.number_of_shards' => 5
    },
    aliases: {
      my_search_indices: {}
    }
  }
)
puts response
const response = await client.indices.clone({
  index: "my_source_index",
  target: "my_target_index",
  settings: {
    "index.number_of_shards": 5,
  },
  aliases: {
    my_search_indices: {},
  },
});
console.log(response);
POST /my_source_index/_clone/my_target_index
{
  "settings": {
    "index.number_of_shards": 5 
  },
  "aliases": {
    "my_search_indices": {}
  }
}

Количество фрагментов в целевом индексе. Оно должно быть равно количеству фрагментов в исходном индексе.

Карты отображения не могут быть указаны в запросе _clone. Карты отображения исходного индекса будут использоваться для целевого индекса.

Мониторинг процесса клонирования

Процесс клонирования можно отслеживать с помощью API _cat recovery, или 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. Также может быть установлено значение -1, чтобы указать, что запрос никогда не должен истекать.
timeout
(Необязательно, единицы измерения времени) Период ожидания ответа от всех соответствующих узлов в кластере после обновления метаданных кластера. Если ответ не получен до истечения срока ожидания, обновление метаданных кластера все равно применяется, но ответ будет указывать, что оно не было полностью подтверждено. По умолчанию значение равно 30s. Также может быть установлено значение -1, чтобы указать, что запрос никогда не должен истекать.

Тело запроса

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/8.17/indices-clone-index.html

Spec-Zone.ru

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