Ручное обновление исполняемых файлов СУБД 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).
Шаг 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 введите компонент в режим паузы:
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 на мастере. В случае кластерной конфигурации действия по остановке произведите сначала на реплике, затем на основном узле:
# Для конфигурации без 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# Для конфигурации с etcd sudo systemctl stop etcd sudo -iu postgres # Для конфигурации с pangolin-manager pg_ctl stop systemctl --user stop pangolin-manager # Для конфигурации без pangolin-manager systemctl --user stop postgresql # Для любой конфигурации systemctl --user stop pangolin-pooler systemctl --user stop pangolin-certs-rotate systemctl --user stop 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 stop pangolin-auth-reencrypt exitПроверьте, что все компоненты корректно остановлены:
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Если команда на шаге 3 вернула результат, то выполните следующее:
sudo kill -9 <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
Шаг 3. Обновление компонента pangolin-auth-reencrypt#
Произведите обновление пакета компонента:
export PANGOLIN_VER=x.x.x
sudo dnf install -y ~/pangolin/utilities/pangolin-auth-reencrypt-$PANGOLIN_VER-sberlinux8.x86_64.rpm
В случае конфигурации с DCS, произведите дополнительно обновление на узле arbiter.
Шаг 4. Обновление компонента pangolin-certs-rotate#
Произведите обновление пакета компонента:
export PANGOLIN_VER=x.x.x
sudo dnf install -y ~/pangolin/utilities/pangolin-certs-rotate-$PANGOLIN_VER-sberlinux8.x86_64.rpm
В случае конфигурации с DCS, произведите дополнительно обновление на узле arbiter.
Шаг 5. Обновление компонента pangolin-security-utilities#
Произведите обновление пакета компонента:
export PANGOLIN_VER=x.x.x
sudo dnf install -y ~/pangolin/utilities/pangolin-security-utilities-$PANGOLIN_VER-sberlinux8.x86_64.rpm
В случае конфигурации с DCS, произведите дополнительно обновление на узле arbiter.
Шаг 6. Обновление компонента pangolin-diagnostic-tools#
Произведите обновление пакета компонента:
export PANGOLIN_VER=x.x.x
sudo dnf install -y ~/pangolin/utilities/pangolin-diagnostic-tool-$PANGOLIN_VER-sberlinux8.x86_64.rpm
Шаг 7. Обновление компонента pangolin-backup-tools#
Произведите обновление пакета компонента:
export PANGOLIN_BACKUP_TOOLS=1.2.2 sudo dnf install -y ~/pangolin/pangolin-backup-tools-$PANGOLIN_BACKUP_TOOLS-sberlinux8.x86_64.rpmАктуализируйте конфигурационный файл
backup-tools-envсогласно шаблону ниже:# PATH, used for access to required executable files, default value: "${PATH}:{PGHOME}/bin/" PATH="${PATH}:/usr/pangolin-6.5/bin/" # path to PGHOME, default value: "/opt/pangolin-backup-tools/bin" PGHOME="/opt/pangolin-backup-tools" # path to python libraries, required for manage_backup.bin, default value: "/opt/pangolin-backup-tools/lib/python3/site-packages" PYTHONPATH="/opt/pangolin-backup-tools/lib/python3/site-packages" # path to libraries, required for executable files, default value: "/opt/pangolin-backup-tools/lib" LD_LIBRARY_PATH="/opt/pangolin-backup-tools/lib" # path to plugins libraries, default value: "/opt/pangolin-backup-tools/lib" PG_PLUGINS_PATH="/opt/pangolin-backup-tools/lib" # Pangolin DBMS server IP, default value: "127.0.0.1" ARG_KEY_DBMS_SERVER_IP="127.0.0.1" # Pangolin DBMS port, default value: "5433" ARG_KEY_DBMS_SERVER_PORT="5433" # user used for access to database, default value: "backup_user" ARG_KEY_DBMS_CONNECT_USER="backup_user" # database to connect, default value: "postgres" ARG_KEY_DBMS_CONNECT_DATA_BASE="postgres" # path to backup storage, default value: "/pgarclogs" ARG_KEY_DBMS_CONNECT_BACKUP_DIR="/pgarclogs/06" # password to connect to Pangolin DBMS, default value: 'sample_password' # cluster name, default value: "clustername" PGINSTANCE="clustername" # WAL archives list WALSTATE_FILE="$ARG_KEY_DBMS_CONNECT_BACKUP_DIR/wals_to_delete" # Log file LOG_FILE="$ARG_KEY_DBMS_CONNECT_BACKUP_DIR/archive.log" # path to script, used for creating backup files, default value: "/opt/pangolin-backup-tools/bin/manage_backup.sh" MANAGE_BACKUP_SCRIPT="/opt/pangolin-backup-tools/bin/manage_backup.sh" # setting up of connection string PANGOLIN_BACKUP_TOOLS_ARGS="$PANGOLIN_BACKUP_TOOLS_ARGS --host $ARG_KEY_DBMS_SERVER_IP" PANGOLIN_BACKUP_TOOLS_ARGS="$PANGOLIN_BACKUP_TOOLS_ARGS -p $ARG_KEY_DBMS_SERVER_PORT" PANGOLIN_BACKUP_TOOLS_ARGS="$PANGOLIN_BACKUP_TOOLS_ARGS -U $ARG_KEY_DBMS_CONNECT_USER" PANGOLIN_BACKUP_TOOLS_ARGS="$PANGOLIN_BACKUP_TOOLS_ARGS -d $ARG_KEY_DBMS_CONNECT_DATA_BASE" PANGOLIN_BACKUP_TOOLS_ARGS="$PANGOLIN_BACKUP_TOOLS_ARGS -B $ARG_KEY_DBMS_CONNECT_BACKUP_DIR" # environment variables to launch manage backup export PATH export PGHOME export PYTHONPATH export LD_LIBRARY_PATH export PG_PLUGINS_PATH # опционально sudo rm -rf /opt/omni/lbin/*manage_backup* sudo rm -rf /opt/omni/lbin/*pg_se_archlogs*
Шаг 8. Обновление компонента Pangolin Pooler#
Произведите обновление пакета компонента:
export PANGOLIN_POOLER=1.4.1
sudo dnf install -y ~/pangolin/pangolin-pooler-$PANGOLIN_POOLER-sberlinux8.x86_64.rpm
Шаг 9. Обновление компонента Pangolin Manager#
Произведите обновление пакета компонента:
export PANGOLIN_PGHOME_VER=x.x export PANGOLIN_PGHOME_OLD_VER=x.x export PANGOLIN_MANAGER=2.1.6 sudo dnf install -y ~/pangolin/pangolin-manager-$PANGOLIN_MANAGER-sberlinux8.x86_64.rpm sudo sed -i "s/$PANGOLIN_PGHOME_OLD_VER/$PANGOLIN_PGHOME_VER/g" /etc/pangolin-manager/postgres.yml # Добавить в файл /etc/pangolin-manager/postgres.yml параметр в секцию postgresql, если его нет bin_dir_client: /usr/pangolin-dbms-client-$PANGOLIN_PGHOME_VER/binВ случае конфигурации с DCS, произведите дополнительно обновление на узле arbiter.
Для конфигурации с DCS выполните данный шаг только на узле arbiter:
sudo chmod -R 0440 /opt/pangolin-manager/lib/plugins/ /opt/pangolin-manager/lib/libfe_elog.so sudo chmod 0770 /opt/pangolin-manager /opt/pangolin-manager/bin /opt/pangolin-manager/lib /opt/pangolin-manager/lib/plugins sudo chown postgres:pangolin_users /opt/pangolin-manager /opt/pangolin-manager/bin /opt/pangolin-manager/lib /opt/pangolin-manager/lib/plugins /opt/pangolin-manager/lib/libfe_elog.so
Шаг 10. Обновление компонента pangolin-dbms#
Произведите обновление пакета компонента:
export PANGOLIN_OLD_VER=x.x.x
sudo dnf remove -y pangolin-dbms-6.4-$PANGOLIN_OLD_VER
export PANGOLIN_VER=x.x.x
sudo dnf install -y ~/pangolin/pangolin-dbms-6.5-$PANGOLIN_VER-sberlinux8.x86_64.rpm
sudo rm -rf /usr/pangolin-6.1* /usr/pangolin-6.2* usr/pangolin-6.3* usr/pangolin-6.4* /usr/pgsql-se-06
# Для конфигурации без pangolin-manager
export PANGOLIN_PGHOME_OLD_VER=x.x
export PANGOLIN_PGHOME_VER=x.x
sudo sed -i "s/$PANGOLIN_PGHOME_OLD_VER/$PANGOLIN_PGHOME_VER/g" /pgdata/06/data/postgresql.conf
sudo sed -i "s/$PANGOLIN_PGHOME_OLD_VER/$PANGOLIN_PGHOME_VER/g" /etc/systemd/system/postgresql.service
Шаг 11. Обновление компонента pangolin-dbms-client#
Произведите обновление пакета компонента:
export PANGOLIN_OLD_VER=x.x.x
sudo dnf remove -y pangolin-dbms-6.4-client-$PANGOLIN_OLD_VER
export PANGOLIN_VER=x.x.x
sudo dnf install -y ~/pangolin/pangolin-dbms-6.5-client-$PANGOLIN_VER-sberlinux8.x86_64.rpm
Шаг 12. Обновление компонента pangolin-timescaledb#
Произведите обновление пакета компонента:
# опционально
export PANGOLIN_TIMESCALEDB_OLD=2.14.2
sudo dnf remove -y pangolin-timescaledb-6.4-apache-$PANGOLIN_TIMESCALEDB_OLD
export PANGOLIN_TIMESCALEDB=2.14.2
sudo dnf install -y ~/pangolin/timescaledb/pangolin-timescaledb-6.5-apache-$PANGOLIN_TIMESCALEDB-sberlinux8-x86_64.rpm
Шаг 13. Дополнительные действия#
Скопируйте 3rd-party компоненты:
sudo cp -r ~/pangolin/3rdparty/ /usr/pangolin/ sudo tar -xzvf /usr/pangolin/3rdparty/3rdparty.tar.gz -C /usr/pangolin/3rdparty/ sudo chown -R postgres:postgres /usr/pangolin/3rdparty sudo chmod -R 0700 /usr/pangolin/3rdpartyАктуализируйте
.bash_profileиdynmotd.sh:export PANGOLIN_MANAGER=x.x.x export PANGOLIN_OLD_MANAGER=x.x.x export PANGOLIN_FULL_VER=0x.00x.0x export PANGOLIN_FULL_OLD_VER=0x.00x.0x export PANGOLIN_PGHOME_VER=x.x export PANGOLIN_PGHOME_OLD_VER=x.x sudo sed -i "s/$PANGOLIN_PGHOME_OLD_VER/$PANGOLIN_PGHOME_VER/g" /home/postgres/.bash_profile sudo sed -i "s/$PANGOLIN_PGHOME_OLD_VER/$PANGOLIN_PGHOME_VER/g" /home/kmadmin_pg/.bash_profile sudo sed -i "s/$PANGOLIN_PGHOME_OLD_VER/$PANGOLIN_PGHOME_VER/g" /home/postgres/.bashrc sudo sed -i "s/$PANGOLIN_PGHOME_OLD_VER/$PANGOLIN_PGHOME_VER/g" /home/kmadmin_pg/.bashrc sudo sed -i "s/$PANGOLIN_OLD_MANGER/$PANGOLIN_MANAGER/g" /usr/local/sbin/dynmotd.sh sudo sed -i "s/$PANGOLIN_FULL_OLD_VER/$PANGOLIN_FULL_VER/g" /usr/local/sbin/dynmotd.shПроизведите дополнительно данные действия на узле arbiter.
Шаг 14. Запуск утилиты обновления системных данных каталога СУБД Pangolin#
Выполните данный шаг, если утилита inplace_upgrade.sh вернула сообщение на Шаге 1: «INFO mode finished with Success. Update required».
Добавьте в конец конфигурационного файла
postgresql.confвременные значения для мастера и реплики:sudo -iu postgres echo "synchronous_commit = 'off' #tmp_line" >> /pgdata/data/data/postgresql.conf echo "autovacuum = 'off' #tmp_line" >> /pgdata/data/data/postgresql.conf echo "cron.database_name = 'template1' #tmp_line" >> /pgdata/data/data/postgresql.conf exitЗаменить все вхождения, в строках
postgresql.conf, старой версии на новую версию для мастера и репликиexport PANGOLIN_PGHOME_OLD_VER=x.x export PANGOLIN_PGHOME_VER=x.x sudo sed -i "s/$PANGOLIN_PGHOME_OLD_VER/$PANGOLIN_PGHOME_VER/g" /pgdata/06/data/postgresql.confПроизведите запуск обновления системных данных на мастере:
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 update -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 -D -k -P $PGPASSWORD exitОжидаемый успешный результат:
... INFO: Update Complete! INFO: ----------- Finish upgrade ----------- INFO: Finish upgrade.................................... OK INFO: UPDATE mode finished with Success. ===================================================Внимание!
В случае, если на мастере обновление прошло неуспешно, произведите восстановление по инструкции «Восстановление после неудачного обновления исполняемых файлов». Все дальнейшие шаги данной инструкции необходимо пропустить.
Произведите запуск обновления системных данных на реплике, если кластерная конфигурация и обновления на узле master прошло успешно.
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 update -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 -r -D -k -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 UPDATE 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/tmp_check/upgrade9/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: Catalog version has been successfully updated to 202409231. INFO: Update CATALOG_VERSION_NO......................... OK INFO: ----------- Read all catalog update SQL-scripts ----------- INFO: Read all catalog update SQL-scripts............... OK INFO: ----------- Update user tablespaces ----------- INFO: renamed '/tmp/WDfqY_1Ing/PG_15_202310091' -> '/tmp/WDfqY_1Ing/PG_15_202409231' INFO: Rename directories of user tablespaces INFO: Update user tablespaces........................... OK INFO: Replica is updated INFO: UPDATE mode finished with Success. ===================================================Внимание!
В случае, если на мастере обновление прошло неуспешно, произведите восстановление по инструкции «Восстановление после неудачного обновления исполняемых файлов».
Все дальнейшие шаги данной инструкции необходимо пропустить.
Шаг 15. Запуск компонентов СУБД Pangolin#
Удалите временные переменные из
postgresql.confна мастере и реплике:synchronous_commit = 'off' #tmp_line autovacuum = 'off' #tmp_line cron.database_name = 'template1' #tmp_lineЗапустите компоненты 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_pgsudo 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 systemctl --user restart postgresql # Для конфигурации с pangolin-manager 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 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# Для конфигурации с etcd sudo systemctl status etcd sudo -iu postgres # Для конфигурации без pangolin-manager systemctl --user status postgresql # Для конфигурации с 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Для конфигурации с pangolin-manager. Выведите pangolin-manager из режима паузы, дождитесь активного состояния и статуса master –
Leader:sudo -iu postgres pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml edit-config --set 'pause=false' --force pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml list exitДля конфигурации с pangolin-manager. Включите синхронизацию:
sudo -iu postgres pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml show-config | grep synchronous > save_old_dcs_value.txt pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml edit-config --set 'synchronous_mode=true' --force pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml edit-config --set 'synchronous_mode_strict=true' --force exitПроизведите запуск компонентов 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_pgsudo 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 systemctl --user restart postgresql # Для конфигурации с pangolin-manager 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 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# Для конфигурации с etcd sudo systemctl status etcd sudo -iu postgres # Для конфигурации без pangolin-manager systemctl --user status postgresql # Для конфигурации с 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Дождитесь статуса синхронизации на реплике –
sync_standby:sudo -iu postgres pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml list exitУдалите временный физический слот репликации на мастера:
sudo -iu postgres /opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml edit-config --replace /home/postgres/patroni.dynamic.json --force psql -c "SELECT * FROM pg_drop_replication_slot('tmp_update_slot');" exitВосстановите исходных значений конфигурации dcs
sudo -iu postgres echo pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml edit-config --set "'synchronous_mode=$(sed -n /synchronous_mode:/p save_old_dcs_value.txt | sed 's/synchronous_mode: //')'" --force | bash echo pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml edit-config --set "'synchronous_mode_strict=$(sed -n /synchronous_mode_strict:/p save_old_dcs_value.txt | sed 's/synchronous_mode_strict: //')'" --force | bash exit
Шаг 16. Обновление расширений#
Создайте временный файл
ext_update.sqlи поместите его в/home/postgres/:set ON_ERROR_STOP = true; DO $$ DECLARE r text; BEGIN FOR r IN (SELECT extname FROM pg_catalog.pg_extension WHERE extname in ( 'adminpack', 'amcheck', 'auth_delay', 'auto_explain', 'autoinc', 'bloom', 'btree_gin', 'btree_gist', 'citext', 'cube', 'dblink', 'dict_int', 'dict_xsyn', 'earthdistance', 'file_fdw', 'fuzzystrmatch', 'hstore', 'hstore_plperl', 'hstore_plperlu', 'hstore_plpython3u', 'insert_username', 'intagg', 'intarray', 'isn', 'jsonb_plperl', 'jsonb_plperlu', 'jsonb_plpython3u', 'lo', 'ltree', 'ltree_plpython3u', 'moddatetime', 'pageinspect', 'pg_buffercache', 'pg_freespacemap', 'pg_prewarm', 'pg_stat_statements', 'pg_trgm', 'pg_visibility', 'pgcrypto', 'pgrowlocks', 'pgstattuple', 'plperl', 'plperlu', 'plpgsql', 'pltcl', 'pltclu', 'postgres_fdw', 'refint', 'seg', 'sslinfo', 'tablefunc', 'tcn', 'timetravel', 'tsm_system_rows', 'tsm_system_time', 'unaccent', 'uuid-ossp', 'xml2', 'bool_plperlu', 'bool_plperl', 'rum', 'oid2name', 'online_analyze', 'pg_backup', 'pg_standby', 'protected_dump', 'pg_profile', 'orafce', 'pg_squeeze', 'pg_cron', 'pg_repack', 'pgse_backup', 'pg_hint_plan', 'pg_outline', 'oracle_fdw', 'tds_fdw', 'psql_lockmon', 'pg_stat_kcache', 'psql_rotate_password', 'fasttrun', 'fulleq', 'mchar', 'psql_diagpack', 'pg_store_plans', 'pg_orphaned', 'psql_resources_consumption_limits') and extname not in ('pg_repack', 'timescaledb')) LOOP RAISE NOTICE 'Update extension %', r; EXECUTE FORMAT('ALTER EXTENSION %I UPDATE;', r); END LOOP; FOR r IN (SELECT extname FROM pg_catalog.pg_extension WHERE extname = 'pg_repack') LOOP RAISE NOTICE 'Update extension %', r; EXECUTE FORMAT('DROP EXTENSION IF EXISTS %I;', r); EXECUTE FORMAT('CREATE EXTENSION IF NOT EXISTS %I WITH SCHEMA ext;', r); END LOOP; END $$;Создайте временный файл
run_update_extentions.shи поместите его в/home/postgres/:databases=($($PG_HOME/bin/psql -t --csv -c "SELECT datname FROM pg_database WHERE datname NOT LIKE 'template0';")) echo "databases: " $databases for ud in "${databases[@]}"; do echo "database: " $ud $PG_HOME/bin/psql -d $ud -f /home/postgres/ext_update.sql done if [ $? -eq 0 ] then echo "All extentions have updated on nodes" else echo "There were some problems during proccess updating" exit 1 fi fi " > /home/postgres/run_update_extentions.sh exit fi " > /home/postgres/run_update_extentions.sh exitЗапустите sh-скрипт
run_update_extentions.sh:sudo -iu postgres chmod 0700 run_update_extentions.sh cd ~/ PG_LICENSE_PATH=/opt/pangolin_license PG_HOME=/usr/pangolin-dbms-client PGHOST=127.0.0.1 PGPORT=5433 ./run_update_extentions.sh rm -f /home/postgres/run_update_extentions.sh /home/postgres/ext_update.sql exitВнимание!
Произведите выключение блокировки трафика и запуск службы
crond, если ранее они были выключены.
Шаг 17. Обновление каталога безопасности#
(master) Добавьте временный параметр
enable_protection_catalogs_upgradeиз под пользователя postgres в конец конфигурационного файла в зависимости от конфигурации с помощью обычного текстового редактора:# Для конфигурации без pangolin-manager отредактируйте конфигурационный файл postgresql.conf enable_protection_catalogs_upgrade = True # Для конфигурации с pangolin-manager отредактируйте конфигурационный файл postgres.yml postgresql: parameters: enable_protection_catalogs_upgrade: True(master) Произведите
reloadиrestartСУБД в зависимости от конфигурации:# Для конфигурации без pangolin-manager sudo su - postgres /usr/pangolin/bin/pg_ctl reload -D /pgdata/data/data /usr/pangolin/bin/pg_ctl restart -D /pgdata/data/data exit # Для конфигурации с pangolin-manager sudo su - postgres /opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml reload clustername /opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml restart clustername exit(master) Выполните следующую команду в каждой БД поочередно, кроме БД с включенным флагом
datallowconn. <DB> - заменить на название базы данных:sudo su - postgres psql -c "SELECT NOW()" -d <DB> exit(master) Удалите временный параметр
enable_protection_catalogs_upgradeиз конфигурационного файла в зависимости от конфигурации из под пользователя postgres с помощью обычного текстового редактора. И произведитеreloadиrestartСУБД в зависимости от конфигурации:# Для конфигурации без pangolin-manager sudo su - postgres /usr/pangolin/bin/pg_ctl reload -D /pgdata/data/data /usr/pangolin/bin/pg_ctl restart -D /pgdata/data/data exit # Для конфигурации с pangolin-manager sudo su - postgres /opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml reload clustername /opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml restart clustername exit