Снимок Elasticsearch - это резервная копия индекса, взятая из работающего кластера. Снимки делаются инкрементально. Это означает, что при создании снимка индекса Elasticsearch не будет копировать данные, которые уже были сохранены в предыдущем снимке индекса (если только они не были изменены). Поэтому рекомендуется делать снимки часто.
Вы можете восстановить снимки в работающем кластере с помощью API восстановления. Снимки могут быть восстановлены только в тех версиях Elasticsearch, которые могут читать индексы. Перед восстановлением проверьте совместимость версий. Невозможно восстановить индекс в кластер, который более чем на одну версию выше версии индекса.
Поддерживаются следующие типы хранилищ:
- Расположение в файловой системе
- Объектное хранилище S3
- HDFS
- Облачные хранилища Azure и Google
Примеры
Пример использования репозитория S3 для Elasticsearch
1 2 3 4 5 6 7 8 9 | PUT _snapshot/backups { "type": "s3", "settings": { "bucket": "elastic", "endpoint": "10.3.10.10:9000", "protocol": "http" } } |
Также необходимо задать ключ доступа к S3 и секретный ключ в хранилище ключей Elasticsearch.
1 2 | bin/elasticsearch-keystore add s3.client.default.access_key bin/elasticsearch-keystore add s3.client.default.secret_key |
Создание моментального снимка
После установки репо создание моментального снимка сводится к вызову API.
1 | PUT /_snapshot/backup/my_snapshot-01-10-2023 |
Где backup - имя репозитория снапшотов, а my_snapshot-01-10-2023 - имя снапшота. В приведенном выше примере будет сделан моментальный снимок всех индексов. Чтобы сделать снимок определенных индексов, укажите имена индексов, для которых требуется сделать снимок.
1 2 3 4 5 | PUT /_snapshot/backup/my_snapshot-01-10-2023 { "indices": "my_index_1,my_index_2" } } |
Восстановление моментального снимка
Восстановление из моментального снимка также является вызовом API:
1 2 3 4 5 | POST /_snapshot/backup/my_snapshot-01-10-2023 /_restore { "indices": "index_1,index_2" } |
В результате будут восстановлены индексы index_1 и index_2 из моментального снимка my_snapshot-01-10-2019 в хранилище резервных копий.
Примечания и полезные сведения
Перед созданием моментального снимка необходимо настроить репозиторий, а также установить плагин репозитория S3, если вы планируете использовать репозиторий с S3 в качестве внутреннего хранилища.
1 | sudo bin/elasticsearch-plugin install repository-s3 |
- Для автоматизации создания моментальных снимков можно использовать инструмент curator_cli, например расписание заданий Cron, Kenkins или Kubernetes.
- Лучше использовать снимки Elasticsearch вместо дисковых резервных копий/снапшотов. Для восстановления индекс должен быть закрыт.
- Другим вариантом является удаление индекса перед его восстановлением. Механизм моментальных нимков и восстановления также может использоваться для копирования данных с одного кластера на другой.
- Если у вас нет хранилища S3, вы можете запустить minio с бэкендом NFS, чтобы создать эквивалент S3 для моментальных снимков кластера
- При повторной попытке выполнения операции будет выполняться только попытка создания снимков тех шардов, которые не удалось создать при первой операции, до тех пор, пока снимок не будет выполнен успешно.
- Репозиторий моментальных снимков лучше располагать в локальной сети с Elasticsearch или настраивать/проектировать хранилище на высокую пропускную способность записи, чтобы не иметь дело с неполными снимками.
- Операция моментального снимка завершится неудачно, если отсутствует индекс. Установка опции ignore_unavailable в true приведет к тому, что несуществующие индексы будут игнорироваться при выполнении моментального снимка.
- Если вы используете какой-либо инструмент безопасности с открытым исходным кодом, например SearchGuard, то перед восстановлением снимков вам необходимо настроить параметры восстановления снимков Elasticsearch на кластере.
В файле elasticsearch.yml:
1searchguard.enable_snapshot_restore_privilege: true