Восстановление после неудачного обновления исполняемых файлов
В разделе рассматривается процесс восстановления после неудачного обновления исполняемых файлов СУБД 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. Подготовка
-
Убедитесь, что все компоненты остановлены:
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 -
Если команда вернула результат, то выполните:
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)
-
Восстановите исходный rpm-пакет (
pangolin-tuner) или исходные бинарные файлы компонента из резервного каталога:dnf remove pangolin-tuner -
Установите пакет, если в исходной версии
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)
-
Восстановите исходный rpm-пакет (
pangolin-auth-password) или исходные бинарные файлы компонента из резервного каталога:dnf remove pangolin-auth-password -
Установите пакет, если в исходной версии
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
-
Восстановите исходный rpm-пакет (
pangolin-timescaledb) или исходные бинарные файлы компонента из резервного каталога:dnf remove pangolin-timescaledb -
Установите пакет, если в исходной версии
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. Восстановление пакетов сторонних расширений
-
Восстановите пакеты сторонних расширений, если в исходной версии они были в виде 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_BACKGROUNDexport 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-части, произведите указанные действия в данном шаге.
-
Удалите текущие версии пакетов:
export PANGOLIN_DBMS_MAJOR=x
sudo dnf remove pangolin-dbms-$PANGOLIN_DBMS_MAJOR-libpq pangolin-dbms-$PANGOLIN_VER-libpq-dev -
Установите исходную версию пакетов:
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. Дополнительный действия
-
Актуализируйте путем замены все вхождения, в строках
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
-
Запустите компоненты Pangolin. В случае кластерной конфигурации, сначала выполните запуск на основном узле:
- Без функциональности «Отказ от root»
- С функциональностью «Отказ от root»
-
Для всех конфигураций:
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
-
Для всех конфигураций:
sudo systemctl restart user@$(id -u postgres)
sudo systemctl restart user@$(id -u kmadmin_pg) -
Для конфигурации с etcd:
sudo systemctl restart etcd -
Для всех конфигураций:
sudo -iu postgres
systemctl --user daemon-reload -
Для конфигурации без Pangolin Manager:
sudo systemctl --user restart pangolin-dbms -
Для конфигурации с Pangolin Manager:
sudo systemctl --user restart pangolin-manager -
Для всех конфигураций:
systemctl --user restart pangolin-pooler
systemctl --user restart pangolin-certs-rotate
systemctl --user restart pangolin-auth-reencrypt
exit
sudo -iu kmadmin_pg
systemctl --user daemon-reload
export XDG_RUNTIME_DIR=/run/user/$(id -u)
export DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus"
systemctl --user restart pangolin-auth-reencrypt
exit
-
В случае конфигурации с 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 -
Проверьте состояние служб:
- Без функциональности «Отказ от root»
- С функциональностью «Отказ от root»
-
Для конфигурации без 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
-
Для конфигурации с etcd:
sudo systemctl status etcd -
Для всех конфигураций:
sudo -iu postgres -
Для конфигурации без Pangolin Manager:
systemctl --user status pangolin-dbms -
Для конфигурации с Pangolin Manager:
systemctl --user status pangolin-manager -
Для всех конфигураций:
systemctl --user status pangolin-pooler
systemctl --user status pangolin-certs-rotate
systemctl --user status pangolin-auth-reencrypt
exit
sudo -iu kmadmin_pg
export XDG_RUNTIME_DIR=/run/user/$(id -u)
export DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus"
systemctl --user status pangolin-auth-reencrypt
exit