Резервное копирование данных
Deckhouse Observability Platform предоставляет пользователю возможность выполнить резервное копирование данных путём копирования содержимого S3-бакетов. Помимо метрик и логов, которые сохраняются в S3 во время нормальной работы, модуль также автоматически выполняет резервное копирование базы данных PostgreSQL и сохраняет дамп базы данных в S3. Таким образом, для выполнения резервного копирования данных платформы необходимо скопировать содержимое трех бакетов: mimir — для метрик, loki — для логов и backup — для базы данных.
Настройки резервного копирования базы данных PostgreSQL указываются в ModuleConfig observability-platform. Описание настроек находится в документации модуля.
Способы резервного копирования S3-бакетов
S3-бакеты можно резервировать несколькими способами:
- С помощью утилит
rcloneилиminio-client, которые позволяют синхронизировать содержимое S3-бакетов с локальным хранилищем либо с другим S3-хранилищем. - Смонтировав S3-бакеты в локальную файловую систему с помощью утилиты
s3fsилиgeesefs, а затем выполив резервное копирование с помощью принятых в компании средств резервного копирования.
Использование geesefs
-
Установите
geesefsна сервер, куда будет выполнятся монтирование S3-бакетов. Для этого выполните:curl -L https://github.com/yandex-cloud/geesefs/releases/download/v0.43.0/geesefs-linux-amd64 -o /usr/local/bin/geesefs chmod +x /usr/local/bin/geesefs -
Создайте точки монтирования для S3-бакетов:
mkdir -p /mnt/dop-backup/mimir /mnt/dop-backup/loki /mnt/dop-backup/backup -
Получите файл с учетными данными для доступа к S3-бакетам. Для этого на master-узле Kubernetes выполните:
kubectl -n d8-observability-platform get secrets backup-s3 loki-s3 mimir-s3 -o json | jq -r '.items[] | reduce . as $elt ({}; .[$elt.metadata.name|sub("-s3$"; "")] += [($elt.data | map_values(@base64d) | with_entries(.key |= ascii_downcase) | to_entries[] | "\(.key) = \(.value)")]) | to_entries[] | "[\(.key)]\n\(.value|join("\n"))"'Сохраните вывод команды в файл
/etc/dop-s3-credentialsна сервере, куда будет выполнятся монтирование S3-бакетов. -
Сгенерируйте строки для
/etc/fstab. Для этого на master-узле Kubernetes выполните:kubectl -n d8-observability-platform get cm backup-s3 loki-s3 mimir-s3 -o json | jq --arg endpoint $(kubectl get mc observability-platform -o json | jq -r '"https://s3." + .spec.settings.general.baseDomain') -r '.items[] | (.metadata.name|sub("-s3$"; "")) as $name | "\(.data.BUCKET_NAME) /mnt/dop-backup/\($name) fuse.geesefs _netdev,allow_other,--file-mode=0644,--dir-mode=0755,--shared-config=/etc/dop-s3-credentials,--profile=\($name),--endpoint=\($endpoint) 0 0"'Сохраните вывод команды в файл
/etc/fstabна сервере, куда будет выполнятся монтирование S3-бакетов. -
Смонтируйте S3-бакеты:
mount -a -
Проверьте, что в смонтированных каталогах есть содержимое, например:
ls -l /mnt/dop-backup/backup/postgres-backup -
Выполняйте резервное копирование с помощью принятых в компании средств с необходимой периодичностью.
Использование rclone
-
Установите
rclone:curl -L https://github.com/rclone/rclone/releases/download/v1.69.1/rclone-v1.69.1-linux-amd64.zip -o rclone.zip unzip -p rclone.zip rclone-*-linux-amd64/rclone | sudo tee /usr/local/bin/rclone > /dev/null sudo chmod +x /usr/local/bin/rclone rm rclone.zip -
Сформируйте файл
rclone.conf. Для этого на master-узле Kubernetes выполните:kubectl -n d8-observability-platform get secrets backup-s3 loki-s3 mimir-s3 -o json | jq -r \ --arg endpoint $(kubectl get mc observability-platform -o json | jq -r '"https://s3." + .spec.settings.general.baseDomain') \ --argjson buckets $(kubectl -n d8-observability-platform get cm backup-s3 loki-s3 mimir-s3 -o json | jq -cM 'reduce .items[] as $elt ({}; .[$elt.metadata.name] = $elt.data.BUCKET_NAME)') \ '.items[] | reduce . as $elt ({}; .[$elt.metadata.name] += [($elt.data | map_values(@base64d) | with_entries(.key |= ascii_downcase) | with_entries(.key |= sub("^aws_"; "")) | . += {type: "s3", provider: "Ceph", endpoint: $endpoint} | to_entries[] | "\(.key) = \(.value)")] | .[($elt.metadata.name|sub("-s3$"; ""))] = ["type = alias", "remote = " + ($elt.metadata.name + ":" + $buckets[$elt.metadata.name])]) | to_entries[] | "[\(.key)]\n\(.value|join("\n"))\n"' -
Сохраните вывод команды в файл
rclone.confна сервере, где будет выполнятся резервное копирование. -
Проверьте работоспособность
rclone:rclone --config rclone.conf ls backup: -
Используйте команды
rclone sync/rclone copyдля резервного копирования S3-бакетов.
Восстановление данных
Восстановление данных mimir и loki производится путем загрузки данных из резервной копии обратно в S3-бакеты. Для этого необходимо смонтировать бакеты на сервер, где будет выполнятся восстановление, либо использовать rclone для копирования данных из резервной копии в S3-бакеты аналогично, как это делалось при резервном копировании.
Восстановление базы данных PostgreSQL
Данная инструкция применима для случаев, когда модуль observability-platform развернут вместе со встроенным PostgreSQL. При использовании внешней СУБД PostgreSQL (опция .spec.settings.ui.postgres.mode: External) восстановление базы производится согласно инструкции провайдера СУБД.
-
Перед восстановлением базы данных PostgreSQL необходимо остановить
backendи компонентыalertgate; удалитьcronjobsвзаимодействующие с базой данных:kubectl -n d8-observability-platform scale deploy backend alertgate-receiver alertgate-sender alertgate-api --replicas=0 kubectl -n d8-observability-platform delete cronjob backend-clean-silences host-load postgres-backup -
Убедитесь, что у вас есть необходимый дамп базы и он имеет ненулевой размер. Скопируйте дамп базы на mастер-узел Kubernetes.
-
Удалите существующую базу данных PostgreSQL:
kubectl -n d8-observability-platform exec -it $(kubectl -n d8-observability-platform get po -l spilo-role=master -o name) -- psql -U dop -c "DROP DATABASE dop;" postgres -
Создайте базу данных
dopзаново:kubectl -n d8-observability-platform exec -it $(kubectl -n d8-observability-platform get po -l spilo-role=master -o name) -- psql -U dop -c "CREATE DATABASE dop;" postgres -
Восстановите базу данных из резервной копии:
zcat dop-202504211200.dump.gz | kubectl -n d8-observability-platform exec -it $(kubectl -n d8-observability-platform get po -l spilo-role=master -o name) -- psql -U dop dop -
Запустите
backendи компонентыalertgate:kubectl -n d8-observability-platform scale deploy backend alertgate-receiver alertgate-sender alertgate-api --replicas=2 -
Проверьте, что все поды запущены и работают:
kubectl -n d8-observability-platform get po -l 'app in (backend,alertgate-receiver,alertgate-sender,alertgate-api)' -
Убедитесь, что веб-интерфейс платформы доступен.