Перейти к основному содержимому

Восстановление после неудачного обновления исполняемых файлов

Внимание!

Корректный откат к исходной версии Pangolin (6.1.0/6.1.2/6.1.4) при отсутствии резервной копии осуществить не получится (из-за изменения формата WAL-файлов), поэтому необходимо это учесть при попытке обновиться.

Перед началом выполнения инструкции убедитесь, что yum/dnf-репозитории настроены корректно. Откат СУБД осуществляется суперпользователем, пользователем postgres или пользователем kmadmin_pg.

Также для отката потребуется наличие резервного каталога, созданного скриптами во время обновления. Как пример, будет использоваться каталог /pgarclogs/backups/$PANGOLIN_FULL_OLD_VER/2024-10-23-T1213.

Откат необходимо производить только для тех компонентов, которые были обновлены на новую версию. Иначе, пропустить выполнение шага восстановления компонента.

примечание

В разделе рассматривается процесс восстановления после неудачного обновления исполняемых файлов СУБД Pangolin.

В качестве примера указаны значения по умолчанию. При необходимости замените их на актуальные значения со стенда.

Поскольку инструкция является универсальной для standalone и cluster-архитектур, каждый пункт необходимо выполнить на узлах кластера БД (master, replica).

На узле арбитре обновление компонентов производите только по необходимости (в случае конфигурации с DCS).

Восстановление СУБД может осуществляться пользователем с правами суперпользователя, а также пользователем 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х);
  • PANGOLIN_MANAGER_VER – новая версия компонента pangolin-manager (формат - х.х.х);
  • PANGOLIN_MANAGER_OLD_VER – новая версия компонента pangolin-manager (формат - х.х.х);

Шаг 1. Подготовка

  1. Убедитесь, что все компоненты остановлены:

    sudo ps aux | grep -E "pgbouncer|pangolin-pooler|pangolin-manager|patroni|postgresql|pangolin-certs-rotate|pg_certs_rotate_agent|pangolin-auth-reencrypt|pangolin_reencrypt|etcd" | grep -v grep
  2. Если команда вернула результат, то выполните:

    sudo kill -9 <pid>

    Примечание:

    pid можно получить следующим образом:

    sudo ps aux | grep -E "pgbouncer|pangolin-pooler|pangolin-manager|patroni|postgresql|pangolin-certs-rotate|pg_certs_rotate_agent|pangolin-auth-reencrypt|pangolin_reencrypt|etcd" | grep -v grep

Шаг 2. Восстановление pangolin-auth-reencrypt (pangolin_reencrypt)

Восстановите исходные бинарные файлы/rpm пакета компонента из резервного каталога:

export PANGOLIN_FULL_OLD_VER=0x.00x.0x
dnf remove pangolin-auth-reencrypt
rm -rf /etc/postgres/enc_util.cfg /etc/postgres/start_reencrypt.sh /etc/postgres/pg_auth_reencrypt /opt/pangolin-common/bin/pg_auth_reencrypt /etc/postgres/enc_params.cfg.kmadmin_pg /etc/postgres/enc_params.cfg.postgres /optpangolin-auth-reencrypt/ /etc/pangolin-auth-reencrypt/
cp -ra /pgarclogs/backups/$PANGOLIN_FULL_OLD_VER/2024-10-23-T1213/pangolin_auth_reencrypt/etc/postgres/enc_util.cfg /etc/postgres/enc_util.cfg
cp -ra /pgarclogs/backups/$PANGOLIN_FULL_OLD_VER/2024-10-23-T1213/pangolin_auth_reencrypt/opt/pangolin-common/bin/pg_auth_reencrypt /opt/pangolin-common/bin/pg_auth_reencrypt
cp -ra /pgarclogs/backups/$PANGOLIN_FULL_OLD_VER/2024-10-23-T1213/pangolin_auth_reencrypt/etc/postgres/enc_params.cfg.kmadmin_pg /etc/postgres/enc_params.cfg.kmadmin_pg
cp -ra /pgarclogs/backups/$PANGOLIN_FULL_OLD_VER/2024-10-23-T1213/pangolin_auth_reencrypt/etc/postgres/enc_params.cfg.postgres /etc/postgres/enc_params.cfg.postgres
Внимание!

В случае конфигурации с DCS, произведите дополнительно обновление на узле arbiter.

Шаг 3. Восстановление pangolin-certs-rotate (pg_certs_rotate_agent)

Восстановите исходные бинарные файлы/rpm пакета компонента из резервного каталога:

export PANGOLIN_FULL_OLD_VER=0x.00x.0x
dnf remove pangolin-certs-rotate
rm -rf /etc/systemd/system/pangolin-certs-rotate.service /etc/pangolin-certs-rotate /opt/pangolin-certs-rotate /opt/pangolin-common/bin/pg_certs_rotate_agent
cp -ra /pgarclogs/backups/$PANGOLIN_FULL_OLD_VER/2024-10-23-T1213/pangolin_certs_rotate/etc/postgres/pg_certs_rotate_agent.yml /etc/postgres/pg_certs_rotate_agent.yml
cp -ra /pgarclogs/backups/$PANGOLIN_FULL_OLD_VER/2024-10-23-T1213/pangolin_certs_rotate/etc/systemd/system/pg_certs_rotate_agent.service /etc/systemd/system/pg_certs_rotate_agent.service
cp -ra /pgarclogs/backups/$PANGOLIN_FULL_OLD_VER/2024-10-23-T1213/pangolin_certs_rotate/opt/pangolin-common/bin/pg_certs_rotate_agent /opt/pangolin-common/bin/pg_certs_rotate_agent
Внимание!

В случае конфигурации с DCS, произведите дополнительно обновление на узле arbiter.

Шаг 4. Восстановление pangolin-security-utilities

Восстановите исходные бинарные файлы/rpm пакета компонента из резервного каталога:

export PANGOLIN_FULL_OLD_VER=0x.00x.0x
dnf remove pangolin-security-utilities
cp -r /pgarclogs/backups/$PANGOLIN_FULL_OLD_VER/2024-10-23-T1213/pangolin_dbms/postgres /etc/
Внимание!

В случае конфигурации с DCS, произведите дополнительно обновление на узле arbiter.

Шаг 5. Восстановление pangolin-diagnostic-tools (diagnostic_tool)

Произведите восстановление исходных рабочих файлов/rpm-пакета компонента из каталога резервной копии:

dnf remove pangolin-diagnostic-tool

Шаг 6. Восстановление pangolin-backup-tools (manager_backup)

Восстановите исходные бинарные файлы/rpm пакета компонента из резервного каталога:

export PANGOLIN_FULL_OLD_VER=0x.00x.0x
dnf remove pangolin-backup-tools
rm -rf /opt/omni/lbin/ /etc/pangolin-backup-tools
cp -ra /pgarclogs/backups/06.001.02/2024-10-23-T1213/pangolin_backup_tools/06_manage_backup.sh /opt/omni/lbin/06_manage_backup.sh
cp -ra /pgarclogs/backups/06.001.02/2024-10-23-T1213/pangolin_backup_tools/06_pg_se_archlogs.sh /opt/omni/lbin/06_pg_se_archlogs.sh
cp -ra /pgarclogs/backups/06.001.02/2024-10-23-T1213/pangolin_backup_tools/06_manage_backup.bin /opt/omni/lbin/06_manage_backup.bin

Шаг 7. Восстановление pangolin-pooler (pgbouncer)

Восстановите исходные бинарные файлы/rpm пакета компонента из резервного каталога:

export PANGOLIN_FULL_OLD_VER=0x.00x.0x
dnf remove pangolin-pooler
cp -ra /pgarclogs/backups/$PANGOLIN_FULL_OLD_VER/2024-10-23-T1213/pangolin_pooler/etc/pgbouncer/userlist.txt /etc/pgbouncer/userlist.txt
cp -ra /pgarclogs/backups/$PANGOLIN_FULL_OLD_VER/2024-10-23-T1213/pangolin_pooler/etc/systemd/system/pgbouncer.service /etc/systemd/system/pgbouncer.service
cp -ra /pgarclogs/backups/$PANGOLIN_FULL_OLD_VER/2024-10-23-T1213/etc/logrotate.d/pgbouncer /etc/logrotate.d/pgbouncer
cp -ra /pgarclogs/backups/$PANGOLIN_FULL_OLD_VER/2024-10-23-T1213/pangolin_pooler/usr/local/bin/pgbouncer /usr/local/bin/pgbouncer
cp -ra /pgarclogs/backups/$PANGOLIN_FULL_OLD_VER/2024-10-23-T1213/pangolin_pooler/usr/local/share/doc /usr/local/share/
cp -ra /pgarclogs/backups/$PANGOLIN_FULL_OLD_VER/2024-10-23-T1213/pangolin_pooler/usr/local/share/man/man1/pgbouncer.1 /usr/local/share/man/man1/pgbouncer.1
cp -ra /pgarclogs/backups/$PANGOLIN_FULL_OLD_VER/2024-10-23-T1213/pangolin_pooler/usr/local/share/man/man5/pgbouncer.5 /usr/local/share/man/man5/
cp -ra /pgarclogs/backups/$PANGOLIN_FULL_OLD_VER/2024-10-23-T1213/pangolin_pooler/etc/pgbouncer/pgbouncer.ini /etc/pgbouncer/

Шаг 8. Восстановление pangolin-manager (patroni)

Восстановите исходные бинарные файлы/rpm пакета компонента из резервного каталога:

export PANGOLIN_FULL_OLD_VER=0x.00x.0x
dnf remove pangolin-manager
rm -rf /opt/pangolin-manager/ /etc/pangolin-manager/ /usr/patroni/patroni_venv/
cp -ra /pgarclogs/backups/$PANGOLIN_FULL_OLD_VER/2024-10-23-T1213/pangolin_manager/patroni_venv/ /usr/patroni/patroni_venv/
cp -ra /pgarclogs/backups/$PANGOLIN_FULL_OLD_VER/2024-10-23-T1213/pangolin_manager/patroni.dynamic.json /pgdata/06/data/patroni.dynamic.json
cp -ra /pgarclogs/backups/$PANGOLIN_FULL_OLD_VER/2024-10-23-T1213/pangolin_manager/etc/patroni/postgres.yml /etc/patroni/postgres.yml
cp -ra /pgarclogs/backups/$PANGOLIN_FULL_OLD_VER/2024-10-23-T1400/pangolin_manager/etc/systemd/system/patroni.service /etc/systemd/system/patroni.service
ln -snf /usr/patroni/patroni_venv/lib /usr/patroni/patroni_venv/lib64

Шаг 9. Восстановление pangolin-dbms

Восстановите исходные бинарные файлы/rpm пакета компонента из резервного каталога:

export PANGOLIN_OLD_VER=x.x
export PANGOLIN_VER=x.x
export PANGOLIN_FULL_OLD_VER=0x.00x.0x
dnf remove pangolin-dbms platform-v-pangolin-dbms
rm -rf /usr/pangolin-$PANGOLIN_OLD_VER /usr/pangolin-$PANGOLIN_VER
cp -ra /pgarclogs/backups/$PANGOLIN_FULL_OLD_VER/2024-10-23-T1213/pangolin_dbms/pangolin-$PANGOLIN_OLD_VER /usr
cp -ra /pgarclogs/backups/$PANGOLIN_FULL_OLD_VER/2024-10-23-T1213/pangolin_dbms/pgdata/06/data/{pg_hba.conf,postgresql.conf,pg_ident.conf,pg_quota.conf,postgresql.auto.conf,postgresql.base.conf,postgres.yml} /pgdata/06/data/
cp -ra /pgarclogs/backups/$PANGOLIN_FULL_OLD_VER/2024-10-23-T1213/pangolin_dbms/etc/systemd/system/patroni.service /etc/systemd/system/patroni.service
# или, в зависимости от типа конфигурации
cp -ra /pgarclogs/backups/$PANGOLIN_FULL_OLD_VER/2024-10-23-T1213/pangolin_dbms/etc/systemd/system/postgresql.service /etc/systemd/system/postgresql.service
ln -sfn /usr/pangolin-$PANGOLIN_OLD_VER /usr/pangolin
ln -sfn /usr/pangolin-$PANGOLIN_OLD_VER /usr/pangolin-6
ln -sfn /usr/pangolin-$PANGOLIN_OLD_VER /opt/pangolin-dbms

Шаг 10. Восстановление pangolin-dbms-client

Восстановите исходные бинарные файлы/rpm пакета компонента из резервного каталога:

export PANGOLIN_OLD_VER=x.x
dnf remove pangolin-dbms-client
rm -rf /usr/pangolin-dbms-client /usr/pangolin-dbms-client-6 /usr/pangolin-dbms-client-$PANGOLIN_OLD_VER

Шаг 11. Восстановление pangolin-timescaledb (timescaledb)

  1. Восстановите исходные бинарные файлы/rpm пакета компонента из резервного каталога:

    dnf remove pangolin-timescaledb
  2. Установите пакет, если в исходной версии pangolin-timescaledb был в виде rpm-пакета:

    dnf install /pgarclogs/backups/$PANGOLIN_FULL_OLD_VER/2024-10-23-T1213/pangolin_timescaledb/pangolin-timescaledb-2.14.2-sberlinux8.8.x86_64.rpm

Шаг 12. Дополнительный действия

  1. Актуализируйте путем замены все вхождения, в строках bash_profile, bashrc, dynmotd.sh, новой версии на старую (до обновления) версию для всех узлов кластера:

    export PANGOLIN_OLD_VER=x.x.x
    export PANGOLIN_VER=x.x.x
    export PANGOLIN_FULL_OLD_VER=0x.00x.0x
    export PANGOLIN_FULL_VER=0x.00x.0x
    export PANGOLIN_MANAGER_OLD_VER=x.x.x
    export PANGOLIN_MANAGER_VER=x.x.x

    sudo sed -i "s/$PANGOLIN_VER/$PANGOLIN_OLD_VER/g" /home/postgres/.bash_profile
    sudo sed -i "s/$PANGOLIN_VER/$PANGOLIN_OLD_VER/g" /home/kmadmin_pg/.bash_profile
    sudo sed -i "s/$PANGOLIN_VER/$PANGOLIN_OLD_VER/g" /home/postgres/.bashrc
    sudo sed -i "s/$PANGOLIN_VER/$PANGOLIN_OLD_VER/g" /home/kmadmin_pg/.bashrc

    sudo sed -i "s/$PANGOLIN_MANAGER_VER/$PANGOLIN_MANAGER_OLD_VER/g" /usr/local/sbin/dynmotd.sh
    sudo sed -i "s/$PANGOLIN_VER/$PANGOLIN_OLD_VER/g" /usr/local/sbin/dynmotd.sh
    sudo sed -i "s/$PANGOLIN_FULL_VER/$PANGOLIN_FULL_OLD_VER/g" /usr/local/sbin/dynmotd.sh

Шаг 13. Восстановление данных системного каталога

Внимание!

Выполните данный шаг, если было выполнено обновление данных системного каталога в процессе обновления на Шаге 14.

Восстановите системный каталог согласно инструкции в разделе «Ручное восстановление данных системного каталога СУБД».

Шаг 14. Запуск компонентов СУБД Pangolin

  1. Запустите компоненты Pangolin. В случае кластерной конфигурации, сначала выполните запуск на основном узле:

    • Для всех конфигураций:

      sudo systemctl daemon-reload
      sudo systemctl restart user@$(id -u postgres)
      sudo systemctl restart user@$(id -u kmadmin_pg)
    • Для конфигурации без 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
  2. В случае конфигурации с patroni/pangolin-manager выведите его из режима паузы:

    Конфигурация с pangolin-manager
    sudo -iu postgres
    pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml edit-config --set 'pause=false' --force
    /usr/patroni/patroni_venv/bin/pangolin-manager -c /etc/pangolin-manager/postgres.yml restart clustername
    exit
  3. Проверьте состояние служб:

    • Для конфигурации без Pangolin Manager:

      sudo systemctl status postgresql
    • Для конфигурации с Pangolin Manager:

      sudo systemctl status pangolin-manager
    • Для конфигурации с etcd:

      sudo systemctl status etcd
    • Для всех конфигураций:

      sudo systemctl status pangolin-pooler
      sudo systemctl status pangolin-certs-rotate
      sudo systemctl status pangolin-auth-reencrypt@postgres
      sudo systemctl status pangolin-auth-reencrypt@kmadmin_pg