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