Восстановление базы данных из снапшота
Перед началом работы
Если вы копируете незашифрованный репозиторий напрямую из исходного бакета, перейдите к шагу 1 в разделе «Восстановление базы данных». Если бэкап уже выгружен через backup-exporter, сначала выполните шаги ниже, так как выгрузка backup-exporter шифруется через rclone crypt. OpenSearch не может читать её напрямую: сначала нужно распаковать ключи и расшифровать репозиторий.
Чтение конфигурационного файла
В корне выгрузки кластера найдите каталог __migration__/. Скачайте config-<timestamp>.json нужного успешного запуска.
rclone lsf export-s3:export-bucket/cluster-id/__migration__/
rclone copyto export-s3:export-bucket/cluster-id/__migration__/config-<timestamp>.json ./export-config.json
jq '.opensearch | {encryption, repository, key_archive}' export-config.json
Здесь export-s3 — настроенный rclone remote типа s3 с доступом к бакету выгрузки. Если при экспорте задан дополнительный префикс, добавьте его перед cluster-id/.
Если opensearch.encryption имеет значение rclone-crypt, продолжайте выполнять действия по инструкции. Если метаданные отсутствуют и способ выгрузки неизвестен, уточните его у исполнителя экспорта, прежде чем подключать репозиторий.
Получение ключей
В opensearch.key_archive указаны имя архива (file), идентификатор секрета Lockbox (kek_secret_id) и версия секрета (kek_version_id). Используйте архив из того же конфига. Не используйте произвольный архив из каталога.
umask 077
KEY_ARCHIVE=$(jq -er '.opensearch.key_archive.file' export-config.json)
REPOSITORY=$(jq -er '.opensearch.repository' export-config.json)
rclone copyto "export-s3:export-bucket/cluster-id/__migration__/${KEY_ARCHIVE}" "./${KEY_ARCHIVE}"
mkdir -p keys
7z x "./${KEY_ARCHIVE}" -o./keys
chmod 600 keys/opensearch-crypt.json
По запросу 7-Zip введите пароль из указанной версии секрета Lockbox. Внутри находится opensearch-crypt.json с настройками crypt и значениями password, password2, которые понадобятся для расшифровки репозитория.
Настройка rclone crypt
-
Запустите
rclone configи создайте remoteexport-crypt:Параметр Значение Тип cryptremote export-s3:export-bucket/cluster-id/filename_encryption offdirectory_name_encryption falsepassword точное значение passwordизkeys/opensearch-crypt.jsonpassword2 точное значение password2из того же файлаДля каждого пароля выберите ввод собственного значения, не генерацию нового. Интерактивный
rclone configсам преобразует пароли для записи в конфиг. Если вы заполняетеrclone.confвручную, открытые значения из JSON сначала нужно обработать черезrclone obscure.Передавайте пароль без завершающего перевода строки, например через
printf '%s'. В старых версиях rclone перевод строки может стать частью пароля. -
Проверьте чтение через crypt remote:
rclone lsf "export-crypt:${REPOSITORY}/" rclone copyto "export-crypt:${REPOSITORY}/index.latest" ./index.latestЧерез crypt remote имена видны без добавленного суффикса
.bin, а содержимое расшифровывается при чтении.
Расшифровка репозитория
-
Настройте remote
restore-s3типа s3 для бакета, который будет читать целевой OpenSearch. Затем скопируйте репозиторий в отдельное пустое место, но не поверх зашифрованной выгрузки:rclone copy "export-crypt:${REPOSITORY}/" \ "restore-s3:restore-bucket/${REPOSITORY}/" --progress rclone check "export-crypt:${REPOSITORY}/" \ "restore-s3:restore-bucket/${REPOSITORY}/" --download --one-way -
Скопируйте выбранный репозиторий, но без
__migration__/. После успешной проверки вы увидите папкуrestore-bucket/${REPOSITORY}/с файлами snapshot-репозитория, которые может читать OpenSearch.
После расшифровки перейдите в раздел «Восстановление базы данных». На шаге 2 укажите бакет с расшифрованными файлами и соответствующий base_path: в приведённых выше командах это restore-bucket и значение REPOSITORY.
Основной сценарий восстановление базы данных требует backups-safe/. Если в метаданных выгрузки указан backups/, возможность внешнего восстановления из имеющихся snapshot нужно подтвердить отдельно.
Клонирование backups-safe/
Важно
Этот шаг нужно делать только в том случае, если вы копируете незашифрованный репозиторий напрямую из исходного бакета.
Клонируйте из бакета папку backups-safe/ с помощью утилиты rclone. Весь бакет копировать не нужно. Пример:
rclone --config rclone.conf copy --no-check-certificate --progress --s3-upload-concurrency 50 source:yandexcloud-dbaas-<cid>/backups-safe destination:<target-s3-bucket>/backups-safe
Восстановление базы данных
-
Создайте во внешнем облаке кластер OpenSearch последней версии.
Далее для работы со снапшотами используется публичный API OpenSearch
. -
Создайте
новый S3 репозиторий и передайте в запросе параметры подключения к<target-s3-bucket>.Важно:
base_pathзадайте равнымbackups-safe.Далее считаем, что имя нового репозитория
yc-automatic-backups-safe. -
Получите
идентификатор последнего снапшота:curl --user ... https://new.opensearch.host:9200/_snapshot/yc-automatic-backups-safe/_latestПример ответа:
{ "snapshots": [ { "snapshot": "yc-automatic-backups-safe-2026-10-12-13:37-abcdef", "uuid": "gkp3q-9TQg2RVVRSaix_Gw", "version_id": 136408427, "version": "2.19.6", ... "state": "SUCCESS", ... } ] } -
Убедитесь, что версия вашего кластера OpenSearch выше или равна версии кластера из снапшота с помощью запроса:
curl --user ... https://new.opensearch.host:9200/:Пример ответа:
{ "name": "...", "cluster_name": "...", "cluster_uuid": "...", "version": { "distribution": "opensearch", "number": "2.19.6", ... }, "tagline": "The OpenSearch Project: https://opensearch.org/" } -
Если у вас установлен ISM-плагин, отключите его:
curl --user ... "https://new.opensearch.host:9200/_cluster/settings" -X PUT --data-binary '{"persistent": {"plugins.index_state_management.enabled": false}}'Если ISM-плагин не установлен, перейдите к следующему шагу.
-
Восстановите
из найденного снапшота всё, кроме state и индекса.opendistro-ism-config:curl --user ... "https://new.opensearch.host:9200/_snapshot/yc-automatic-backups-safe/yc-automatic-backups-safe-2026-10-12-13:37-abcdef/_restore?wait_for_completion=true" -X POST --data-binary '{"include_global_state": false, "indices": "*,-.opendistro-ism-config"}' -
Восстановите
.opendistro-ism-config:curl --user ... "https://new.opensearch.host:9200/_snapshot/yc-automatic-backups-safe/yc-automatic-backups-safe-2026-10-12-13:37-abcdef/_restore?wait_for_completion=true" -X POST --data-binary '{"include_global_state": false, "indices": ".opendistro-ism-config"}' -
Восстановите state:
curl --user ... "https://new.opensearch.host:9200/_snapshot/yc-automatic-backups-safe/yc-automatic-backups-safe-2026-10-12-13:37-abcdef/_restore?wait_for_completion=true" -X POST --data-binary '{"include_global_state": true}'
Восстановление кластера завершено.
После завершения восстановления проверьте работоспособность кластера и что все данные восстановились. Если у вас был установлен ISM-плагин, рекомендуем проверить его настройки и если они подходят, ISM-плагин можно включить обратно. Для этого запустите команду из п.4, заменив {"plugins.index_state_management.enabled": false} на {"plugins.index_state_management.enabled": true}.