Spec-Zone.ru › Elasticsearch 7
›Elasticsearch Руководство [7.17] ›Снапшоты и восстановление

Восстановление снапшота

Это руководство показывает, как восстановить моментальную копию. Моментальные копии — удобный способ сохранить копию ваших данных вне кластера. Вы можете восстановить моментальную копию для восстановления индексов и потоков данных после удаления или сбоя оборудования. Вы также можете использовать моментальные копии для переноса данных между кластерами.

В этом руководстве вы узнаете, как:

  • Получить список доступных моментальных копий
  • Восстановить индекс или поток данных из моментальной копии
  • Восстановить состояние функции
  • Восстановить весь кластер
  • Отслеживать операцию восстановления
  • Отменить текущую операцию восстановления

В этом руководстве также приводятся советы по восстановлению в другой кластер и отладке распространённых ошибок восстановления.

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

  • Для использования функции Моментальные копии и Восстановление Kibana, у вас должны быть следующие разрешения:

    • Разрешения на кластер: monitor, manage_slm, cluster:admin/snapshot и cluster:admin/repository
    • Разрешение на индексы: all на индекс monitor
  • Вы можете восстановить моментальную копию только в работающем кластере с избранным главным узлом. Репозиторий моментальной копии должен быть зарегистрирован и доступен для кластера.
  • Версии моментальной копии и кластера должны быть совместимы. См. Совместимость моментальных копий.
  • Для восстановления моментальной копии глобальные метаданные кластера должны быть доступны для записи. Убедитесь, что нет блоков кластера, препятствующих записи. Операция восстановления игнорирует блоки индексов.
  • Перед восстановлением потока данных убедитесь, что кластер содержит соответствующую шаблон индекса с включённым потоком данных. Для проверки используйте функцию Управление индексами Kibana или API получения шаблона индекса:

    GET _index_template/*?filter_path=index_templates.name,index_templates.index_template.index_patterns,index_templates.index_template.data_stream

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

  • Если ваша моментальная копия содержит данные из App Search или Workplace Search, убедитесь, что вы восстановили ключ шифрования Enterprise Search перед восстановлением моментальной копии.

Учитываемые моменты

При восстановлении данных из моментальной копии имейте в виду следующее:

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

Получение списка доступных моментальных копий

Чтобы просмотреть список доступных моментальных копий в Kibana, перейдите в главное меню и нажмите Управление стеком > Моментальные копии и Восстановление.

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

GET _snapshot

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

GET _snapshot/my_repository/*?verbose=false

Восстановление индекса или потока данных

Вы можете восстановить моментальную копию с помощью функции Моментальные копии и Восстановление Kibana или API восстановления моментальной копии.

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

Если вы восстанавливаете данные в существующий кластер, используйте один из следующих методов, чтобы избежать конфликтов с существующими индексами и потоками данных:

  • Удалить и восстановить
  • Переименовать при восстановлении

Некоторые функции Elasticsearch автоматически создают системные индексы при запуске кластера. Чтобы избежать конфликтов с этими системными индексами при восстановлении данных в новый кластер, см. Исключение системных индексов.

Удалить и восстановить

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

Не используйте API удаления индекса для целевого использования * или .* шаблона подстановочных символов. Если вы используете функции безопасности Elasticsearch, это удалит системные индексы, необходимые для аутентификации. Вместо этого используйте шаблон *,-.* подстановочных символов, чтобы исключить эти системные индексы и другие имена индексов, начинающиеся с точки (.).

# Delete an index
DELETE my-index

# Delete a data stream
DELETE _data_stream/logs-my_app-default

В запросе на восстановление явно укажите любые индексы и потоки данных для восстановления.

POST _snapshot/my_repository/my_snapshot_2099.05.06/_restore
{
  "indices": "my-index,logs-my_app-default"
}

Переименовать при восстановлении

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

Перед началом убедитесь, что кластер имеет достаточную ёмкость для существующих и восстановленных данных.

Следующий запрос API восстановления моментальной копии добавляет restored- к имени любого восстановленного индекса или потока данных.

POST _snapshot/my_repository/my_snapshot_2099.05.06/_restore
{
  "indices": "my-index,logs-my_app-default",
  "rename_pattern": "(.+)",
  "rename_replacement": "restored-$1"
}

Если опции переименования создают два или более индексов или потоков данных с одинаковым именем, операция восстановления завершится неудачно.

Если вы переименовываете поток данных, его резервные индексы также переименовываются. Например, если вы переименовали поток данных logs-my_app-default в restored-logs-my_app-default, резервный индекс .ds-logs-my_app-default-2099.03.09-000005 переименовывается в .ds-restored-logs-my_app-default-2099.03.09-000005.

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

# Delete the original index
DELETE my-index

# Reindex the restored index to rename it
POST _reindex
{
  "source": {
    "index": "restored-my-index"
  },
  "dest": {
    "index": "my-index"
  }
}

# Delete the original data stream
DELETE _data_stream/logs-my_app-default

# Reindex the restored data stream to rename it
POST _reindex
{
  "source": {
    "index": "restored-logs-my_app-default"
  },
  "dest": {
    "index": "logs-my_app-default",
    "op_type": "create"
  }
}

Исключение системных индексов

Некоторые функции Elasticsearch, такие как процессор GeoIP, автоматически создают системные индексы при запуске. Чтобы избежать конфликтов имён с этими индексами, используйте шаблон -.* подстановочных символов, чтобы исключить системные индексы и другие индексы с точкой (.) из запроса на восстановление.

Например, следующий запрос использует шаблон *,-.* подстановочных символов, чтобы восстановить все индексы и потоки данных, кроме индексов с точкой.

POST _snapshot/my_repository/my_snapshot_2099.05.06/_restore
{
  "indices": "*,-.*"
}

Восстановление состояния функции

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

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

Чтобы просмотреть состояния функций моментальной копии, используйте API получения моментальной копии.

GET _snapshot/my_repository/my_snapshot_2099.05.06

Свойство feature_states ответа содержит список функций в моментальной копии, а также индексы каждой функции.

Для восстановления определенного состояния функции из моментального снимка укажите feature_name из ответа в параметре feature_states API восстановления моментального снимка. При восстановлении состояния функции Elasticsearch закрывает и перезаписывает существующие индексы функции.

Восстановление состояния функции security перезаписывает системные индексы, используемые для аутентификации. Если вы используете Elasticsearch Service, убедитесь, что у вас есть доступ к консоли Elasticsearch Service перед восстановлением состояния функции security. Если вы запускаете Elasticsearch на собственном оборудовании, создайте суперпользователя в файловом домене, чтобы сохранить доступ к кластеру.

Чтобы избежать случайного восстановления системных индексов, системных потоков данных и других индексов с точкой, добавьте шаблон подстановки -.* к значению indices.

POST _snapshot/my_repository/my_snapshot_2099.05.06/_restore
{
  "indices": "*,-.*",
  "feature_states": [ "geoip" ]
}

Восстановление всего кластера

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

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

Если вы восстанавливаете в другой кластер, см. Восстановление в другой кластер перед началом.

  1. Если вы совершили резервное копирование конфигурационных файлов кластера, вы можете восстановить их на каждом узле. Этот шаг необязателен и требует полной перезагрузки кластера.

    После остановки узла скопируйте резервные копии конфигурационных файлов в каталог $ES_PATH_CONF узла. Перед перезапуском узла убедитесь, что elasticsearch.yml содержит соответствующие роли узла, имя узла и другие настройки, специфичные для узла.

    Если вы решили выполнить этот шаг, повторите его на каждом узле кластера.

  2. Временно остановите индексирование и отключите следующие функции:

    • Загрузчик базы данных GeoIP

      PUT _cluster/settings
      {
        "persistent": {
          "ingest.geoip.downloader.enabled": false
        }
      }
    • ILM

      POST _ilm/stop
    • Машинное обучение

      POST _ml/set_upgrade_mode?enabled=true
    • Мониторинг

      PUT _cluster/settings
      {
        "persistent": {
          "xpack.monitoring.collection.enabled": false
        }
      }
    • Watcher

      POST _watcher/_stop
  3. Если вы используете функции безопасности Elasticsearch, войдите в систему на узле, перейдите в каталог установки Elasticsearch и добавьте пользователя с ролью superuser в файловый домен с помощью инструмента elasticsearch-users.

    Например, следующая команда создает пользователя с именем restore_user.

    ./bin/elasticsearch-users useradd restore_user -p my_password -r superuser

    Используйте этого пользователя файлового домена для аутентификации запросов до завершения операции восстановления.

  4. Используйте API обновления настроек кластера для установки action.destructive_requires_name в значение false. Это позволяет удалять потоки данных и индексы с помощью подстановочных символов.

    PUT _cluster/settings
    {
      "persistent": {
        "action.destructive_requires_name": false
      }
    }
  5. Удалите все существующие потоки данных в кластере.

    DELETE _data_stream/*?expand_wildcards=all
  6. Удалите все существующие индексы в кластере.

    DELETE *?expand_wildcards=all
  7. Восстановите весь моментальный снимок, включая состояние кластера. По умолчанию, при восстановлении состояния кластера также восстанавливаются все состояния функций в моментальном снимке.

    POST _snapshot/my_repository/my_snapshot_2099.05.06/_restore
    {
      "indices": "*",
      "include_global_state": true
    }
  8. По завершении операции восстановления, возобновите индексирование и перезапустите все остановленные функции:

    При восстановлении моментального снимка будет восстановлена лицензия, которая использовалась во время создания моментального снимка. Если ваша лицензия истекла с момента создания моментального снимка, вам потребуется использовать API обновления лицензии для установки актуальной лицензии.

    • Загрузчик базы данных GeoIP

      PUT _cluster/settings
      {
        "persistent": {
          "ingest.geoip.downloader.enabled": true
        }
      }
    • ILM

      POST _ilm/start
    • Машинное обучение

      POST _ml/set_upgrade_mode?enabled=false
    • Мониторинг

      PUT _cluster/settings
      {
        "persistent": {
          "xpack.monitoring.collection.enabled": true
        }
      }
    • Watcher

      POST _watcher/_start

Отслеживание восстановления

Операция восстановления использует процесс восстановления фрагментов для восстановления первичных фрагментов индекса из моментального снимка. В то время как операция восстановления восстанавливает первичные фрагменты, кластер будет иметь состояние yellow состояния здоровья.

После восстановления всех первичных фрагментов процесс репликации создает и распределяет реплики по соответствующим узлам данных. После завершения репликации состояние здоровья кластера обычно становится green.

После запуска восстановления в Kibana вы перенаправлены на страницу Статус восстановления. На этой странице вы можете отслеживать текущее состояние каждого фрагмента в моментальном снимке.

Вы также можете отслеживать восстановление моментального снимка с помощью API Elasticsearch. Для мониторинга состояния здоровья кластера используйте API состояния здоровья кластера.

GET _cluster/health

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

GET my-index/_recovery

Чтобы просмотреть любые неназначенные фрагменты, используйте API cat shards.

GET _cat/shards?v=true&h=index,shard,prirep,state,node,unassigned.reason&s=state

Неназначенные фрагменты имеют состояние state UNASSIGNED. Значение prirep равно p для первичных фрагментов и r для реплик. Значение unassigned.reason описывает причину того, почему фрагмент остался неназначенным.

Для получения более подробного объяснения статуса распределения неназначенного фрагмента используйте API объяснения распределения кластера.

GET _cluster/allocation/explain
{
  "index": "my-index",
  "shard": 0,
  "primary": false,
  "current_node": "my-node"
}

Отмена восстановления

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

# Delete an index
DELETE my-index

# Delete a data stream
DELETE _data_stream/logs-my_app-default

Восстановление в другой кластер

Elasticsearch Service может помочь вам восстановить моментальные снимки из других развертываний. См. Работа с моментальными снимками.

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

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

Перед началом операции восстановления убедитесь, что новый кластер имеет достаточную емкость для всех потоков данных или индексов, которые вы хотите восстановить. Если у нового кластера меньшая емкость, вы можете:

  • Добавить узлы или обновить оборудование для увеличения емкости.
  • Восстановить меньше индексов и потоков данных.
  • Уменьшить количество реплик для восстановленных индексов.

    Например, следующий запрос API восстановления моментального снимка использует параметр index_settings для установки index.number_of_replicas в значение 1.

    POST _snapshot/my_repository/my_snapshot_2099.05.06/_restore
    {
      "indices": "my-index,logs-my_app-default",
      "index_settings": {
        "index.number_of_replicas": 1
      }
    }

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

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

Устранение неполадок при восстановлении

Вот как исправить распространённые ошибки, возвращаемые запросами на восстановление.

Невозможно восстановить индекс [<index>], потому что открытый индекс с тем же именем уже существует в кластере

Вы не можете восстановить открытый индекс, который уже существует. Чтобы исправить эту ошибку, попробуйте один из методов в Восстановление индекса или потока данных.

Невозможно восстановить индекс [<index>] с [x] фрагментами из снимка индекса [<snapshot-index>] с [y] фрагментами

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

Чтобы исправить эту ошибку, попробуйте один из методов в Восстановление индекса или потока данных.

© 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/snapshots-restore-snapshot.html

Spec-Zone.ru

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