Восстановление после неудачного обновления с переносом данных#
Данный раздел рассматривает ручное восстановление с переносом данных СУБД 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