Ручное обновление исполняемых файлов СУБД Pangolin
Перед началом обновления необходимо знать особенности, в связи с изменением формата WAL-файлов:
- Корректный откат к исходной версии Pangolin (6.1.0/6.1.2/6.1.4) при отсутствии резервной копии осуществить не получится, поэтому необходимо это учесть при попытке обновиться.
- При обновлении стенда кластерной конфигурации, перед началом обновления необходимо выключить все узлы кластера во избежание фоновых записей старого формата, который при старте уже обновленного узла считаются некорректными.
Перед началом выполнения инструкции необходимо убе диться, что yum/dnf-репозитории настроены корректно.
Перед началом обновления необходимо заблокировать трафик на всех хостах СУБД и выключить службу crond
во избежание сторонних подключений на всех хостах СУБД.
В случае кластерной конфигурации дождитесь полного отсутствия задержки репликации между мастером и репликой. Перед началом процесса обновления узлы кластера должны быть синхронизированы.
Обновление СУБД осуществляется от пользователя с правами sudo
, пользователя postgres
и пользователя kmadmin_pg
.
Все команды ниже являются примерами. Их необходимо отредактировать в соответствии с вашими параметрами и конфигурациями.
Поскольку инструкция является универсальной для standalone и cluster-архитектур, каждый пункт необходимо выполнить на всех узлах кластера БД. На узле arbiter производить обновление компонентов только по необходимости.
Обозначения
В инструкции используются переменные для динамической настройки. Перед выполнением команд эти переменные будут экспортироваться. Скорректируйте значение относительно реализуемого сценария обновления:
PANGOLIN_VER
– новая версия СУБД Pangolin (формат - х.х.х);PANGOLIN_BACKUP_TOOLS
– новая версия компонента pangolin-backup-tools (формат - х.х.х);PANGOLIN_POOLER
– новая версия компонента pangolin-pooler (формат - х.х.х);PANGOLIN_MANAGER
– новая версия компонента pangolin-manager (формат - х.х.х);PANGOLIN_TIMESCALEDB
– новая версия компонента pangolin-timescaledb (формат - х.х.х);PANGOLIN_TIMESCALEDB_OLD
– исходная версия компонента pangolin-timescaledb (формат - х.х.х);PANGOLIN_PGHOME_VER
– новая версия в пути к бинарным файлам СУБД Pangolin (формат - х.х);PANGOLIN_PGHOME_OLD_VER
– исходная версия в пути к бинарным файлам СУБД Pangolin (формат - х.х.х/х.х);PANGOLIN_OLD_VER
– исходная версия СУБД Pangolin (формат - х.х.х);PANGOLIN_FULL_VER
– новая версия СУБД Pangolin (формат - 0х.00х.0х);PANGOLIN_FULL_OLD_VER
– исходная версия СУБД Pangolin (формат - 0х.00х.0х);PGPASSWORD
- пароль от пользователя БД (по умолчанию пользователь postgres).
Список ограничений перед проведением обновления исполняемых файлов СУБД Pangolin
Проверка и устранение данных ограничений происходит автоматически при выборе автоматизированного способа обновления.
Перед обновлением необходимо провести проверку готовности СУБД и устранить выявленные проблемы. Список необходимых проверок описан в проверках готовности к обновлению.
Шаг 1. Подготовка
-
Скачайте дистрибутив в рабочий каталог и распакуйте его. Далее по инструкции путь к компонентам дистрибутива будет формироваться по
~/pangolin
:mkdir -p ~/pangolin
tar -xzvf pangolin_6.tar.gz -C ~/pangolin -
Перед началом обновления убедитесь, что данный сценарий подходит для текущего стенда. Запустите команду из примера ниже на мастере и на реплике:
sudo mkdir -p /home/postgres/pg_inplace_upgrade/{util,backup,log,dump}
sudo cp -r ~/pangolin/installer/utilities/pg_inplace_upgrade/* /home/postgres/pg_inplace_upgrade/util
sudo chmod 700 -R /home/postgres/pg_inplace_upgrade
sudo chown postgres:postgres -R /home/postgres/pg_inplace_upgrade
sudo -iu postgres
export PANGOLIN_VER=x.x.x
export PANGOLIN_OLD_VER=x.x.x
export PGPASSWORD=<password for db user>
cd /home/postgres/pg_inplace_upgrade/util
./inplace_upgrade.sh info -n $PANGOLIN_OLD_VER -N $PANGOLIN_VER -s /home/postgres/pg_inplace_upgrade/util -B /home/postgres/pg_inplace_upgrade/backup -d /pgdata/06/data -l /home/postgres/pg_inplace_upgrade/log -p 5433 -h 127.0.0.1 -u postgres -b postgres -m /home/postgres/pg_inplace_upgrade/dump -t /usr/pangolin/bin -T /usr/pangolin-dbms-client/bin -P $PGPASSWORDВ случае, если необходимо произвести обновление системных данных каталога, будет выведено сообщение:
INFO: Location of update_catalog_version utility: /opt/pangolin_cache/pg_inplace_upgrade/update_catalog_version
INFO: The log-file containing postgresql logs produced during catalog update: /pgarclogs/pg_inplace_upgrade/log/postgres_updade.log
INFO: The summarized catalog update report: /pgarclogs/pg_inplace_upgrade/log/report.log
INFO: ======= START INPLACE_UPGRADE IN INFO MODE =======
INFO: ----------- Initial update analysis -----------
INFO: CATALOG_VERSION_NO_OLD: 202310091
INFO: Following directories will be searched to find sql-scripts applicable in this run:
INFO: /opt/pangolin_cache/pg_inplace_upgrade/update_catalog_version/sql_upgrade_6xx/6.4.0/
INFO: Version: 6.4.0 CATALOG_VERSION_NO_NEW: 202409231
INFO: Initial update analysis........................... OK
INFO: ----------- Update CATALOG_VERSION_NO -----------
INFO: update_catalog_version: The new catalog version is the same as the current one.
INFO: Update CATALOG_VERSION_NO......................... OK
INFO: ----------- Read all catalog update SQL-scripts -----------
INFO: Read all catalog update SQL-scripts............... OK
INFO: ----------- Extract info about users tablespaces -----------
INFO: paths: /opt/pangolin_cache/pg_inplace_upgrade/tmp_check/test_db
INFO: version: PostgreSQL 15.5 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 8.5.0 20210514 (Platform V SberLinux 8.5.0-18), 64-bit
INFO: Extract info about users tablespaces.............. OK
INFO:
INFO mode finished with Success. Update required.
===================================================Если нет необходимости в обновлении системных данных каталога, будет выведено сообщение:
INFO: Location of update_catalog_version utility: /opt/pangolin_cache/pg_inplace_upgrade/update_catalog_version
INFO: The log-file containing postgresql logs produced during catalog update: /pgarclogs/pg_inplace_upgrade/log/postgres_updade.log
INFO: The summarized catalog update report: /pgarclogs/pg_inplace_upgrade/log/report.log
INFO: ======= START INPLACE_UPGRADE IN INFO MODE =======
INFO: ----------- Initial update analysis -----------
INFO: CATALOG_VERSION_NO_OLD: 202409231
INFO: Following directories will be searched to find sql-scripts applicable in this run:
INFO: /opt/pangolin_cache/pg_inplace_upgrade/sql_upgrade_6xx/6.4.0/
INFO: Version: 6.4.0 CATALOG_VERSION_NO_NEW: 202409231
INFO: Initial update analysis........................... OK
INFO:
INFO mode finished with Success. Update not required.
===================================================Если в процессе работы утилиты что-то пошло не так, будет выведено сообщение:
INFO: Location of update_catalog_version utility: /opt/pangolin_cache/pg_inplace_upgrade/update_catalog_version
INFO: The log-file containing postgresql logs produced during catalog update: /pgarclogs/pg_inplace_upgrade/log/postgres_updade.log
INFO: The summarized catalog update report: /pgarclogs/pg_inplace_upgrade/log/report.log
INFO: ======= START INPLACE_UPGRADE IN INFO MODE =======
INFO: ----------- Initial update analysis -----------
INFO: CATALOG_VERSION_NO_OLD: 202310091
INFO: Following directories will be searched to find sql-scripts applicable in this run:
INFO: /opt/pangolin_cache/pg_inplace_upgrade/sql_upgrade_6xx/6.2.0/
INFO: Version: 6.2.0 CATALOG_VERSION_NO_NEW: 202310091
INFO: /opt/pangolin_cache/pg_inplace_upgrade/sql_upgrade_6xx/6.3.0/
INFO: Version: 6.3.0 CATALOG_VERSION_NO_NEW: 202310091
INFO: /opt/pangolin_cache/pg_inplace_upgrade/sql_upgrade_6xx/6.4.0/
INFO: Version: 6.4.0 CATALOG_VERSION_NO_NEW: 202409231
ERROR: File /opt/pangolin_cache/pg_inplace_upgrade/sql_upgrade_6xx/6.4.1/CATALOG_VERSION was not found
INFO: Initial update analysis........................... FAIL
INFO:
INFO mode finished with Error.
===================================================СведенияК дальнейшим шагам приступайте, если утилита
inplace_upgrade.sh
вернула сообщение на Шаге 1:«INFO mode finished with Success. Update required»
. -
Для кластерной конфигурации. Добавьте временный физический слот репликации на master:
-
Проверьте наличие заданных слотов репликации в конфигурации DCS:
sudo -iu postgres
/opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml show-config -
Создайте отдельный файл
ignore_slots.json
и добавьте, по необходимости, существующие слоты репликации. Формат файла должен быть следующим:ignore_slots:
- <слот репликации>где
<слот репликации>
- существующие слоты репликации из конфигурации DCS. -
Добавьте в созданный ранее файл
ignore_slots.json
информацию о новом временном слоте репликации:echo '- name: tmp_update_slot' >> ignore_slots.json && echo ' type: physical' >> ignore_slots.json
-
Сохраните текущую конфигурацию DCS и примените настройки для
ignore_slots
:cp -r /pgdata/data/data/patroni.dynamic.json /home/postgres
/opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml edit-config --apply <path_to_ignore_slots> --force
psql
SELECT * FROM pg_create_physical_replication_slot('tmp_update_slot', 'TRUE');
exitгде
path_to_ignore_slots
- полный путь до созданного ранее файлаignore_slots.json
.
-
Шаг 2. Остановка компонентов СУБД Pangolin
-
В случае конфигурации с Patroni/Pangolin Manager введите компонент в режим паузы:
- Конфигурация с Patroni (более старые версии продукта)
- Конфигурация с Pangolin Manager (более новые версии продукта)
sudo -iu postgres
patronictl -c /etc/patroni/postgres.yml edit-config --set 'pause=true' --force
exitsudo -iu postgres
pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml edit-config --set 'pause=true' --force
exit -
Ост ановите все компоненты СУБД Pangolin. Перед остановкой необходимо выполнить команду CHECKPOINT на мастере. В случае кластерной конфигурации действия по остановке произведите сначала на реплике, затем на основном узле:
- Без функциональности «Отказ от root»
- С включенной функциональностью «Отказ от root»
# Для конфигурации без pangolin-manager
sudo systemctl stop postgresql
# Для конфигурации с pangolin-manager
sudo -iu postgres
pg_ctl stop
exit
sudo systemctl stop patroni
sudo systemctl stop pangolin-manager
# Для конфигурации с etcd
sudo systemctl stop etcd
# Для любой конфигурации
sudo systemctl stop pangolin-pooler
sudo systemctl stop pangolin_reencrypt@postgres.service
sudo systemctl stop pangolin_reencrypt@kmadmin_pg.service
sudo systemctl stop pg_certs_rotate_agent.service
sudo systemctl stop pangolin-certs-rotate
sudo systemctl stop pangolin-auth-reencrypt@postgres
sudo systemctl stop pangolin-auth-reencrypt@kmadmin_pg