Справка

Резервное копирование данных и восстановление системы

Безоблачный Pyrus

Pyrus Datacenter поставляется с внутренней СУБД PostgreSQL, используемой для хранения данных. Для выполнения резервного копирования и восстановления из резервных копий поддерживаются следующие механизмы PostgreSQL:

  • pg_dump/pg_restore;
  • wal-g.

Резервное копирование и восстановление через pg_dump/pg_restore

Создание резервной копии

Для снятия резервной копии выполните команду, предварительно заменив login и dbname своими значениями:

docker exec -ti pyrus-postgresql /bin/sh -c 'pg_dump -Fc -U login dbname > /tmp/dump.bkp'

После выполнения команды скопируйте файл бэкапа из контейнера на хостовую машину, выполнив команду:

docker cp pyrus-postgresql:/tmp/dump.bkp dump.bkp

По завершении копирования данный файл рекомендуется переместить в надежное файловое хранилище.

Восстановление из резервной копии

Восстановление должно выполняться на чистый контейнер БД. Для этого удалите старый контейнер и его volume. Затем запустите новый контейнер БД, выполнив команду:

docker-compose up -d postgres

Новый контейнер с пустой БД будет создан и запущен.

Далее, скопируйте файл резервной копии в запущенный контейнер, ранее снятый через pg_dump:

docker cp dump.bkp pyrus-postgresql:/tmp

По завершении копирования выполните команду, предварительно заменив login и dbname своими значениями:

docker exec -ti pyrus-postgresql /bin/sh -c 'pg_restore -v -Fc -U login -d dbname /tmp/dump.bkp'

Дождитесь завершения выполнения команды. После ее успешного выполнения БД будет восстановлена.

Резервное копирование и восстановление через wal-g

Pyrus Datacenter поддерживает автоматическое резервное копирование с помощью wal-g, позволяющее выгружать копии в AWS S3 или другое S3-совместимое хранилище.

Внимание! Этот способ резервного копирования требует высокой квалификации администратора баз данных, используйте с осторожностью. В частности, не рекомендуется восстанавливать БД напрямую из папки, в которой была создана копия.

Создание резервной копии

Для работы данного функционала необходимо указать параметры S3 для сервиса postgres:

services:
	postgres:
		environment:
            AWS_ACCESS_KEY_ID: <ACCESSKEY>
            AWS_SECRET_ACCESS_KEY: <SECRETKEY>
            WALG_S3_PREFIX: s3://<BUCKETNAME>

При использовании S3-совместимого хранилища, отличного от AWS S3, необходимо дополнительно указать эндпоинт S3:

services:
	postgres:
		environment:
            AWS_ENDPOINT: <S3_URL>

После запуска контейнера с указанными настройками в хранилище автоматически будут отправляться архивированные WAL журналы и полные резервные копии БД.

Полное резервное копирование запускается автоматически и по умолчанию выполняется в 01:00 ежедневно. Для изменения периодичности снятия резервной копии вы можете воспользоваться следующей SQL командой в контейнере PostgreSQL:

--                    ┌───────────── min (0 - 59)
--                    │ ┌────────────── hour (0 - 23)
--                    │ │ ┌─────────────── day of month (1 - 31)
--                    │ │ │ ┌──────────────── month (1 - 12)
--                    │ │ │ │ ┌───────────────── day of week (0 - 6) (0 to 6 are Sunday to
--                    │ │ │ │ │                  Saturday, or use names; 7 is also Sunday)
--                    * * * * *
SELECT cron.schedule('0 1 * * *', $$SELECT backup_manage(RETAIN_FIND_FULL integer, WALG_DELTA_MAX_STEPS integer)$$);

Параметр RETAIN_FIND_FULL указывает количество резервных копий, сохраняемых в S3. По умолчанию — 7 резервных копий.

Параметр WALG_DELTA_MAX_STEPS управляет количеством шагов, на которые дельта-копия максимально отстаёт от полной копии. По умолчанию — 3 шага.

Все задания можно посмотреть sql-командой:

select * from cron.job;

Восстановление из резервной копии

Важно: перед восстановлением настоятельно рекомендуется убедиться в работоспособности резервной копии.

Для восстановления резервной копии необходимо указать в настройке сервиса postgres имя точки восстановления. Например, для последней точки:

services:
	postgres:
		environment:
            RESTORE_NAME: LATEST

Список резервных копий можно посмотреть командой:

wal-g backup-list

Восстановление из копии начнётся, только если директория ${PGDATA} будет пустой. В обратном случае процесс восстановления будет проигнорирован и система запустится из файлов, расположенных в данной директории.

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

После восстановления базы данных из резервной копии и перед запуском сервиса нужно подготовить полнотекстовый поиск и проверить работоспособность системы.

Восстановление полнотекстового поиска

Выполните инициализацию поисковых индексов Elasticsearch и их переиндексацию:

$ docker-compose run --rm elastic-console -iall
$ docker-compose run --rm elastic-console -rt
$ docker-compose run --rm elastic-console -wgall
$ docker-compose run --rm elastic-console -wcall
$ docker-compose run --rm elastic-console -wpall
$ docker-compose run --rm elastic-console -wnall

Запустите все контейнеры командой:

$ docker-compose up -d

Проверка работоспособности

Рекомендуется воспользоваться нижеприведенным чек-листом, чтобы убедиться в работоспособности системы:

  • заново войти в систему, получить письмо с кодом;

  • создать задачу;

  • создать форму;

  • прикрепить файл к задаче;

  • скачать файл из задачи;

  • воспользоваться поиском.

Была ли эта статья полезной?