Перейти к содержанию

Описание процесса восстановления из резервной копии

Данный раздел описывает процедуру восстановления данных для кластера Teamstorm и Test IT в случае системного сбоя.

ВНИМАНИЕ

Для восстановления работы кластера нужно установить "чистую" версию Teamstorm и Test IT. Пожалуйста, перед восстановлением убедитесь, что cистема пустая и работает корректно.

Резервное копирование данных

Восстановление данных из резервной состоит из двух шагов и выполняется в порядке, обратном созданию резервных копий.

  1. Восстановление разделов докер контейнеров.
  2. Восстановление баз данных Postgres из ранее созданных дампов.

Cоздание файлового архива необходимых разделов докер контейнеров

1.1. Для восстановления разделов контейнеров кластера нужно иметь привилегии root пользователя, так как по-умолчанию только root имеет доступ к этим разделам файловой структуры. Создайте временную директорию и перейдите в нее. Затем скопируйте сюда архив, содержащий разделы контейнеров докер.

```shell
root@server: /root/ $ mkdir /tmp/volumes_backup
root@server: /root/ $ cd /tmp/volumes_backup
root@server: /tmp/volumes_backup/ $ scp backup-server:/teamstorm/volumes_backup.tgz .
root@server: /tmp/volumes_backup/ $ tar -xzvf volumes_backup.tgz
testit_ssl-volume/
testit_minio-data-volume/
testit_avatars-minio-data-volume/
root@server: /tmp/volumes_backup/ $ rm -f volumes_backup.tgz
```

1.2. Перенесите директории в папку c разделами docker. По умолчанию это /var/lib/docker/volumes/

```shell
mv testit_ssl-volume testit_minio-data-volume testit_avatars-minio-data-volume \
                                                            /var/lib/docker/volumes/
```

ВНИМАНИЕ

Пользователь root больше не нужен, остальные операции можно делать из-под "обычного" пользователя.

Восстановление баз данных Postgres из дампов

Данная процедура описывает баз данных Postgres из предварительно созданных дамов. Процедура автоматизирована и для запуска нужно выполнить следующие действия:

2.1. Перейти в директорию scripts, которая находится внутри директории с артефактами Teamstorm:

```shell
user@server: ~/teamstorm $ cd scripts
user@server: ~/teamstorm/scripts $ ls -lha
total 28
drwxrwxr-x 3 user user 4096 Sep 19 13:24 ./
drwxrwxr-x 4 user user 4096 Sep 19 13:23 ../
-rwxrwx--- 1 user user 1270 Sep 18 11:22 copy_backup.sh*
-rwxrwx--- 1 user user 1275 Sep 18 11:22 db_backup.sh*
-rwxrwx--- 1 user user 1652 Sep 18 11:22 db_restore.sh*
-rw-rw-r-- 1 user user 1737 Sep 18 11:22 postgres-init.sql
```

2.2. Создайте здесь директорию dumps, сохраните туда архив и распакуйте его:

```shell
user@server: ~/teamstorm/scripts $ mkdir dumps
user@server: ~/teamstorm/scripts $ ls -lha
total 28
drwxrwxr-x 3 user user 4096 Sep 19 13:24 ./
drwxrwxr-x 4 user user 4096 Sep 19 13:23 ../
-rwxrwx--- 1 user user 1270 Sep 18 11:22 copy_backup.sh*
-rwxrwx--- 1 user user 1275 Sep 18 11:22 db_backup.sh*
-rwxrwx--- 1 user user 1652 Sep 18 11:22 db_restore.sh*
drwxr-xr-x 2 user user 4096 Sep 19 13:26 dumps/
-rw-rw-r-- 1 user user 1737 Sep 18 11:22 postgres-init.sql
user@server: ~/teamstorm/scripts $ scp backup-server:/teamstorm/teamstorm_2023-09-20_09-42-00_backup.tgz ./dumps/
user@server: ~/teamstorm/scripts $ cd dumps
user@server: ~/teamstorm/scripts/dumps/ $ tar -xzvf teamstorm_2023-09-20_09-42-00_backup.tgz
...
user@server: ~/teamstorm/scripts $ cd ..
```

2.3. Запустите скрипт db_restore.sh, указав целевую директорию и общий суффикс, состоящий из временной метки и расширения, например, для файлов:

```shell
teamstorm_migrations_db_2023-09-20_09-42-00.bak
teamstorm_attachment_db_2023-09-20_09-42-00.bak
teamstormdb_2023-09-20_09-42-00.bak
...
```

Общим суффикcом будет 2023-09-20_09-42-00.bak. Таким образом, команда для восстановления будет выглядеть следующим образом:

```shell
user@server: ~/teamstorm/scripts $ ./db_restore.sh ./dumps 2023-09-20_09-42-00.bak
```

ВНИМАНИЕ

Обращайте внимание на лог восстановления, при необходимости перенаправьте поток вывод в файл для дальнейшего анализа.

Пример успешного восстановления:

```shell
...
Recovering from backup: container: teamstorm-database_service-1 teamstormdb teamstormdb_15-09-2023_15-13.bak
UPDATE 1
pg_terminate_backend
----------------------
t
t
t
t
(4 rows)

DROP DATABASE
CREATE DATABASE
```

Пример неудачной попытки восстановления из несуществующего дампа.

```shell
Recovering from backup: container: teamstorm-database_service-1 teamstorm_migrations_db teamstorm_migrations_db_15-09-2023_15-13.bak
lstat /home/tester/deploy/teamstorm/scripts/dumps/teamstorm_migrations_db_15-09-2023_15-13.bak:
no such file or directory
UPDATE 1
pg_terminate_backend
----------------------
(0 rows)

DROP DATABASE
CREATE DATABASE
pg_restore: error: could not open input file "/teamstorm_migrations_db_15-09-2023_15-13.bak":
No such file or directory
```

2.4. Перезапустите кластер teamstorm:

```shell
docker compose -p teamstorm restart
```

Процесс по восстановлению для кластера Teamstorm успешно завершен.

2.5. Теперь нужно повторить те же шаги, но для кластера Test IT:

```shell
user@server: ~/teamstorm $ cd ../../testit/scripts
user@server: ~/testit/scripts $ mkdir dumps
user@server: ~/testit/scripts $ scp backup-server:/teamstorm/testit_2023-09-20_09-59-49_backup.tgz ./dumps/
user@server: ~/testit/scripts $ cd dumps
user@server: ~/testit/scripts/dumps/ $ tar -xzvf teamstorm_2023-09-20_09-42-00_backup.tgz
...
user@server: ~/testit/scripts $ cd ..
user@server: ~/testit/scripts $ ./db_restore.sh ./dumps 2023-09-20_09-59-49.bak
Recovering from backup: container:
...
```

2.6. Перезапустите кластер testit:

```shell
docker compose -p testit restart
```

Процесс по восстановлению для кластера testit успешно завершен.

Убедитесь в работоспособности приложения после восстановления.