Skip to main content

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

Для восстановления существующей копии следует:

  1. Остановить сервисы, использующие для работы PostgreSQL.

На серверах группы squadus_microservices:

docker stop iridium

На сервере группы squadus_infra:

docker stop synapse synapse_bridge squadus_freeswitch

(набор сервисов может отличаться в зависимости от настроек конкретного окружения, перечислен наиболее полный список)

  1. Заменить (или раскомментировать и задать) значения на первом сервере группы squadus_db в файле /srv/docker/postgresql_squadus/conf/postgresql.conf на новые:
max_worker_processes = 8
restore_command = 'false'
  1. Скопировать файлы резервной копии PostgreSQL с сервера группы squadus_infra на первый сервер группы squadus_db, где работает PostgreSQL.

К файлам резервной копии относятся: backup_manifest, base.tar.gz и pg_wal.tar.gz

  1. Разместить скрипт postgresql_restore_squadus.sh на первом сервере группы squadus_db, где работает PostgreSQL.

Например, в файле
/srv/docker/postgresql_squadus/backup_scripts/postgresql_restore_squadus.sh (предварительно убедившись, что директория существует).

Исходный код скрипта postgresql_restore_squadus.sh:

#!/bin/bash
if [ $# != 1 ]; then
echo Error: need parameter
echo Used: $0 path_to_archive
exit 1
fi
POSTGRESQL_DATA_PATH="/srv/docker/postgresql_squadus/data"
POSTGRESQL_IMAGE="squadus-infra-1.example.ru:5000/postgres:15.3-astra1.8.2-sec-install"
POSTGRESQL_IMAGE_UID=999
POSTGRESQL_IMAGE_GID=999
docker stop postgresql_squadus
rm -rf $POSTGRESQL_DATA_PATH
mkdir $POSTGRESQL_DATA_PATH
tar -xf $1/base.tar.gz -C ${POSTGRESQL_DATA_PATH}
tar -xf $1/pg_wal.tar.gz -C ${POSTGRESQL_DATA_PATH}/pg_wal
cp $1/backup_manifest ${POSTGRESQL_DATA_PATH}
chown -R ${POSTGRESQL_IMAGE_UID}:${POSTGRESQL_IMAGE_GID} ${POSTGRESQL_DATA_PATH}
RC=0
# Check backup
docker run -it --rm \
-v ${POSTGRESQL_DATA_PATH}:${POSTGRESQL_DATA_PATH} \
${POSTGRESQL_IMAGE} pg_verifybackup \
${POSTGRESQL_DATA_PATH} || RC=1
if [ $RC != 0 ]; then
echo Error: wrong archive
exit 2
fi
rm -f ${POSTGRESQL_DATA_PATH}/standby.signal
rm -f ${POSTGRESQL_DATA_PATH}/backup_manifest
touch ${POSTGRESQL_DATA_PATH}/recovery.signal
truncate -s0 ${POSTGRESQL_DATA_PATH}/postgresql.auto.conf
chown -R ${POSTGRESQL_IMAGE_UID}:${POSTGRESQL_IMAGE_GID} $POSTGRESQL_DATA_PATH
docker start postgresql_squadus
echo wait 30 seconds, database started ...
sleep 30
docker logs postgresql_squadus 2>&1 | tail
exit 0

В скрипте объявляется переменная POSTGRESQL_IMAGE. Необходимо скорректировать ее значение для конкретной инсталляции, указав там фактический FQDN сервера группы squadus_infra, где запущен docker registry с образом PostgreSQL.

  1. Проверить, что у скрипта postgresql_restore_squadus.sh есть права на исполнения. Для их добавления можно использовать команду:
chmod 740 /srv/docker/postgresql_squadus/backup_scripts/postgresql_restore_squadus.sh
  1. Запустить скрипт с помощью команды:
/srv/docker/postgresql_squadus/backup_scripts/postgresql_restore_squadus.sh /tmp/postgresql_dump/

где /tmp/postgresql_dump/ — директория хранения файлов резервной копии.

По результатам работы скрипта будут выведены последние логи PostgreSQL. Строка "LOG: database system is ready to accept connections" свидетельствует об успешном завершении восстановления.

После завершения восстановления необходимо:

  1. Вернуть измененные параметры в файле к исходным значениям на первом сервере группы squadus_db в файле /srv/docker/postgresql_squadus/conf/postgresql.conf :
max_worker_processes = 4
restore_command = ''
  1. Перезапустить PostgreSQL на первом сервере группы squadus_db:
docker restart postgresql_squadus
  1. Запустить ранее остановленные сервисы:

На серверах группы squadus_microservices:

docker start iridium

На сервере группы squadus_infra:

docker start synapse synapse_bridge squadus_freeswitch