Резервное копирование данных
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)'
-
Убедитесь, что веб-интерфейс платформы доступен.