Восстановление после неудачного обновления с переносом данных
Данный раздел рассматривает ручное восстановление с переносом данных СУБД Pangolin после неудачного обновления с версии 6.5.2 до 7.1.0.
Каждый пункт будет начинаться с информации в круглых скобках, о том на каких узлах необходимо выполнить данный шаг. Все команды необходимо выполнять последовательно.
Например, сочетание (master, replica)
означает, что действия, указанные в пункте, необходимо выполнить сначала на основном узле, затем на реплике (при этом выполнять действия на арбитре не нужно).
Восстановление СУБД может осуществляться пользователем с правами суперпользователя, а также пользователем postgres
.
Обновление СУБД может осуществляться пользователем с правами суперпользователя, а также пользователем postgres
.
Все команды ниже являются примерами. Их необходимо отредактировать в соответствии с требуемыми параметрами и конфигурациями. В названиях rpm-пакетов, при необходимости, в блоках кода замените наименование ОС и пакетного менеджера.
Обозначения
В инструкции используются переменные для динамической настройки. Перед выполнением команд эти переменные будут экспортироваться. Скорректируйте значение относительно реализуемого сценария обновления:
PANGOLIN_VER
– новая версия СУБД Pangolin (формат - х.х.х/x.x);PANGOLIN_MAJOR_VER
- мажорная версия СУБД Pangolin (формат - 0x);PANGOLIN_MAJOR_OLD_VER
- исходная мажорная версия СУБД Pangolin (формат - 0x);PANGOLIN_OLD_VER
– исходная версия СУБД Pangolin (формат - х.х.х/x.x);PANGOLIN_FULL_OLD_VER
– исходная версия СУБД Pangolin (формат - 0х.00х.0х).
Шаг №1. Остановка компонентов СУБД Pangolin
-
(master) В случае конфигурации с Pangolin Manager переведите компонент в режим паузы:
sudo -iu postgres /opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml edit-config --set 'pause=true' --force
-
(replica, master, arbiter) Остановите все компоненты СУБД Pangolin:
- Для конфигурации без Pangolin Manager:
sudo systemctl stop postgresql
-
Для конфигурации с Pangolin Manager:
sudo -iu postgres /usr/pangolin/bin/pg_ctl stop -D /pgdata/07/data
sudo systemctl stop pangolin-manager -
Для конфигурации с etcd:
sudo systemctl stop etcd
-
Для всех конфигураций:
sudo systemctl stop pgbouncer
sudo systemctl stop pangolin-pooler
sudo systemctl stop pg_certs_rotate_agent
sudo systemctl stop pangolin-certs-rotate
sudo systemctl stop pangolin_reencrypt@postgres.service
sudo systemctl stop pangolin_reencrypt@kmadmin_pg.service
sudo systemctl stop pangolin-auth-reencrypt@postgres.service
sudo systemctl stop pangolin-auth-reencrypt@kmadmin_pg.service
-
(replica, master, arbiter) Остановите сторонние компоненты:
sudo systemctl stop crond
Шаг 2. Удаление venv-пакета
-
(master, replica) Удалите пакет компонента:
sudo dnf remove -y pangolin-ansible-venv-controlled
Шаг 3. Восстановление компонента pangolin-auth-reencrypt
-
(master, replica) Удалите новый пакет компонента и установите старый:
sudo dnf remove -y pangolin-auth-reencrypt
sudo dnf install -y ~/pangolin/cache/backup/rpms/pangolin-auth-reencrypt-6.5.2-sberlinux9.x86_64.rpm -
(master, replica) Восстановите рабочие файлы компонента:
sudo cp -ra ~/pangolin/cache/backup/pangolin_auth_reencrypt/pangolin-auth-reencrypt@postgres.service /etc/systemd/system/multi-user.target.wants/pangolin-auth-reencrypt@postgres.service
sudo cp -ra ~/pangolin/cache/backup/pangolin_auth_reencrypt/pangolin-auth-reencrypt@kmadmin_pg.service /etc/systemd/system/multi-user.target.wants/pangolin-auth-reencrypt@kmadmin_pg.service
sudo cp -ra ~/pangolin/cache/backup/pangolin_auth_reencrypt/pg_auth_reencrypt /opt/pangolin-auth-reencrypt/bin/pangolin-auth-reencrypt
sudo cp -ra ~/pangolin/cache/backup/pangolin_auth_reencrypt/enc_util.cfg /etc/postgres/enc_util.cfg
sudo cp -ra ~/pangolin/cache/backup/pangolin_auth_reencrypt/enc_params.cfg.kmadmin_pg /etc/pangolin-auth-reencrypt/kmadmin_pg/enc_params.cfg.kmadmin_pg
sudo cp -ra ~/pangolin/cache/backup/pangolin_auth_reencrypt/enc_params.cfg.postgres /etc/pangolin-auth-reencrypt/postgres/enc_params.cfg.postgres
Шаг 4. Восстановление компонента pg-certs-rotate-agent
-
(master, replica) Удалите новый пакет компонента и установите старый:
sudo dnf remove -y pangolin-certs-rotate
sudo dnf install -y ~/pangolin/cache/backup/rpms/pangolin-certs-rotate-6.5.2-sberlinux9.x86_64.rpm -
(master, replica) Восстановите рабочие файлы компонента:
sudo mkdir -p /pgerrorlogs/06/pangolin-certs-rotate
sudo chown postgres:kmadmin_pg /etc/pangolin-certs-rotate /opt/pangolin-certs-rotate /opt/pangolin-certs-rotate/bin
sudo chmod 0700 /pgerrorlogs/06 /pgerrorlogs/06/pangolin-certs-rotate
sudo chown postgres:postgres /pgerrorlogs/06 /pgerrorlogs/06/pangolin-certs-rotate
sudo chmod 0771 /etc/pangolin-certs-rotate
sudo chmod 0710 /opt/pangolin-certs-rotate /opt/pangolin-certs-rotate/bin/
sudo cp -ra ~/pangolin/cache/backup/pangolin-certs-rotate/pangolin-certs-rotate.service /usr/lib/systemd/system/pangolin-certs-rotate.service
sudo cp -ra ~/pangolin/cache/backup/pangolin-certs-rotate/pangolin-certs-rotate /opt/pangolin-certs-rotate/bin/pangolin-certs-rotate
sudo cp -ra ~/pangolin/cache/backup/pangolin-certs-rotate/pangolin-certs-rotate.yml /etc/pangolin-certs-rotate/pangolin-certs-rotate.yml
Шаг 5. Удаление компонента pangolin-diagnostic-tool
-
(master, replica) Удалите новый пакет компонента и установите старый:
sudo dnf remove -y pangolin-diagnostic-tool
sudo dnf install -y ~/pangolin/cache/backup/rpms/pangolin-diagnostic-tool-6.5.2-sberlinux9.x86_64.rpm
Шаг 6. Удаление компонентов пакета pangolin-security-utilities
-
(master, replica) Удалите новый пакет компонента и установите старый:
sudo dnf remove -y pangolin-security-utilities
sudo dnf install -y ~/pangolin/cache/backup/rpms/pangolin-security-utilities-6.5.2-sberlinux9.x86_64.rpm
Шаг 7. Восстановление компонентов пакета pangolin-backup-tools
-
(master, replica) Удалите новый пакет компонента и установите старый:
sudo dnf remove -y pangolin-backup-tools-venv
sudo dnf remove -y pangolin-backup-tools
sudo dnf install -y ~/pangolin/cache/backup/rpms/pangolin-backup-tools-venv-1.1.0-sberlinux9.x86_64.rpm
sudo dnf install -y ~/pangolin/cache/backup/rpms/pangolin-backup-tools-1.2.5-sberlinux9.x86_64.rpm -
(master, replica) Приведите в исходное состояние файл
backup-tools-env
, находящийся в директории/etc/pangolin-backup-tools/backup-tools-env
:# PATH, used for access to required executable files, default value: "${PATH}:{PGHOME}/bin/"
PATH="${PATH}:/usr/pangolin-6.5/bin/"
# path to PGHOME, default value: "/opt/pangolin-backup-tools/bin"
PGHOME="/opt/pangolin-backup-tools"
# path to python libraries, required for manage_backup.bin, default value: "/opt/pangolin-backup-tools/lib/python3/site-packages"
PYTHONPATH="/opt/pangolin-backup-tools/lib/python3/site-packages"
# path to libraries, required for executable files, default value: "/opt/pangolin-backup-tools/lib"
LD_LIBRARY_PATH="/opt/pangolin-backup-tools/lib"
# path to plugins libraries, default value: "/opt/pangolin-backup-tools/lib"
PG_PLUGINS_PATH="/opt/pangolin-backup-tools/lib"
# Pangolin DBMS server IP, default value: "127.0.0.1"
ARG_KEY_DBMS_SERVER_IP="127.0.0.1"
# Pangolin DBMS port, default value: "5433"
ARG_KEY_DBMS_SERVER_PORT="5433"
# user used for access to database, default value: "backup_user"
ARG_KEY_DBMS_CONNECT_USER="backup_user"
# database to connect, default value: "postgres"
ARG_KEY_DBMS_CONNECT_DATA_BASE="postgres"
# path to backup storage, default value: "/pgarclogs"
ARG_KEY_DBMS_CONNECT_BACKUP_DIR="/pgarclogs/06"
# password to connect to Pangolin DBMS, default value: 'sample_password'
# cluster name, default value: "clustername"
PGINSTANCE="clustername"
# WAL archives list
WALSTATE_FILE="$ARG_KEY_DBMS_CONNECT_BACKUP_DIR/wals_to_delete"
# Log file
LOG_FILE="$ARG_KEY_DBMS_CONNECT_BACKUP_DIR/archive.log"
# path to script, used for creating backup files, default value: "/opt/pangolin-backup-tools/bin/manage_backup.sh"
MANAGE_BACKUP_SCRIPT="/opt/pangolin-backup-tools/bin/manage_backup.sh"
# setting up of connection string
PANGOLIN_BACKUP_TOOLS_ARGS="$PANGOLIN_BACKUP_TOOLS_ARGS --host $ARG_KEY_DBMS_SERVER_IP"
PANGOLIN_BACKUP_TOOLS_ARGS="$PANGOLIN_BACKUP_TOOLS_ARGS -p $ARG_KEY_DBMS_SERVER_PORT"
PANGOLIN_BACKUP_TOOLS_ARGS="$PANGOLIN_BACKUP_TOOLS_ARGS -U $ARG_KEY_DBMS_CONNECT_USER"
PANGOLIN_BACKUP_TOOLS_ARGS="$PANGOLIN_BACKUP_TOOLS_ARGS -d $ARG_KEY_DBMS_CONNECT_DATA_BASE"
PANGOLIN_BACKUP_TOOLS_ARGS="$PANGOLIN_BACKUP_TOOLS_ARGS -B $ARG_KEY_DBMS_CONNECT_BACKUP_DIR"
# environment variables to launch manage backup
export PATH
export PGHOME
export PYTHONPATH
export LD_LIBRARY_PATH
export PG_PLUGINS_PATH
Шаг 8. Восстановление компонента Pangolin Pooler
-
(master, replica) Удалите новый пакет компонента и установите старый:
sudo dnf remove -y pangolin-pooler
sudo dnf install -y ~/pangolin/cache/backup/rpms/pangolin-pooler-1.5.2-sberlinux9.x86_64.rpm -
(master, replica) Восстановите рабочие файлы компонента:
sudo mkdir -p /etc/pangolin-pooler/
sudo chown postgres:postgres /etc/pangolin-pooler/
sudo chmod 0700 /etc/pangolin-pooler/
sudo cp -ra ~/pangolin/cache/backup/pooler/pangolin-pooler.service /usr/lib/systemd/system/pangolin-pooler.service
sudo cp -ra ~/pangolin/cache/backup/pooler/pangolin-pooler.ini /etc/pangolin-pooler/pangolin-pooler.ini
sudo cp -ra ~/pangolin/cache/backup/pooler/userlist.txt /etc/pangolin-pooler/userlist.txt
sudo cp -ra ~/pangolin/cache/backup/pooler/pangolin-pooler /opt/pangolin-pooler/bin/pangolin-pooler
sudo cp -ra ~/pangolin/cache/backup/pooler/pangolin-pooler.1 /opt/pangolin-pooler/share/man/man1/pangolin-pooler.1
sudo cp -ra ~/pangolin/cache/backup/pooler/pangolin-pooler.5 /opt/pangolin-pooler/share/man/man5/pangolin-pooler.5
Шаг 9. Восстановление компонента Pangolin Manager
-
(master, replica) Удалите новый пакет компонента и установите старый:
sudo dnf remove -y pangolin-manager
sudo dnf remove -y pangolin-manager-venv
sudo dnf install -y ~/pangolin/cache/backup/rpms/pangolin-manager-venv-1.1.0-sberlinux9.x86_64.rpm
sudo dnf install -y ~/pangolin/cache/backup/rpms/pangolin-manager-2.1.8-sberlinux9.x86_64.rpm -
(master, replica) Восстановите рабочие файлы компонента:
sudo chown postgres:postgres /etc/pangolin-manager/ /usr/pangolin-manager
sudo chmod 0700 /etc/pangolin-manager/ /usr/pangolin-manager
sudo cp -ra ~/pangolin/cache/backup/manager/pangolin-manager.service /usr/lib/systemd/system/pangolin-manager.service
sudo cp -ra ~/pangolin/cache/backup/manager/postgres.yml /etc/pangolin-manager/postgres.yml
sudo cp -ra ~/pangolin/cache/backup/manager/ /opt/pangolin-pooler/bin/pangolin-pooler-restart.sh
sudo cp -ra ~/pangolin/cache/backup/manager/ /opt/pangolin-manager/bin/pangolin-manager
Шаг 10. Удаление pangolin_license
-
(master, replica) Восстановите исходное состояние директории с лицензией:
sudo mv /opt/pangolin-license /opt/pangolin_license
# Восстановите прежнюю лицезнию
Шаг 11. Восстановление серверной и клиентской части (pangolin-dbms)
-
(master, replica) Удалите новый пакет компонента и установите старый
export PANGOLIN_VER=7.1
export PANGOLIN_MAJOR_VER=07
sudo dnf remove -y pangolin-dbms-$PANGOLIN_VER
sudo dnf remove -y pangolin-dbms-$PANGOLIN_VER-client
sudo dnf install -y ~/pangolin/cache/backup/pangolin_dbms/pangolin-dbms-6.5-6.5.2-sberlinux9.x86_64.rpm
sudo dnf install -y ~/pangolin/cache/backup/rpms/pangolin-dbms-6.5-client-6.5.2-sberlinux9.x86_64.rpm
sudo rm -rf /opt/pangolin-dbms-server-7 /opt/pangolin-dbms-client-7
sudo rm -rf /pgdata/$PANGOLIN_MAJOR_VER /pangolinlogs /pgarclogs/$PANGOLIN_MAJOR_VERПри необходимости удалите новый пакет компонента
timescaledb
и установите старый:sudo dnf remove -y pangolin-timescaledb-$PANGOLIN_VER
sudo dnf install -y ~/pangolin/cache/backup/rpms/pangolin-timescaledb-6.5-apache-2.19.3-sberlinux9-x86_64.rpm -
(master, replica) Восстановите рабочие файлы компонента:
export PANGOLIN_OLD_VER=6.x
export PANGOLIN_FULL_OLD_VER=06.00x.0x
export PANGOLIN_MAJOR_OLD_VER=06
sudo mkdir -p /pgdata/$PANGOLIN_MAJOR_OLD_VER/data/
sudo chmod -R 0700 /pgdata
sudo chown -R postgres:postgres /pgdata
sudo cp -ra ~/pangolin/cache/backup/pangolin_dbms/pangolin-$PANGOLIN_OLD_VER/* /usr/pangolin-$PANGOLIN_OLD_VER/
sudo chmod 0701 /usr/pangolin-$PANGOLIN_OLD_VER
sudo ln -sfnv /usr/pangolin-$PANGOLIN_OLD_VER /usr/pangolin
sudo cp -ra ~/pangolin/cache/backup/general/enc_utils_auth_settings.cfg /etc/pangolin-auth-encryption/enc_utils_auth_settings.cfgДля конфигурации без Pangolin Manager:
export PANGOLIN_OLD_VER=6.x
sudo cp -r ~/pangolin/cache/backup/pangolin_dbms/postgresql.service /usr/pangolin-$PANGOLIN_OLD_VER/share/postgresql.service -
(master) Восстановите локальную резервную копию:
sudo -iu postgres
PGPASSWORD=<пароль пользователя postgres> /opt/pangolin-backup-tools/bin/pg_probackup restore -B /pgarclogs/cache/backup/pangolin_dbms --instance clustername -j 14 --progress --restore-command=cp /pgarclogs/cache/backup/pangolin_dbms/wal/clustername/%f %p -w
exit
export PANGOLIN_MAJOR_OLD_VER=06
sudo cp -r ~/pangolin/cache/backup/pangolin_dbms/*.conf /pgdata/$PANGOLIN_MAJOR_OLD_VER/data/Дополнительно для конфигурации с Pangolin Manager:
export PANGOLIN_MAJOR_OLD_VER=06
sudo cp -ra ~/pangolin/cache/backup/manager/patroni.dynamic.json /pgdata/$PANGOLIN_MAJOR_OLD_VER/data/patroni.dynamic.json
Шаг 12. Завершающие действия
-
(master, replica) Восстановите сторонние файлы:
export PANGOLIN_MAJOR_OLD_VER=06
sudo cp -ra ~/pangolin/cache/backup/general/.bash_profile /home/postgres/.bash_profile
sudo cp -ra ~/pangolin/cache/backup/general/10-kmadmin_pg /etc/sudoers.d/10-kmadmin_pg
sudo cp -ra ~/pangolin/cache/backup/general/10-postgres /etc/sudoers.d/10-postgres
sudo cp -ra ~/pangolin/cache/backup/general/dynmotd.sh /usr/local/sbin/dynmotd.sh
sudo ln -sfnv /pgdata/$PANGOLIN_MAJOR_OLD_VER /pgdata/data
sudo rm -rf /pgdata/$PANGOLIN_MAJOR_OLD_VER/data/recovery.signalДополнительно восстановить на узле arbiter:
sudo cp -ra ~/pangolin/cache/backup/general/dynmotd.sh /usr/local/sbin/dynmotd.sh
Шаг 13. Запуск компонентов СУБД Pangolin
-
(master, replica, arbiter) Запустите компоненты Pangolin:
-
Для всех конфигураций:
sudo systemctl daemon-reload
-
Для конфигурации без Pangolin Manager:
sudo systemctl restart postgresql
-
Для конфигурации с Pangolin Manager:
sudo systemctl restart pangolin-manager
-
Для конфигурации с etcd:
sudo systemctl restart etcd
-
Для всех конфигураций:
sudo systemctl restart pangolin-pooler
sudo systemctl restart pangolin-certs-rotate
sudo systemctl restart pangolin-auth-reencrypt@postgres
sudo systemctl restart pangolin-auth-reencrypt@kmadmin_pg
-
-
(replica, master, arbiter) Запустите сторонние сервисы:
sudo systemctl restart crond
-
(master) В случае конфигурации с Pangolin Manager выведите компонент из режима паузы:
sudo -iu postgres /opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml remove clustername
sudo systemctl restart pangolin-manager # Дополнительно выполнить на узле replica
sudo -iu postgres /opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml edit-config --set 'pause=false' --force
sudo -iu postgres /opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml restart clustername