Восстановление после неудачного обновления с переносом данных#
Данный раздел рассматривает ручное восстановление с переносом данных СУБД Pangolin после неудачного обновления с версии 5.4.x/5.5.x до 6.5.x
Внимание
Каждый пункт будет начинаться с информации в круглых скобках, о том на каких узлах необходимо выполнить данный шаг. Все команды необходимо выполнять последовательно.
Например, сочетание (master, replica) означает, что действия, указанные в пункте, необходимо выполнить сначала на основном узле, затем на реплике (при этом выполнять действия на арбитре не нужно).
Восстановление СУБД может осуществляться пользователем с правами суперпользователя, а также пользователем 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) В случае конфигурации с Patroni/Pangolin Manager переведите компонент в режим паузы:
sudo -iu postgres /usr/patroni/patroni_venv/bin/patronictl -c /etc/patroni/postgres.yml edit-config --set 'pause=true' --force exitsudo -iu postgres /opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml edit-config --set 'pause=true' --force exitПримечание
Используйте оба варианта остановки (команды в примере выше) для новой и старой версии компонента. Поскольку инструкция рассчитана на любой момент падения, необходимо убедиться в том, что ни одна версия не активна.
(replica, master, arbiter) Остановите все компоненты СУБД Pangolin:
Для конфигурации без Patroni/Pangolin Manager:
sudo systemctl stop postgresqlДля конфигурации с Patroni/Pangolin Manager:
sudo -iu postgres /usr/pangolin/bin/pg_ctl stop -D /pgdata/05/data exit sudo systemctl stop patroni # или 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. Удаление компонента pangolin-ansible-venv-controlled#
(master, replica) Удалите пакет компонента:
sudo dnf remove -y pangolin-ansible-venv-controlled
Шаг 3. Восстановление компонента pangolin_reencrypt#
(master, replica) Удалите пакет компонента:
sudo dnf remove -y pangolin-auth-reencrypt sudo rm -rf /opt/pangolin-auth-reencrypt sudo rm -rf /etc/pangolin-auth-reencrypt(master, replica) Восстановите рабочие файлы компонента:
sudo mkdir -p /opt/pangolin-common/bin /etc/postgres sudo chown postgres:kmadmin_pg /etc/postgres /opt/pangolin-common /opt/pangolin-common/bin sudo chmod 0771 /etc/postgres sudo chmod 0710 /opt/pangolin-common /opt/pangolin-common/bin sudo cp -ra ~/pangolin/cache/backup/pangolin_reencrypt/pangolin_reencrypt@.service /etc/systemd/system/pangolin_reencrypt@.service sudo cp -ra ~/pangolin/cache/backup/pangolin_reencrypt/pg_auth_reencrypt /opt/pangolin-common/bin/pg_auth_reencrypt sudo cp -ra ~/pangolin/cache/backup/pangolin_reencrypt/enc_util.cfg /etc/postgres/enc_util.cfg sudo cp -ra ~/pangolin/cache/backup/pangolin_reencrypt/enc_params.cfg.kmadmin_pg /etc/postgres/enc_params.cfg.kmadmin_pg sudo cp -ra ~/pangolin/cache/backup/pangolin_reencrypt/enc_params.cfg.postgres /etc/postgres/enc_params.cfg.postgres
Шаг 4. Восстановление компонента pg_certs_rotate_agent#
(master, replica) Удалите пакет компонента:
sudo dnf remove -y pangolin-certs-rotate sudo rm -rf /opt/pangolin-certs-rotate sudo rm -rf /etc/pangolin-certs-rotate(master, replica) Восстановите рабочие файлы компонента:
sudo mkdir -p /opt/pangolin-common/bin /etc/postgres /pgerrorlogs/05/pg_certs_rotate_agent sudo chown postgres:kmadmin_pg /etc/postgres /opt/pangolin-common /opt/pangolin-common/bin sudo chmod 0700 /pgerrorlogs/05 /pgerrorlogs/05/pg_certs_rotate_agent sudo chown postgres:postgres /pgerrorlogs/05 /pgerrorlogs/05/pg_certs_rotate_agent sudo chmod 0771 /etc/postgres sudo chmod 0710 /opt/pangolin-common /opt/pangolin-common/bin sudo cp -ra ~/pangolin/cache/backup/pg_certs_rotate_agent/pg_certs_rotate_agent.service /etc/systemd/system/pg_certs_rotate_agent.service sudo cp -ra ~/pangolin/cache/backup/pg_certs_rotate_agent/pg_certs_rotate_agent /opt/pangolin-common/bin/pg_certs_rotate_agent sudo cp -ra ~/pangolin/cache/backup/pg_certs_rotate_agent/pg_certs_rotate_agent.yml /etc/postgres/pg_certs_rotate_agent.yml
Шаг 5. Удаление компонента pangolin-diagnostic-tools#
(master, replica) Удалите пакет компонента:
sudo dnf remove -y pangolin-diagnostic-tool sudo rm -rf /opt/pangolin-diagnostic-tool
Шаг 6. Удаление компонента pangolin-security-utilities#
(master, replica) Удалите пакет компонента:
sudo dnf remove -y pangolin-security-utilities sudo rm -rf /opt/pangolin-security-utilities sudo rm -rf /etc/pangolin-security-utilities sudo mkdir -p /etc/postgres sudo chown postgres:kmadmin_pg /etc/postgres sudo chmod 0771 /etc/postgres sudo cp -ra ~/pangolin/cache/backup/general/enc_connection_settings_cert.cfg /etc/postgres/enc_connection_settings_cert.cfg sudo cp -ra ~/pangolin/cache/backup/general/enc_connection_settings.cfg /etc/postgres/enc_connection_settings.cfg
Шаг 7. Восстановление компонента manage_backup#
(master, replica) Удалите пакет компонента:
sudo dnf remove -y pangolin-backup-tools sudo rm -rf /opt/pangolin-backup-tools sudo rm -rf /etc/pangolin-backup-tools(master, replica) Восстановите рабочие файлы компонента:
sudo mkdir -p /opt/omni/lbin/ sudo chown root:root /opt/omni/lbin/ sudo chmod 0755 /opt/omni/lbin/ sudo cp -ra ~/pangolin/cache/backup/manage_backup/* /opt/omni/lbin/
Шаг 8. Восстановление компонента Pangolin Pooler#
(master, replica) Удалите пакет компонента:
sudo dnf remove -y pangolin-pooler sudo rm -rf /opt/pangolin-pooler sudo rm -rf /etc/pangolin-pooler(master, replica) Восстановите рабочие файлы компонента:
sudo mkdir -p /etc/pgbouncer/ sudo chown postgres:postgres /etc/pgbouncer/ sudo chmod 0700 /etc/pgbouncer/ sudo cp -ra ~/pangolin/cache/backup/pgbouncer/pgbouncer.service /etc/systemd/system/pgbouncer.service sudo cp -ra ~/pangolin/cache/backup/pgbouncer/pgbouncer.ini /etc/pgbouncer/pgbouncer.ini sudo cp -ra ~/pangolin/cache/backup/pgbouncer/userlist.txt /etc/pgbouncer/userlist.txt sudo cp -ra ~/pangolin/cache/backup/pgbouncer/pgbouncer /usr/local/bin/pgbouncer sudo cp -ra ~/pangolin/cache/backup/pgbouncer/pgbouncer.1 /usr/local/share/man/man1/pgbouncer.1 sudo cp -ra ~/pangolin/cache/backup/pgbouncer/pgbouncer.5 /usr/local/share/man/man5/pgbouncer.5
Шаг 9. Восстановление компонента Pangolin Manager (Patroni)#
(master, replica) Удалите пакет компонента:
sudo dnf remove -y pangolin-manager sudo rm -rf /opt/pangolin-manager sudo rm -rf /etc/pangolin-manager(master, replica) Восстановите рабочие файлы компонента:
sudo mkdir -p /etc/patroni/ /usr/patroni sudo chown postgres:postgres /etc/patroni/ /usr/patroni sudo chmod 0700 /etc/patroni/ /usr/patroni sudo cp -ra ~/pangolin/cache/backup/patroni/patroni.service /etc/systemd/system/patroni.service sudo cp -ra ~/pangolin/cache/backup/patroni/postgres.yml /etc/patroni/postgres.yml sudo cp -ra ~/pangolin/cache/backup/patroni/reload_pgbouncer.sh /etc/patroni/reload_pgbouncer.sh sudo cp -ra ~/pangolin/cache/backup/patroni/patroni/* /usr/patroni/
Шаг 10. Удаление pangolin-license#
(master, replica) Удалите
pangolin-license:sudo rm -rf /opt/pangolin_license
Шаг 11. Восстановление компонента pangolin-dbms#
(master, replica) Удалите пакет компонента:
export PANGOLIN_VER=6.x export PANGOLIN_MAJOR_VER=0x sudo dnf remove -y pangolin-dbms-$PANGOLIN_VER sudo dnf remove -y pangolin-dbms-$PANGOLIN_VER-client sudo rm -rf /usr/pangolin-$PANGOLIN_VER /usr/pangolin-dbms-$PANGOLIN_VER-client sudo rm -rf /pgdata/$PANGOLIN_MAJOR_VER /pgerrorlogs/$PANGOLIN_MAJOR_VER /pgarclogs/$PANGOLIN_MAJOR_VER #при необходимости sudo dnf remove -y pangolin-timescaledb-$PANGOLIN_VER(master, replica) Восстановите рабочие файлы компонента:
export PANGOLIN_OLD_VER=5.x.x export PANGOLIN_FULL_OLD_VER=05.00x.0x export PANGOLIN_MAJOR_OLD_VER=0x sudo mkdir -p /pgdata/$PANGOLIN_MAJOR_OLD_VER/data/ sudo chmod -R 0700 /pgdata sudo chown -R postgres:postgres /pgdata sudo dnf install -y /home/<user>/pangolin/cache/backup/pangolin_dbms/platform-v-pangolin-dbms-$PANGOLIN_FULL_OLD_VER-sberlinux8.x86_64.rpm 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 rm -rf /etc/pangolin-auth-encryption sudo cp -ra ~/pangolin/cache/backup/general/enc_utils_auth_settings.cfg /etc/postgres/enc_utils_auth_settings.cfgДля конфигурации без Pangolin Manager:
sudo cp -r ~/pangolin/cache/backup/pangolin_dbms/postgresql.service /etc/systemd/system/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=0x sudo cp -r ~/pangolin/cache/backup/pangolin_dbms/*.conf /pgdata/$PANGOLIN_MAJOR_OLD_VER/data/Дополнительно для конфигурации с Pangolin Manager:
export PANGOLIN_MAJOR_OLD_VER=0x sudo cp -ra ~/pangolin/cache/backup/patroni/patroni.dynamic.json /pgdata/$PANGOLIN_MAJOR_OLD_VER/data/patroni.dynamic.json
Шаг 12. Завершающие действия#
(master, replica) Восстановите сторонние файлы:
export PANGOLIN_MAJOR_OLD_VER=0x 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 patroniДля конфигурации с 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 (Patroni) выведите компонент из режима паузы:
sudo -iu postgres /usr/patroni/patroni_venv/bin/patronictl -c /etc/patroni/postgres.yml remove clustername exit sudo systemctl restart patroni # Дополнительно выполнить на узле replica sudo -iu postgres /usr/patroni/patroni_venv/bin/patronictl -c /etc/patroni/postgres.yml edit-config --set 'pause=false' --force /usr/patroni/patroni_venv/bin/patronictl -c /etc/patroni/postgres.yml restart clustername exit