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

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

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

Внимание!

Перед началом выполнения инструкции убедитесь, чтоyum/dnf-репозитории настроены корректно.

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

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

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

Восстановление СУБД может осуществляться пользователем с правами суперпользователя, а также пользователем postgres.

Все команды ниже являются примерами. Их необходимо отредактировать в соответствии с требуемыми параметрами и конфигурациями. В названиях rpm-пакетов, при необходимости, в блоках кода замените наименование ОС и пакетного менеджера.

Обозначения

В инструкции используются переменные для динамической настройки. Перед выполнением команд эти переменные будут экспортироваться. Скорректируйте значение относительно реализуемого сценария обновления:

  • PANGOLIN_VER – новая версия СУБД Pangolin (формат - х.х.х);
  • PANGOLIN_MAJOR_VER - мажорная версия СУБД Pangolin (формат - 0x);
  • PANGOLIN_MAJOR_OLD_VER - исходная мажорная версия СУБД Pangolin (формат - 0x);
  • PANGOLIN_OLD_VER – исходная версия СУБД Pangolin (формат - х.х.х);
  • PANGOLIN_FULL_OLD_VER – исходная версия СУБД Pangolin (формат - 0х.00х.0х);
  • PANGOLIN_MANAGER_VER – новая версия компонента Pangolin Manager (формат - х.х.х);
  • PANGOLIN_MANAGER_OLD_VER – исходная версия компонента Pangolin Manager (формат - х.х.х);
  • PANGOLIN_MANAGER_VENV_OLD_VER - исходная версия виртуального окружения компонента Pangolin Manager (формат - х.х.х);
  • PANGOLIN_TUNER – новая версия утилиты Pangolin Tuner (формат - х.х.х);
  • PANGOLIN_TUNER_OLD – исходная версия утилиты Pangolin Tuner (формат - х.х.х);
  • PANGOLIN_DBMS_MAJOR – новая мажорная версия СУБД Pangolin (формат - х);
  • PANGOLIN_DBMS_MAJOR_OLD – исходная мажорная версия СУБД Pangolin (формат - х);
  • PANGOLIN_POSTGIS – новая версия пакета стороннего расширения PostGIS (формат - х.х.х);
  • PANGOLIN_POSTGIS_OLD – исходная версия пакета стороннего расширения PostGIS (формат - х.х.х);
  • PANGOLIN_PGROUTING – новая версия пакета стороннего расширения pgrouting (формат - х.х.х);
  • PANGOLIN_PGROUTING_OLD – исходная версия пакета стороннего расширения pg_background (формат - х.х.х);
  • PANGOLIN_PG_BACKGROUND – новая версия пакета стороннего расширения pgrouting (формат - х.х.х);
  • PANGOLIN_PG_BACKGROUND_OLD – исходная версия пакета стороннего расширения pg_background (формат - х.х.х);
  • PANGOLIN_BACKUP_TOOLS_OLD – исходная версия компонента Pangolin Backup Tools (формат - х.х.х);
  • PANGOLIN_BACKUP_TOOLS_VENV_OLD – исходная версия зависимости pangolin-backup-tools-venv (формат - х.х.х);
  • PANGOLIN_POOLER_OLD_VER - исходная версия компонента Pangolin Pooler.

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

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

    sudo ps aux | grep -E "pangolin-pooler|pangolin-manager|pangolin-dbms|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 "pangolin-pooler|pangolin-manager|pangolin-dbms|pangolin-certs-rotate|pg_certs_rotate_agent|pangolin-auth-reencrypt|pangolin_reencrypt|etcd" | grep -v grep

Шаг 2. Восстановление компонента pg_auth_reencrypt

Восстановите исходный rpm-пакет (pangolin-auth-reencrypt) или исходные бинарные файлы компонента из резервного каталога:

export PANGOLIN_FULL_OLD_VER=0x.00x.0x
export PANGOLIN_OLD_VER=x.x.x
dnf remove pangolin-auth-reencrypt
dnf install /pgarclogs/backups/$PANGOLIN_FULL_OLD_VER/2024-10-23-T1213/pangolin_certs_rotate/pangolin-auth-reencrypt-$PANGOLIN_OLD_VER-sberlinux9.x86_64.rpm
mv /etc/pangolin-auth-reencrypt/pangolin-auth-reencrypt.yml.rpmsave /etc/pangolin-auth-reencrypt/pangolin-auth-reencrypt.yml
Внимание!

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

Шаг 3. Восстановление компонента pg_certs_rotate_agent

Восстановите исходный rpm-пакет (pangolin-certs-rotate) или исходные бинарные файлы компонента из резервного каталога:

export PANGOLIN_FULL_OLD_VER=0x.00x.0x
export PANGOLIN_OLD_VER=x.x.x
dnf remove pangolin-certs-rotate
dnf install /pgarclogs/backups/$PANGOLIN_FULL_OLD_VER/2024-10-23-T1213/pangolin_certs_rotate/pangolin-certs-rotate-$PANGOLIN_OLD_VER-sberlinux9.x86_64.rpm
mv /etc/pangolin-certs-rotate/pangolin-certs-rotate.yml.rpmsave /etc/pangolin-certs-rotate/pangolin-certs-rotate.yml
Внимание!

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

Шаг 4. Восстановление компонентов безопасности (security-utilities)

Восстановите исходный rpm-пакет (pangolin-security-utilities) или исходные бинарные файлы компонента из резервного каталога:

export PANGOLIN_FULL_OLD_VER=0x.00x.0x
export PANGOLIN_OLD_VER=x.x.x
dnf remove pangolin-security-utilities
dnf install /pgarclogs/backups/$PANGOLIN_FULL_OLD_VER/2024-10-23-T1213/pangolin_security_utilities/pangolin-security-utilities-$PANGOLIN_OLD_VER-sberlinux9.x86_64.rpm
Внимание!

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

Шаг 5. Восстановление инструмента для работы с конфигурацией (Pangolin Tuner)

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

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

    export PANGOLIN_FULL_OLD_VER=0x.00x.0x
    export PANGOLIN_TUNER_OLD=x.x.x
    dnf install /pgarclogs/backups/$PANGOLIN_FULL_OLD_VER/2024-10-23-T1213/pangolin_tuner/pangolin-tuner-$PANGOLIN_TUNER_OLD-sberlinux9.x86_64.rpm

Шаг 6. Восстановление инструмента для засекречивания паролей (pangolin-auth-password)

  1. Восстановите исходный rpm-пакет (pangolin-auth-password) или исходные бинарные файлы компонента из резервного каталога:

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

    export PANGOLIN_FULL_OLD_VER=0x.00x.0x
    export PANGOLIN_OLD_VER=x.x.x
    dnf install /pgarclogs/backups/$PANGOLIN_FULL_OLD_VER/2024-10-23-T1213/pangolin_auth_password/pangolin-auth-password-$PANGOLIN_OLD_VER-sberlinux9.x86_64.rpm

Шаг 7. Восстановление компонента diagnostic_tool

Восстановите исходный rpm-пакет (pangolin-diagnostic-tool) или исходные бинарные файлы компонента из резервного каталога:

export PANGOLIN_FULL_OLD_VER=0x.00x.0x
export PANGOLIN_OLD_VER=x.x.x
dnf remove pangolin-diagnostic-tool
dnf install /pgarclogs/backups/$PANGOLIN_FULL_OLD_VER/2024-10-23-T1213/pangolin_diagnostic_tool/pangolin-diagnostic-tool-$PANGOLIN_OLD_VER-sberlinux9.x86_64.rpm

Шаг 8. Восстановление компонентов резервного копирования (backup-tools)

Восстановите исходный rpm-пакет (pangolin-backup-tools) или исходные бинарные файлы компонента из резервного каталога:

export PANGOLIN_BACKUP_TOOLS_OLD=x.x.x
export PANGOLIN_BACKUP_TOOLS_VENV_OLD=x.x.x
dnf install /pgarclogs/backups/$PANGOLIN_FULL_OLD_VER/2024-10-23-T1213/pangolin_backup_tools/pangolin-backup-tools-venv-$PANGOLIN_BACKUP_TOOLS_VENV_OLD-sberlinux9.x86_64.rpm
export PANGOLIN_FULL_OLD_VER=0x.00x.0x
dnf remove pangolin-backup-tools
rm -rf /opt/omni/lbin/
dnf install /pgarclogs/backups/$PANGOLIN_FULL_OLD_VER/2024-10-23-T1213/pangolin_backup_tools/pangolin-backup-tools-$PANGOLIN_BACKUP_TOOLS_OLD-sberlinux9.x86_64.rpm

Шаг 9. Восстановление компонента Pangolin Pooler

Восстановите исходный rpm-пакет (pangolin-pooler):

export PANGOLIN_FULL_OLD_VER=0x.00x.0x
export PANGOLIN_POOLER_OLD_VER=x.x.x
dnf remove pangolin-pooler
dnf install /pgarclogs/backups/$PANGOLIN_FULL_OLD_VER/2024-10-23-T1213/pangolin_pooler/pangolin-pooler-$PANGOLIN_POOLER_OLD_VER-sberlinux9.x86_64.rpm
cp -ra /pgarclogs/backups/$PANGOLIN_FULL_OLD_VER/2024-10-23-T1213/pangolin_pooler/etc/pangolin-pooler/userlist.txt /etc/pangolin-pooler/userlist.txt
cp -ra /pgarclogs/backups/$PANGOLIN_FULL_OLD_VER/2024-10-23-T1213/pangolin_pooler/etc/pangolin-pooler/pangolin-pooler.ini /etc/pangolin-pooler/pangolin-pooler.ini
cp -ra /pgarclogs/backups/$PANGOLIN_FULL_OLD_VER/2024-10-23-T1213/pangolin_pooler/opt/pangolin-pooler/bin/pangolin-pooler-restart.sh /opt/pangolin-pooler/bin/pangolin-pooler-restart.sh

Шаг 10. Восстановление компонента Pangolin Manager

Восстановите исходный rpm-пакет (pangolin-manager):

export PANGOLIN_FULL_OLD_VER=0x.00x.0x
export PANGOLIN_MANAGER_OLD_VER=x.x.x
export PANGOLIN_MANAGER_VENV_OLD_VER=x.x.x
dnf remove pangolin-manager
rm -rf /usr/patroni/patroni_venv/
dnf install /pgarclogs/backups/$PANGOLIN_FULL_OLD_VER/2024-10-23-T1213/pangolin_manager/pangolin-manager-venv-$PANGOLIN_MANAGER_VENV_OLD_VER-sberlinux9.x86_64.rpm
dnf install /pgarclogs/backups/$PANGOLIN_FULL_OLD_VER/2024-10-23-T1213/pangolin_manager/pangolin-manager-$PANGOLIN_MANAGER_OLD_VER-sberlinux9.x86_64.rpm
cp -ra /pgarclogs/backups/$PANGOLIN_FULL_OLD_VER/2024-10-23-T1213/pangolin_manager/etc/pangolin-manager/postgres.yml /etc/pangolin-manager/postgres.yml
cp -ra /pgarclogs/backups/$PANGOLIN_FULL_OLD_VER/2024-10-23-T1213/pangolin_manager/patroni.dynamic.json /pgdata/07/data/patroni.dynamic.json

Шаг 11. Восстановление серверной части

Восстановите rpm-пакет (pangolin-dbms):

export PANGOLIN_OLD_VER=x.x.x
export PANGOLIN_FULL_OLD_VER=0x.00x.0x
dnf remove pangolin-dbms platform-v-pangolin-dbms
dnf install /pgarclogs/backups/$PANGOLIN_FULL_OLD_VER/2024-10-23-T1213/pangolin_dbms/pangolin-dbms-7-$PANGOLIN_OLD_VER-sberlinux9.x86_64.rpm

Шаг 12. Восстановление клиентской части

Восстановите rpm-пакет (pangolin-dbms-client) или исходные бинарные файлы компонента из резервного каталога:

export PANGOLIN_OLD_VER=x.x.x
export PANGOLIN_FULL_OLD_VER=0x.00x.0x
dnf remove pangolin-dbms-client
dnf install /pgarclogs/backups/$PANGOLIN_FULL_OLD_VER/2024-10-23-T1213/pangolin_dbms/pangolin-dbms-7-client-$PANGOLIN_OLD_VER-sberlinux9.x86_64.rpm

Шаг 13. Восстановление компонента timescaledb

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

    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.19.3-sberlinux9.x86_64.rpm

Шаг 14. Восстановление пакетов сторонних расширений

  1. Восстановите пакеты сторонних расширений, если в исходной версии они были в виде rpm/deb-пакета:

    export PANGOLIN_POSTGIS=x.x.x
    export PANGOLIN_PGROUTING=x.x.x
    export PANGOLIN_PG_BACKGROUND=x.x
    export PANGOLIN_DBMS_MAJOR=x
    sudo dnf remove -y pangolin-postgis-$PANGOLIN_DBMS_MAJOR-$PANGOLIN_POSTGIS
    sudo dnf remove -y pangolin-pgrouting-$PANGOLIN_DBMS_MAJOR-$PANGOLIN_PGROUTING
    sudo dnf remove -y pangolin-pg-background-$PANGOLIN_DBMS_MAJOR-$PANGOLIN_PG_BACKGROUND
    export PANGOLIN_POSTGIS_OLD=x.x.x
    export PANGOLIN_PGROUTING_OLD=x.x.x
    export PANGOLIN_PG_BACKGROUND_OLD=x.x
    sudo dnf install -y /home/<user>/pangolin/cache/backup/pangolin_external_ext/{postgis_pkg_name}-$PANGOLIN_POSTGIS_OLD
    sudo dnf install -y /home/<user>/pangolin/cache/backup/pangolin_external_ext/{pgrouting_pkg_name}-$PANGOLIN_PGROUTING_OLD
    sudo dnf install -y /home/<user>/pangolin/cache/backup/pangolin_external_ext/{pg_background_pkg_name}-$PANGOLIN_PG_BACKGROUND_OLD

    Где:

    • postgis_pkg_name - наименование исходного пакета стороннего расширения PostGIS (формат: pangolin-postgis или pangolin-postgis-$PANGOLIN_DBMS_MAJOR_OLD);
    • pgrouting_pkg_name - наименование исходного пакета стороннего расширения pgrouting (формат: pangolin-pgrouting или pangolin-pgrouting-$PANGOLIN_DBMS_MAJOR_OLD);
    • pg_background_pkg_name - наименование исходного пакета стороннего расширения pg_background (формат: pangolin-pg-background или pangolin-pg-background-$PANGOLIN_DBMS_MAJOR_OLD).

Шаг 15. Восстановление пакетов Untrusted-расширений

Восстановите пакеты сторонних расширений, если в исходной версии они были в виде rpm/deb-пакета:

export PANGOLIN_OLD_VER=x.x.x
sudo dnf remove -y pangolin-dbms-7-<ext_name>
dnf install /pgarclogs/backups/$PANGOLIN_FULL_OLD_VER/2024-10-23-T1213/pangolin_untrusted_extensions/pangolin-dbms-7-<ext_name>-$PANGOLIN_OLD_VER-sberlinux9.x86_64.rpm

Где ext_name - наименование untrusted-расширения.

Шаг 16. Восстановление опциональных пакетов

Внимание!

В случае использования libpq-части, произведите указанные действия в данном шаге.

  1. Удалите текущие версии пакетов:

    export PANGOLIN_DBMS_MAJOR=x
    sudo dnf remove pangolin-dbms-$PANGOLIN_DBMS_MAJOR-libpq pangolin-dbms-$PANGOLIN_VER-libpq-dev
  2. Установите исходную версию пакетов:

    export PANGOLIN_FULL_OLD_VER=0x.00x.0x
    export PANGOLIN_OLD_VER=x.x.x
    export PANGOLIN_DBMS_MAJOR_OLD=x
    dnf remove pangolin-certs-rotate
    dnf install /pgarclogs/backups/$PANGOLIN_FULL_OLD_VER/2024-10-23-T1213/ pangolin-dbms-libpq-dev/pangolin-dbms-$PANGOLIN_DBMS_MAJOR_OLD-libpq-dev-$PANGOLIN_OLD_VER-sberlinux9.x86_64.rpm
    dnf install /pgarclogs/backups/$PANGOLIN_FULL_OLD_VER/2024-10-23-T1213/ pangolin-dbms-libpq/pangolin-dbms-$PANGOLIN_DBMS_MAJOR_OLD-libpq-$PANGOLIN_OLD_VER-sberlinux9.x86_64.rpm

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

  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

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

Внимание!

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

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

Шаг 19. Запуск компонентов СУБД 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 pangolin-dbms
    • Для конфигурации с 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. В случае конфигурации с 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 pangolin-dbms
    • Для конфигурации с 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