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