Восстановление копии
Для восстановления существующей копии следует:
- Остановить сервисы, использующие для работы PostgreSQL.
На серверах группы squadus_microservices:
docker stop iridium
На сервере группы squadus_infra:
docker stop synapse synapse_bridge squadus_freeswitch
(набор сервисов может отличаться в зависимости от настроек конкретного окружения, перечислен наиболее полный список)
- Заменить (или раскомментировать и задать) значения на первом сервере группы
squadus_dbв файле/srv/docker/postgresql_squadus/conf/postgresql.confна новые:
max_worker_processes = 8
restore_command = 'false'
- Скопировать файлы резервной копии PostgreSQL с сервера группы
squadus_infraна первый сервер группыsquadus_db, где работает PostgreSQL.
К файлам резервной копии относятся: backup_manifest, base.tar.gz и pg_wal.tar.gz
- Разместить скрипт
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.
- Проверить, что у скрипта
postgresql_restore_squadus.shесть права на исполнения. Для их добавления можно использовать команду:
chmod 740 /srv/docker/postgresql_squadus/backup_scripts/postgresql_restore_squadus.sh
- Запустить скрипт с помощью команды:
/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" свидетельствует об успешном завершении восстановления.
После завершения восстановления необходимо:
- Вернуть измененные параметры в файле к исходным значениям на первом сервере группы
squadus_dbв файле/srv/docker/postgresql_squadus/conf/postgresql.conf:
max_worker_processes = 4
restore_command = ''
- Перезапустить PostgreSQL на первом сервере группы
squadus_db:
docker restart postgresql_squadus
- Запустить ранее остановленные сервисы:
На серверах группы squadus_microservices:
docker start iridium
На сервере группы squadus_infra:
docker start synapse synapse_bridge squadus_freeswitch