Восстановление сервисов платформы
В данном разделе описаны шаги для восстановления сервисов платформы MiniO, NATS и Dkron.
| Все работы по восстановлению производятся с учетом, что настроены соответствующие секреты и задачи (job) резервного копирования. Подробности приведены в разделе Резервное копирование сервисов платформы. |
Восстановление MiniO
Чтобы восстановить MiniO:
-
Подключитесь к кластеру Kubernetes.
-
Задайте необходимые переменные, выполнив команду:
export NAMESPACE="<namespace>" export IMAGE="harbor.rvision.pro/tools/backup-wrapper:v1.0.0"Здесь:
-
<namespace>— название пространства имен, в котором установлена система.
-
-
Запустите под для восстановления MiniO, выполнив команду:
kubectl run restore-minio -n "$NAMESPACE" --rm -it \ --image="$IMAGE" --restart=Never \ --overrides='{ "spec": { "containers": [{ "name": "restore", "image": "'"$IMAGE"'", "command": ["/bin/ash"], "stdin": true, "tty": true, "envFrom": [{"secretRef": {"name": "backup-minio"}}] }] } }' -
Подключитесь к созданному поду, выполнив команду:
kubectl exec -it restore-minio -n "$NAMESPACE" -- /bin/sh -
Настройте сокращенные имена подключения к S3-совместимому хранилищу (aliases), выполнив команду:
mc alias set source "$SOURCE_ENDPOINT" "$SOURCE_ACCESS_KEY" "$SOURCE_SECRET_KEY" mc alias set target "$S3_ENDPOINT" "$S3_ACCESS_KEY" "$S3_SECRET_KEY" -
Проверьте список доступных резервных копий MiniO, выполнив команду
mc ls "target/${S3_BUCKET}/backups/minio/"Также вы можете посмотреть объем памяти, который занимают резервные копии MiniO. Для этого выполните команду:
mc du "target/${S3_BUCKET}/backups/minio/" -
Выполните следующий скрипт восстановления в командной строке:
IFS=, for bucket in $BUCKETS; do echo "Восстановление: $bucket" mc mb --ignore-existing "source/${bucket}" mc mirror --preserve --overwrite \ "target/${S3_BUCKET}/backups/minio/${bucket}" \ "source/${bucket}" done -
Дождитесь успешного восстановления каждого контейнера (bucket) MiniO.
Восстановление NATS
Чтобы восстановить NATS:
-
Подключитесь к кластеру Kubernetes.
-
Задайте необходимые переменные, выполнив команду:
export NAMESPACE="<namespace>" export IMAGE="harbor.rvision.pro/tools/backup-wrapper:v1.0.0"Здесь:
-
<namespace>— название пространства имен, в котором установлена система.
-
-
Запустите под для восстановления NATS, выполнив команду:
kubectl run restore-nats -n "$NAMESPACE" --rm -it \ --image="$IMAGE" --restart=Never \ --overrides='{ "spec": { "containers": [{ "name": "restore", "image": "'"$IMAGE"'", "command": ["/bin/ash"], "stdin": true, "tty": true, "envFrom": [{"secretRef": {"name": "backup-nats"}}] }] } }' -
Подключитесь к созданному поду, выполнив команду:
kubectl exec -it restore-nats -n "$NAMESPACE" -- /bin/sh -
Настройте сокращенное имя подключения к S3-совместимому хранилищу (alias), выполнив команду:
mc alias set target "$S3_ENDPOINT" "$S3_ACCESS_KEY" "$S3_SECRET_KEY" -
Проверьте список доступных резервных копий NATS, выполнив команду:
mc ls "target/${S3_BUCKET}/backups/nats/" -
Скопируйте необходимую резервную копию в локальную директорию
/tmp/, выполнив команду:mc cp "target/${S3_BUCKET}/backups/nats/<backup_name>" /tmp/Здесь:
-
<backup_name>— название файла резервной копии, например,nats-backup.tar.
-
-
Создайте директорию для восстановления и распакуйте данные резервной копии, выполнив команды:
mkdir -p /tmp/nats-restore tar -xf /tmp/nats-backup.tar -C /tmp/nats-restore -
Настройте переменные подключения к NATS, выполнив команду:
NATS_OPTS="--server=${NATS_URL}" case "${NATS_AUTH_MODE:-none}" in token) NATS_OPTS="$NATS_OPTS --token=${NATS_TOKEN}" ;; userpass) NATS_OPTS="$NATS_OPTS --user=${NATS_USER} --password=${NATS_PASSWORD}" ;; creds) NATS_OPTS="$NATS_OPTS --creds=/etc/nats/nats.creds" ;; nkey) NATS_OPTS="$NATS_OPTS --nkey=/etc/nats/nats.nkey" ;; esac -
Проверьте подключение к NATS, выполнив команду:
nats $NATS_OPTS account info -
Создайте резервную копию нынешнего состояния NATS, выполнив команды:
mkdir -p /tmp/pre-restore for s in $(nats $NATS_OPTS stream ls --json -a 2>/dev/null \ | tr -d '[]",' | sed '/^$/d; s/^[[:space:]]*//' ); do nats $NATS_OPTS stream backup "$s" "/tmp/pre-restore/$s" --no-progress 2>/dev/null || true done -
Восстановите каждый стрим NATS, выполнив скрипт в командной строке:
BACKUP_DIR=$(find /tmp/nats-restore -mindepth 1 -maxdepth 1 -type d | head -1) for stream_dir in "$BACKUP_DIR"/*/; do stream_name="${stream_dir%/}" stream_name="${stream_name##*/}" # В восстановлении участвуют только каталоги. JSON-метаданные пропускаются. [ ! -d "$stream_dir" ] && continue echo "Восстановление: $stream_name" nats $NATS_OPTS stream rm "$stream_name" --force 2>/dev/null || true # Имя стрима берётся из метаданных внутри резервной копии. nats $NATS_OPTS stream restore "${stream_dir%/}" done -
Проверьте, что все стримы NATS восстановились корректно, с помощью команды:
nats $NATS_OPTS stream ls
Восстановление Dkron
Чтобы восстановить Dkron:
-
Подключитесь к кластеру Kubernetes.
-
Задайте необходимые переменные, выполнив команду:
export NAMESPACE="<namespace>" export IMAGE="harbor.rvision.pro/tools/backup-wrapper:v1.0.0"Здесь:
-
<namespace>— название пространства имен, в котором установлена система.
-
-
Запустите под для восстановления NATS, выполнив команду:
kubectl run restore-dkron -n "$NAMESPACE" --rm -it \ --image="$IMAGE" --restart=Never \ --overrides='{ "spec": { "containers": [{ "name": "restore", "image": "'"$IMAGE"'", "command": ["/bin/ash"], "stdin": true, "tty": true, "envFrom": [{"secretRef": {"name": "backup-dkron"}}] }] } }' -
Подключитесь к созданному поду, выполнив команду:
kubectl exec -it restore-dkron -n "$NAMESPACE" -- /bin/sh -
Настройте имя подключения к S3-совместимому хранилищу (alias), выполнив команду:
mc alias set target "$S3_ENDPOINT" "$S3_ACCESS_KEY" "$S3_SECRET_KEY" -
Проверьте список доступных резервных копий, выполнив команду:
mc ls "target/${S3_BUCKET}/backups/dkron/" -
Скачайте необходимую резервную копию Dkron в локальную директорию
/tmp/, выполнив команду:mc cp "target/${S3_BUCKET}/backups/dkron/jobs.json" /tmp/dkron-restore.json -
Проверьте содержимое резервной копии, выполнив команду:
grep -c '"name"' /tmp/dkron-restore.json -
Разделите хост и порт из переменной
DKRON_ENDPOINT, выполнив команду:DKRON_HOST="${DKRON_ENDPOINT%%:*}" DKRON_PORT="${DKRON_ENDPOINT##*:}" [ "$DKRON_PORT" = "$DKRON_HOST" ] && DKRON_PORT=8080 -
Восстановите Dkron, выполнив скрипт в командной строке:
tr -d '\n\r' < /tmp/dkron-restore.json \ | sed 's/^\[{/{/; s/}\]$/}/' \ | sed 's/},{/}\n{/g' \ | while IFS= read -r job; do _name=$(echo "$job" | sed -n 's/.*"name"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/p') _len=$(printf '%s' "$job" | wc -c) echo "Восстановление job: ${_name:-?}" { printf "POST /v1/jobs HTTP/1.1\r\n" printf "Host: %s\r\n" "$DKRON_HOST" printf "Content-Type: application/json\r\n" printf "Content-Length: %d\r\n" "$_len" printf "Connection: close\r\n" printf "\r\n" printf '%s' "$job" } | nc "$DKRON_HOST" "$DKRON_PORT" echo "" done -
Проверьте, что Dkron корректно восстановился, с помощью команды:
wget -qO- "http://${DKRON_HOST}:${DKRON_PORT}/v1/jobs" | head -c 500
Была ли полезна эта страница?