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

Ручное обновление исполняемых файлов СУБД Pangolin

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

Внимание!

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

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

Обновление выполняется покомпонентно. Шаги, соответствующие компонентам, отсутствующим в конфигурации, следует пропустить.

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

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

Обозначения

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

  • PANGOLIN_VER – новая версия СУБД Pangolin (формат - х.х.х);
  • PANGOLIN_VER_OLD – исходная версия СУБД Pangolin (формат - х.х.х);
  • PANGOLIN_FULL_VER – новая версия СУБД Pangolin (формат - 0х.00х.0х);
  • PANGOLIN_FULL_VER_OLD – исходная версия СУБД Pangolin (формат - 0х.00х.0х);
  • PANGOLIN_DBMS_MAJOR – новая мажорная версия СУБД Pangolin (формат - х);
  • PANGOLIN_DBMS_MAJOR_OLD – исходная мажорная версия СУБД Pangolin (формат - х);
  • PANGOLIN_BACKUP_TOOLS – новая версия компонента Pangolin Backup Tools (формат - х.х.х);
  • PANGOLIN_BACKUP_TOOLS_VENV – новая версия зависимости pangolin-backup-tools-venv (формат - х.х.х);
  • PANGOLIN_POOLER – новая версия компонента Pangolin Pooler (формат - х.х.х);
  • PANGOLIN_MANAGER – новая версия компонента Pangolin Manager (формат - х.х.х);
  • PANGOLIN_MANAGER_VENV – новая версия зависимости pangolin-manager-venv (формат - х.х.х);
  • PANGOLIN_MANAGER_OLD - исходная версия компонента Pangolin Manager (формат - х.х.х);
  • PANGOLIN_TUNER – новая версия компонента Pangolin Tuner (формат - х.х.х);
  • PANGOLIN_TIMESCALEDB – новая версия расширения timescaledb (формат - х.х.х);
  • PANGOLIN_TIMESCALEDB_RELEASE – новая версия релиза пакета расширения timescaledb (формат - х.х.х);
  • PANGOLIN_POSTGIS – новая версия пакета стороннего расширения postgis (формат - х.х.х);
  • PANGOLIN_PGROUTING – новая версия пакета стороннего расширения pgrouting (формат - х.х.х);
  • PANGOLIN_PG_BACKGROUND – новая версия пакета стороннего расширения pg_background (формат - х.х.х);
  • PANGOLIN_POSTGIS_RELEASE – новая версия релиза пакета стороннего расширения postgis (формат - х.х.х);
  • PANGOLIN_PGROUTING_RELEASE – новая версия релиза пакета стороннего расширения pgrouting (формат - х.х.х);
  • PANGOLIN_PG_BACKGROUND_RELEASE – новая версия релиза пакета стороннего расширения pg_background (формат - х.х.х);
  • PGPASSWORD - пароль от пользователя БД (по умолчанию пользователь postgres);
  • CLUSTERNAME - наименование кластера (по умолчанию clustername).

Предусловие

Сведения

Перед началом обновления необходимо выключить службуcrond во избежание сторонних подключений на всех хостах СУБД.

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

Перед началом необходимо произвести проверку готовности СУБД к процессу обновления и устранить выявленные проблемы. Список необходимых проверок представлен в разделе «Проверка готовности к обновлению».

Сведения

Проверка и устранение возможных ограничений происходит автоматически при выбореавтоматизированного способа обновления.

В случае использования расширения timescaledb убедитесь, что обновляемая версия расширения поддерживается и подходит для запланированного сценария обновления. В противном случае необходимо сначала обновить расширение до допустимой версии. Если поднять версию расширения в рамках одной версии СУБД невозможно, следует произвести обновление СУБД на промежуточную, а затем на целевую версию. Уточнение по процессу обновления стендов с предустановленным расширением timescaledb указано в «Таблице поддерживаемых для обновления версий СУБД».

В случае использования расширения psql_rotate_password, необходимо обязательно добавить его в параметр shared_preload_libraries конфигурационного файла postgres.yml/postgresql.conf. Чтобы определить, используется ли psql_rotate_password, для каждой БД выполните запрос:

SELECT extname FROM pg_extension WHERE extname='psql_rotate_password';

Сценарий обновления

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

Шаг 1. Резервное копирование (обязательно)

Перед выполнением обновления выполните резервную копию рабочих файлов компонентов СУБД. Этот шаг обязателен для возможности восстановления в случае возникновения проблем.

Действия по резервному копированию компонентов СУБД

Сохраните рабочие файлы компонентов СУБД Pangolin:

  • general:

    (Обязательно) Действия по резервному копированию общих системных файлов

    mkdir -p ~/pangolin/cache/backup/pangolin_general/{postgres,kmadmin_pg}
    sudo cp -ra /usr/local/sbin/dynmotd.sh ~/pangolin/cache/backup/pangolin_general/
    sudo cp -ra /etc/profile ~/pangolin/cache/backup/pangolin_general/
    sudo cp -ra /home/postgres/.bash_profile ~/pangolin/cache/backup/pangolin_general/postgres
    sudo cp -ra /home/postgres/.bashrc ~/pangolin/cache/backup/pangolin_general/postgres
    sudo cp -ra /home/kmadmin_pg/.bash_profile ~/pangolin/cache/backup/pangolin_general/kmadmin_pg
    sudo cp -ra /home/kmadmin_pg/.bashrc ~/pangolin/cache/backup/pangolin_general/kmadmin_pg
  • pangolin-auth-reencrypt:

    (Опционально) Действия по резервному копированию компонента pangolin-auth-reencrypt

    export PANGOLIN_VER_OLD=x.x.x
    mkdir -p ~/pangolin/cache/backup/pangolin_auth_reencrypt
    sudo cp -ra {path_to_service}/pangolin-auth-reencrypt@.service ~/pangolin/cache/backup/pangolin_auth_reencrypt/
    sudo cp -ra {path_to_service}/pangolin-auth-reencrypt.service ~/pangolin/cache/backup/pangolin_auth_reencrypt/
    sudo cp -ra /etc/pangolin-auth-reencrypt/enc_util.cfg ~/pangolin/cache/backup/pangolin_auth_reencrypt/
    sudo dnf download --downloadonly --destdir=~/pangolin/cache/backup/pangolin_auth_reencrypt/ pangolin-auth-reencrypt-$PANGOLIN_VER_OLD
  • pangolin-certs-rotate:

    (Опционально) Действия по резервному копированию компонента pangolin-certs-rotate

    export PANGOLIN_VER_OLD=x.x.x
    mkdir -p ~/pangolin/cache/backup/pangolin_certs_rotate
    sudo cp -ra {path_to_service}/pangolin-certs-rotate.service ~/pangolin/cache/backup/pangolin_certs_rotate/
    sudo cp -ra /etc/pangolin-certs-rotate/pangolin-certs-rotate.yml ~/pangolin/cache/backup/pangolin_certs_rotate/
    sudo dnf download --downloadonly --destdir=~/pangolin/cache/backup/pangolin_certs_rotate/ pangolin-certs-rotate-$PANGOLIN_VER_OLD
  • pangolin-security-utilities:

    (Опционально) Действия по резервному копированию компонента pangolin-security-utilities

    export PANGOLIN_VER_OLD=x.x.x
    mkdir -p ~/pangolin/cache/backup/pangolin_security_utilities
    sudo dnf download --downloadonly --destdir=~/pangolin/cache/backup/pangolin_security_utilities/ pangolin-security-utilities-$PANGOLIN_VER_OLD
  • pangolin-backup-tools:

    (Опционально) Действия по резервному копированию компонента pangolin-backup-tools

    export PANGOLIN_BACKUP_TOOLS_OLD=x.x.x
    export PANGOLIN_BACKUP_TOOLS_VENV_OLD=x.x.x
    mkdir -p ~/pangolin/cache/backup/pangolin_backup_tools
    sudo cp -ra /etc/pangolin-backup-tools/backup-tools-env ~/pangolin/cache/backup/pangolin_backup_tools/
    sudo dnf download --downloadonly --destdir=~/pangolin/cache/backup/pangolin_backup_tools/ pangolin-backup-tools-$PANGOLIN_BACKUP_TOOLS_OLD
    sudo dnf download --downloadonly --destdir=~/pangolin/cache/backup/pangolin_backup_tools/ pangolin-backup-tools-venv-$PANGOLIN_BACKUP_TOOLS_VENV_OLD
  • Pangolin Pooler:

    (Опционально) Действия по резервному копированию компонента Pangolin Pooler

    export PANGOLIN_POOLER_OLD=x.x.x
    mkdir -p ~/pangolin/cache/backup/pangolin_pooler
    sudo cp -ra {path_to_service}/pangolin-pooler.service ~/pangolin/cache/backup/pangolin_pooler/
    sudo cp -ra /etc/pangolin-pooler/pangolin-pooler.ini ~/pangolin/cache/backup/pangolin_pooler/
    sudo cp -ra /etc/pangolin-pooler/userlist.txt ~/pangolin/cache/backup/pangolin_pooler/
    sudo dnf download --downloadonly --destdir=~/pangolin/cache/backup/pangolin_pooler/ pangolin-pooler-$PANGOLIN_POOLER_OLD
  • Pangolin Manager:

    (Опционально) Действия по резервному копированию компонента Pangolin Manager

    export PANGOLIN_MANAGER_OLD=x.x.x
    export PANGOLIN_MANAGER_VENV_OLD=x.x.x
    export PGDATA=/pgdata/xx
    mkdir -p ~/pangolin/cache/backup/pangolin_manager
    sudo cp -ra {path_to_service}/pangolin-manager.service ~/pangolin/cache/backup/pangolin_manager/
    sudo cp -ra /etc/pangolin-manager/postgres.yml ~/pangolin/cache/backup/pangolin_manager/
    sudo cp -ra $PGDATA/data/patroni.dynamic.json ~/pangolin/cache/backup/pangolin_manager/
    sudo dnf download --downloadonly --destdir=~/pangolin/cache/backup/pangolin_manager/ pangolin-manager-$PANGOLIN_MANAGER_OLD
    sudo dnf download --downloadonly --destdir=~/pangolin/cache/backup/pangolin_manager/ pangolin-manager-venv-$PANGOLIN_MANAGER_VENV_OLD
  • pangolin-dbms:

    (Обязательно) Действия по резервному копированию основного компонента СУБД

    export PANGOLIN_VER_OLD=x.x.x
    export PGDATA=/pgdata/xx
    export PANGOLIN_DBMS_MAJOR_OLD=x
    mkdir -p ~/pangolin/cache/backup/pangolin_dbms
    sudo cp -ra {path_to_service}/pangolin-dbms.service ~/pangolin/cache/backup/pangolin_dbms/ # для конфигурации без Pangolin Manager
    sudo cp -ra $PGDATA/data/*.conf ~/pangolin/cache/backup/pangolin_dbms/
    sudo dnf download --downloadonly --destdir=~/pangolin/cache/backup/pangolin_dbms/ pangolin-dbms-$PANGOLIN_DBMS_MAJOR_OLD-$PANGOLIN_VER_OLD
    sudo dnf download --downloadonly --destdir=~/pangolin/cache/backup/pangolin_dbms/ pangolin-dbms-$PANGOLIN_DBMS_MAJOR_OLD-client-$PANGOLIN_VER_OLD
  • pangolin-timescaledb:

    (Опционально) Действия по резервному копированию расширения timescaledb

    export PANGOLIN_TIMESCALEDB_OLD=x.x.x
    export PANGOLIN_DBMS_MAJOR_OLD=x
    mkdir -p ~/pangolin/cache/backup/pangolin_timescaledb
    sudo dnf download --downloadonly --destdir=~/pangolin/cache/backup/pangolin_timescaledb/ pangolin-timescaledb-$PANGOLIN_DBMS_MAJOR_OLD-apache-$PANGOLIN_TIMESCALEDB_OLD
  • pangolin-auth-password:

    (Опционально) Действия по резервному копированию компонента pangolin-auth-password

    export PANGOLIN_VER_OLD=x.x.x
    mkdir -p ~/pangolin/cache/backup/pangolin_auth_password
    sudo dnf download --downloadonly --destdir=~/pangolin/cache/backup/pangolin_auth_password/ pangolin-auth-password-$PANGOLIN_VER_OLD
  • pangolin-tuner:

    (Опционально) Действия по резервному копированию компонента Pangolin Tuner

    export PANGOLIN_TUNER_OLD=x.x.x
    mkdir -p ~/pangolin/cache/backup/pangolin_tuner
    sudo dnf download --downloadonly --destdir=~/pangolin/cache/backup/pangolin_tuner/ pangolin-tuner-$PANGOLIN_TUNER_OLD
  • pangolin-diagnostic-tool:

    (Опционально) Действия по резервному копированию компонента pangolin-diagnostic-tool

    export PANGOLIN_VER_OLD=x.x.x
    mkdir -p ~/pangolin/cache/backup/pangolin_diagnostic_tool
    sudo dnf download --downloadonly --destdir=~/pangolin/cache/backup/pangolin_diagnostic_tool/ pangolin-diagnostic-tool-$PANGOLIN_VER_OLD
  • Опциональные компоненты:

    (Опционально) Действия по резервному копированию компонентов libpq

    export PANGOLIN_VER_OLD=x.x.x
    export PANGOLIN_DBMS_MAJOR_OLD=x
    sudo mkdir -p ~/pangolin/cache/backup/pangolin_dbms_libpq ~/pangolin/cache/backup/pangolin_dbms_libpq_dev
    sudo dnf download --downloadonly --destdir=~/pangolin/cache/backup/pangolin_dbms_libpq/ pangolin-dbms-$PANGOLIN_DBMS_MAJOR_OLD-libpq-$PANGOLIN_VER_OLD
    sudo dnf download --downloadonly --destdir=~/pangolin/cache/backup/pangolin_dbms_libpq_dev/ pangolin-dbms-$PANGOLIN_DBMS_MAJOR_OLD-libpq-dev-$PANGOLIN_VER_OLD
  • pangolin-untrusted расширения:

    (Опционально) Действия по резервному копированию Untrusted-расширений

    export PANGOLIN_VER_OLD=x.x.x
    export PANGOLIN_DBMS_MAJOR_OLD=x
    sudo mkdir -p ~/pangolin/cache/backup/pangolin_untrusted
    sudo dnf download --downloadonly --destdir=~/pangolin/cache/backup/pangolin_untrusted/ pangolin-dbms-$PANGOLIN_DBMS_MAJOR_OLD-<ext_name>-$PANGOLIN_VER_OLD

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

  • pangolin-external расширения:

    (Опционально) Действия по резервному копированию сторонних расширений

    export PANGOLIN_DBMS_MAJOR_OLD=x
    export PANGOLIN_POSTGIS_OLD=x.x.x
    export PANGOLIN_PGROUTING_OLD=x.x.x
    export PANGOLIN_PG_BACKGROUND_OLD=x.x
    sudo mkdir -p ~/pangolin/cache/backup/pangolin_external
    sudo dnf download --downloadonly --destdir=~/pangolin/cache/backup/pangolin_external/ {postgis_pkg_name}-$PANGOLIN_POSTGIS_OLD
    sudo dnf download --downloadonly --destdir=~/pangolin/cache/backup/pangolin_external/ {pgrouting_pkg_name}-$PANGOLIN_PGROUTING_OLD
    sudo dnf download --downloadonly --destdir=~/pangolin/cache/backup/pangolin_external/ {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).

Где {path_to_service} – актуальный путь до service-файла компонента. В случае наличия функциональности «Отказ от root» это может быть путь /home/postgres/.config/systemd/user/. В случае отсутствия такой функциональности это может быть /usr/lib/systemd/system/, /lib/systemd/system/ или /etc/systemd/system/.

Шаг 2. Подготовка к обновлению (обязательно)

Подготовьте дистрибутив и проверьте необходимость обновления системных данных каталога. Корректное выполнение этого этапа определяет необходимость последующих действий по обновлению.

Действия по подготовке СУБД

  1. Скачайте дистрибутив в рабочий каталог и распакуйте его. Далее по инструкции путь к компонентам дистрибутива будет формироваться по ~/pangolin:

    mkdir -p ~/pangolin
    tar -xzvf pangolin.tar.gz -C ~/pangolin
  2. Перед началом обновления убедитесь, в необходимости обновления системных данных каталога. Запустите команду из примера ниже на узлах с СУБД:

    Сведения

    Ключи-t и -T, в режиме info, следует использовать с директорией/директориями старой версии. Подробнее о ключах, смотрите в справке к утилите inplace_upgrade

    sudo mkdir -p /opt/pangolin-cache/pg_inplace_upgrade/{backup,log,dump}
    sudo chmod 700 -R /opt/pangolin-cache
    sudo chown postgres:postgres -R /opt/pangolin-cache
    sudo dnf install ~/pangolin/utilities/pangolin-inplace-upgrade-$PANGOLIN_VER-sberlinux9.x86_64.rpm

    sudo -iu postgres
    export PANGOLIN_VER=x.x.x
    export PANGOLIN_VER_OLD=x.x.x
    export PGPASSWORD=<password for db user>
    cd /opt/pangolin-utilities/bin/pg_inplace_upgrade
    ./inplace_upgrade.sh info -n $PANGOLIN_VER_OLD -N $PANGOLIN_VER -s /opt/pangolin-utilities/bin/pg_inplace_upgrade -B /opt/pangolin-cache/pg_inplace_upgrade/backup -d $PGDATA -l /opt/pangolin-cache/pg_inplace_upgrade/log -p $PGPORT -h 127.0.0.1 -u postgres -b postgres -m /opt/pangolin-cache/pg_inplace_upgrade/dump -t $PGHOME/bin -T $PGHOME_CLIENT/bin -P $PGPASSWORD

    В случае, если необходимо произвести обновление системных данных каталога, будет выведено сообщение:

    INFO: Location of update_catalog_version utility: /opt/pangolin-utilities/bin/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: ----------- Checking for the absence of previous launches -----------
    INFO: Checking for the absence of previous launches..... OK
    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-utilities/bin/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-utilities/bin/pg_inplace_upgrade/tmp_check/test_db
    INFO: version: PostgreSQL 18.3 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 8.5.0 20210514 (Platform V SberLinux 9), 64-bit
    INFO: Extract info about users tablespaces.............. OK
    INFO: Free space in folder /opt/pangolin_cache/pg_inplace_upgrade/log/backup: 41217445888
    INFO: Folder /opt/pangolin_cache/pg_inplace_upgrade/log/backup is located in filesystem /dev/mapper/vg_root-lv_root
    INFO: Following databases are about to be upgraded: postgres
    template1
    template0

    <Другие базы данных>

    INFO: The size of backup files for postgres: 9822208 bytes
    INFO: The size of backup files for template1: 9822208 bytes
    INFO: We assume the size of template0 to be equal to template1: 9822208 bytes

    <Оценка бэкапа других баз данных>

    INFO: The backup size of pg_wal files: 16777216 bytes
    INFO: The total estimated size for backup files in all databases: 46243840
    INFO: Free space in folder /opt/pangolin_cache/pg_inplace_upgrade: 41217208320
    INFO: Folder /opt/pangolin_cache/pg_inplace_upgrade is located in filesystem /dev/mapper/vg_root-lv_root
    INFO: Make dump for postgres
    INFO: ----------- Dump check size_postgres -----------
    INFO: Estimated size of the pg_catalog sql-dump of postgres database: 6507317
    INFO: Dump check size_postgres.......................... OK
    INFO: Make dump for template1
    INFO: ----------- Dump check size_template1 -----------
    INFO: Estimated size of the pg_catalog sql-dump of template1 database: 6507317
    INFO: We assume the dump size of template0 to be equal to template1: 6507317 bytes
    INFO: Dump check size_template1......................... OK
    INFO: Make dump for template0
    INFO: ----------- Dump check size_template0 -----------
    INFO: The estimation of dump for template0 is skipped
    INFO: Dump check size_template0......................... OK

    <Оценка дампа других баз данных>

    INFO: The total estimated size required for dump files in all databases: 39043902
    INFO: Directories /opt/pangolin_cache/pg_inplace_upgrade/log/backup and /opt/pangolin_cache/pg_inplace_upgrade are in the same filesystem /dev/mapper/vg_root-lv_root. All backup and dumps size: 85287742
    INFO:
    INFO mode finished with Success. Update required.
    ===================================================

    Если нет необходимости в обновлении системных данных каталога, будет выведено сообщение:

    INFO: Location of update_catalog_version utility: /opt/pangolin-utilities/bin/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-utilities/bin/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-utilities/bin/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-utilities/bin/pg_inplace_upgrade/sql_upgrade_6xx/6.2.0/
    INFO: Version: 6.2.0 CATALOG_VERSION_NO_NEW: 202310091
    INFO: /opt/pangolin-utilities/bin/pg_inplace_upgrade/sql_upgrade_6xx/6.3.0/
    INFO: Version: 6.3.0 CATALOG_VERSION_NO_NEW: 202310091
    INFO: /opt/pangolin-utilities/bin/pg_inplace_upgrade/sql_upgrade_6xx/6.4.0/
    INFO: Version: 6.4.0 CATALOG_VERSION_NO_NEW: 202409231
    ERROR: File /opt/pangolin-utilities/bin/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.
    ===================================================
    Сведения

    Далее по инструкции выполнение«Шаг 20» необходимо только в том случае, если утилита inplace_upgrade.sh вернула сообщение на данном шаге сообщение формата: «INFO mode finished with Success. Update required».

  3. Для конфигурации с Pangolin Manager. С помощью функции edit-config под пользователем postgres произведите добавление временного слота репликации tmp_update_slot в конфигурацию DCS:

    sudo -iu postgres
    export $PGHOME_CLIENT=/usr/pangolin-x.x
    /opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml edit-config
    $PGHOME_CLIENT/psql -c "SELECT * FROM pg_create_physical_replication_slot('tmp_update_slot', 'TRUE');"
    exit

    Пример содержимого с временным слотом репликации:

    ignore_slots:
    - name: tmp_update_slot
    type: physical

Шаг 3. Остановка компонентов СУБД Pangolin (обязательно)

Остановите все компоненты СУБД Pangolin перед обновлением. Этот шаг обязателен для предотвращения повреждения данных и корректного выполнения процесса обновления.

Действия по остановке компонентов СУБД

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

    sudo -iu postgres
    /opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml edit-config --set 'pause=true' --force
    exit
  2. Остановите все компоненты СУБД Pangolin. Перед остановкой необходимо выполнить команду CHECKPOINT на мастере. В случае кластерной конфигурации действия по остановке произведите сначала на мастере, затем на реплике, после на арбитре:

    • на мастере и реплике:

      sudo systemctl stop pangolin-pooler
      sudo systemctl stop pangolin-certs-rotate
      sudo systemctl stop pangolin-auth-reencrypt@postgres
      sudo systemctl stop pangolin-auth-reencrypt@kmadmin_pg
      sudo systemctl stop pangolin-manager
      sudo -iu postgres
      $PGHOME/bin/pg_ctl stop -D $PGDATA
      exit
    • на арбитре:

      sudo systemctl stop pangolin-certs-rotate
      sudo systemctl stop pangolin-auth-reencrypt@postgres
      sudo systemctl stop pangolin-auth-reencrypt@kmadmin_pg
      sudo systemctl stop pangolin-manager
  3. Проверьте, что все компоненты корректно остановлены:

    sudo ps aux | grep -E "pangolin-pooler|pangolin-manager|pangolin-dbms|pangolin-certs-rotate|pangolin-auth-reencrypt|etcd" | grep -v grep

    Если команда в пункте 3 вернула не пустой результат, то выполните следующее:

    sudo kill -9 <pid>
    sudo ps aux | grep -E "pangolin-pooler|pangolin-manager|pangolin-dbms|pangolin-certs-rotate|pangolin-auth-reencrypt|etcd" | grep -v grep

Шаг 4. Обновление компонента pangolin-auth-reencrypt (опционально)

Действия по обновлению компонента pangolin-auth-reencrypt

Произведите обновление пакета компонента:

export PANGOLIN_VER=x.x.x
sudo dnf update -y ~/pangolin/utilities/pangolin-auth-reencrypt-$PANGOLIN_VER-sberlinux9.x86_64.rpm
Внимание!

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

Шаг 5. Обновление компонента pangolin-certs-rotate (опционально)

Действия по обновлению компонента pangolin-certs-rotate

Произведите обновление пакета компонента:

export PANGOLIN_VER=x.x.x
sudo dnf update -y ~/pangolin/utilities/pangolin-certs-rotate-$PANGOLIN_VER-sberlinux9.x86_64.rpm
Внимание!

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

Шаг 6. Обновление компонента безопасности pangolin-security-utilities (опционально)

Действия по обновлению компонента pangolin-security-utilities

  1. Произведите обновление пакета компонента:

    export PANGOLIN_VER=x.x.x
    sudo dnf update -y ~/pangolin/utilities/pangolin-security-utilities-$PANGOLIN_VER-sberlinux9.x86_64.rpm
    Внимание!

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

  2. Произведите проверку файла secret_dump_key.bin на мастере и на реплике:

    sudo ls -la /etc/pangolin-security-utilities/secret_dump_key.bin
    Внимание!

    Выполните следующие шагитолько при отсутствии файла secret_dump_key.bin. При наличии — повторное создание не требуется и дальнейшие действия не выполняются, переходите к шагу 7.

    При отсутствии файла secret_dump_key.bin выполните:

    1. С помощью утилиты pg_dump_generate_secret_file создайте файл для хранения ключа засекречивания:

      sudo /opt/pangolin-security-utilities/bin/pg_dump_generate_secret_file

Шаг 7. Обновление компонента pangolin-diagnostic-tool (опционально)

Действия по обновлению компонента pangolin-diagnostic-tool

Произведите обновление пакета компонента:

export PANGOLIN_VER=x.x.x
sudo dnf update -y ~/pangolin/utilities/pangolin-diagnostic-tool-$PANGOLIN_VER-sberlinux9.x86_64.rpm

Шаг 8. Обновление компонента резервного копирования pangolin-backup-tools (опционально)

Действия по обновлению компонента pangolin-backup-tools

  1. Произведите обновление обязательной зависимости (pangolin-backup-tools-venv) компонента:

    tar -xzf ~/pangolin/3rdparty/3rdparty.tar.gz -C ~/pangolin/3rdparty/
    export PANGOLIN_BACKUP_TOOLS_VENV=x.x.x
    sudo dnf update -y ~/pangolin/3rdparty/pangolin-backup-tools-venv/pangolin-backup-tools-venv-$PANGOLIN_BACKUP_TOOLS_VENV-sberlinux9.x86_64.rpm
  2. Произведите обновление компонента:

    export PANGOLIN_BACKUP_TOOLS=x.x.x
    sudo dnf update -y ~/pangolin/pangolin-backup-tools-$PANGOLIN_BACKUP_TOOLS-sberlinux9.x86_64.rpm
  3. Актуализируйте конфигурационный файл backup-tools-env согласно шаблону ниже:

    # PATH, used for access to required executable files, default value: "${PATH}:{PGHOME}/bin/"
    PATH="${PATH}:$PGHOME/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/07"
    # 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"
    # to checkpoint before backup DB
    PG_FAST_CHECKPOINT=False

    # 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
    export PG_FAST_CHECKPOINT

Шаг 9. Обновление компонента Pangolin Pooler (опционально)

Действия по обновлению компонента Pangolin Pooler

Произведите обновление пакета компонента:

export PANGOLIN_POOLER=x.x.x
sudo dnf update -y ~/pangolin/pangolin-pooler-$PANGOLIN_POOLER-sberlinux9.x86_64.rpm

Шаг 10. Обновление компонента Pangolin Manager (опционально)

Действия по обновлению компонента Pangolin Manager

  1. Произведите обновление обязательной зависимости (pangolin-manager-venv) компонента:

    tar -xzf ~/pangolin/3rdparty/3rdparty.tar.gz -C ~/pangolin/3rdparty/
    export PANGOLIN_MANAGER_VENV=x.x.x
    sudo dnf update -y ~/pangolin/3rdparty/pangolin-manager-venv/pangolin-manager-venv-$PANGOLIN_MANAGER_VENV-sberlinux9.x86_64.rpm
  2. Произведите обновление компонента:

    export PANGOLIN_MANAGER=x.x.x
    sudo dnf update -y ~/pangolin/pangolin-manager-$PANGOLIN_MANAGER-sberlinux9.x86_64.rpm
Внимание!

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

Шаг 11. Обновление компонента серверной части СУБД Pangolin (обязательно)

Действия по обновлению серверной части СУБД

Произведите обновление пакета компонента:

export PANGOLIN_VER=x.x.x
export PANGOLIN_VER_OLD=x.x.x
export PANGOLIN_DBMS_MAJOR=x
sudo dnf remove -y pangolin-dbms-$PANGOLIN_DBMS_MAJOR-$PANGOLIN_VER_OLD
sudo dnf install -y ~/pangolin/pangolin-dbms-$PANGOLIN_DBMS_MAJOR-$PANGOLIN_VER-sberlinux9.x86_64.rpm

Шаг 12. Обновление компонента клиентской части СУБД Pangolin (обязательно)

Действия по обновлению клиентской части СУБД

Произведите обновление пакета компонента:

export PANGOLIN_VER=x.x.x
export PANGOLIN_DBMS_MAJOR=x
sudo dnf update -y ~/pangolin/pangolin-dbms-$PANGOLIN_DBMS_MAJOR-client-$PANGOLIN_VER-sberlinux9.x86_64.rpm

Шаг 13. Обновление пакета расширения pangolin-timescaledb (опционально)

Действия по обновлению расширения timescaledb

Произведите обновление пакета расширения:

export PANGOLIN_TIMESCALEDB=x.x.x
export PANGOLIN_DBMS_MAJOR=x
sudo dnf update -y ~/pangolin/timescaledb/pangolin-timescaledb-$PANGOLIN_DBMS_MAJOR-apache-$PANGOLIN_TIMESCALEDB-sberlinux9-x86_64.rpm

Шаг 14. Обновление компонента pangolin-auth-password (опционально)

Действия по обновлению компонента pangolin-auth-password

Произведите обновление пакета компонента:

export PANGOLIN_VER=x.x.x
sudo dnf update -y ~/pangolin/utilities/pangolin-auth-password-$PANGOLIN_VER-sberlinux9.x86_64.rpm

Шаг 15. Обновление компонента Pangolin Tuner (опционально)

Действия по обновлению компонента Pangolin Tuner

Произведите обновление пакета компонента:

export PANGOLIN_TUNER=x.x.x
sudo dnf update -y ~/pangolin/utilities/pangolin-tuner-$PANGOLIN_TUNER-sberlinux9.x86_64.rpm

Шаг 16. Обновление опциональных пакетов (опционально)

Действия по обновлению пакетов libpq

Произведите обновление опциональных пакетов:

export PANGOLIN_DBMS_MAJOR=x
export PANGOLIN_VER=x.x.x
sudo dnf update -y ~/pangolin/pangolin-dbms-$PANGOLIN_DBMS_MAJOR-libpq-$PANGOLIN_VER-sberlinux9.x86_64.rpm
sudo dnf update -y ~/pangolin/pangolin-dbms-$PANGOLIN_DBMS_MAJOR-libpq-dev-$PANGOLIN_VER-sberlinux9.x86_64.rpm

Шаг 17. Обновление пакетов pangolin-untrusted расширений (опционально)

Внимание!

Выполните данный шаг, если в СУБД используются untrusted-расширения. Список данных расширений и подробную информацию о них можно прочитать в разделе«Информация по Untrusted-расширениям».

Действия по обновлению пакетов Untrusted-расширений

  1. Распакуйте архив, содержащий untrusted-расширения:

    tar -xzf ~/pangolin/untrusted/untrusted.tar.gz -C ~/pangolin/untrusted/
  2. Произведите обновление пакетов расширений:

    export PANGOLIN_DBMS_MAJOR=x
    export PANGOLIN_VER=x.x.x
    sudo dnf install -y ~/pangolin/untrusted/pangolin-dbms-$PANGOLIN_DBMS_MAJOR-<ext_name>-$PANGOLIN_VER-sberlinux9.x86_64.rpm

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

Шаг 18. Обновление пакетов сторонних расширений (опционально)

Внимание!

Выполните данный шаг, если в СУБД используются сторонние расширения. Список данных расширений и подробную информацию о них можно прочитать в разделеpostgis. Поддержка геоданных и pg_background. Запуск команд в фоновом режиме.

Действия по обновлению пакетов сторонних расширений

  1. Произведите обновление пакетов сторонних расширений:

    export PANGOLIN_POSTGIS=x.x.x
    export PANGOLIN_PGROUTING=x.x.x
    export PANGOLIN_PG_BACKGROUND=x.x
    export PANGOLIN_POSTGIS_RELEASE=x.x.x
    export PANGOLIN_PGROUTING_RELEASE=x.x.x
    export PANGOLIN_PG_BACKGROUND_RELEASE=x.x.x
    export PANGOLIN_DBMS_MAJOR=x
    sudo dnf install -y ~/pangolin/3rdparty/postgis/pangolin-postgis-$PANGOLIN_DBMS_MAJOR-$PANGOLIN_POSTGIS-$PANGOLIN_POSTGIS_RELEASE.sberlinux9.x86_64.rpm
    sudo dnf install -y ~/pangolin/3rdparty/pgrouting/pangolin-pgrouting-$PANGOLIN_DBMS_MAJOR-$PANGOLIN_PGROUTING.sberlinux9.x86_64.rpm
    sudo dnf install -y ~/pangolin/3rdparty/pg_background/pangolin-pg-background-$PANGOLIN_DBMS_MAJOR-$PANGOLIN_PG_BACKGROUND.sberlinux9.x86_64.rpm
  2. Актуализируйте путь в конфигурационном файле к динамическим библиотекам для корректной работы сторонних расширений. dynamic_library_path должен содержать обязательное значение /opt/pangolin-extensions/{base_version}/lib в первом приоритете. При необходимости, добавить через знак : исходные значения параметра. Пример:

    • Для конфигурации без Pangolin Manager. Отредактируйте конфигурационный файл postgresql.conf:

      dynamic_library_path = '/opt/pangolin-extensions/{base_version}/lib:$libdir'
    • Для конфигурации c Pangolin Manager. Отредактируйте конфигурационный файл postgres.yml:

      postgresql:
      parameters:
      dynamic_library_path: "/opt/pangolin-extensions/{base_version}/lib:$libdir"

    Где {base_version} – базовая версия продукта (текущая: 8).

  3. Добавьте в конфигурационном файле параметр extension_control_path с путем до .control файлов для корректной работы сторонних расширений. Пример:

    • Для конфигурации без Pangolin Manager. Отредактируйте конфигурационный файл postgresql.conf:

      extension_control_path = '/opt/pangolin-extensions/{base_version}/share'
    • Для конфигурации c Pangolin Manager. Отредактируйте конфигурационный файл postgres.yml:

      postgresql:
      parameters:
      extension_control_path: "/opt/pangolin-extensions/{base_version}/share"

    Где {base_version} – базовая версия продукта (текущая: 8).

Шаг 19. Дополнительные действия (обязательно)

Этот шаг обязателен для корректного выполнения процесса обновления.

Действия по подготовке к запуску утилиты обновления

Актуализируйте версии в файле dynmotd.sh:

export PANGOLIN_MANAGER=x.x.x
export PANGOLIN_MANAGER_OLD=x.x.x
export PANGOLIN_FULL_VER=0x.00x.0x
export PANGOLIN_FULL_VER_OLD=0x.00x.0x

sudo sed -i "s/$PANGOLIN_MANAGER_OLD/$PANGOLIN_MANAGER/g" /usr/local/sbin/dynmotd.sh
sudo sed -i "s/$PANGOLIN_FULL_VER_OLD/$PANGOLIN_FULL_VER/g" /usr/local/sbin/dynmotd.sh
Внимание!

Произведите дополнительно данные действия на узле арбитр.

Шаг 20. Запуск утилиты обновления системных данных каталога СУБД Pangolin (обязательно)

Внимание!

Выполните данный шаг, если утилитаinplace_upgrade.sh вернула сообщение на «Шаге 2»: «INFO mode finished with Success. Update required».

Действия по запуску утилиты обновления системных данных каталога

  1. Заблокируйте трафик на всех узлах СУБД, убедитесь в отсутствии активных внешних подключений, в течение всего процесса обновления.

  2. При помощи текстового редактора добавьте в конец конфигурационного файла $PGDATA/postgresql.conf временные значения на узлах с СУБД под пользователем postgres:

    synchronous_commit = 'off' #tmp_line
    autovacuum = 'off' #tmp_line
    cron.database_name = 'template1' #tmp_line
  3. Произведите запуск обновления системных данных на мастере:

    sudo -iu postgres
    export PANGOLIN_VER=x.x.x
    export PANGOLIN_VER_OLD=x.x.x
    export PGPASSWORD=<password for db user>
    cd /opt/pangolin-utilities/bin/pg_inplace_upgrade
    ./inplace_upgrade.sh update -n $PANGOLIN_VER_OLD -N $PANGOLIN_VER -s /opt/pangolin-utilities/bin/pg_inplace_upgrade -B /opt/pangolin-cache/pg_inplace_upgrade/backup -d $PGDATA -l /opt/pangolin-cache/pg_inplace_upgrade/log -p $PGPORT -h 127.0.0.1 -u postgres -b postgres -m /opt/pangolin-cache/pg_inplace_upgrade/dump -t $PGHOME/bin -T $PGHOME_CLIENT/bin -D -k -P $PGPASSWORD
    exit

    Ожидаемый успешный результат:

    INFO: Update Complete!
    INFO: ----------- Finish upgrade -----------
    INFO: Finish upgrade.................................... OK
    INFO:
    UPDATE mode finished with Success.
    ===================================================
    Внимание!

    В случае, если на мастере обновление прошло неуспешно, произведите восстановление по инструкции «Восстановление после неудачного обновления исполняемых файлов». Все дальнейшие шаги данной инструкции необходимо пропустить.

  4. Произведите запуск обновления системных данных на реплике, если кластерная конфигурация и обновления на основном узле прошло успешно:

    sudo -iu postgres
    export PANGOLIN_VER=x.x.x
    export PANGOLIN_VER_OLD=x.x.x
    export PGPASSWORD=<password for db user>
    cd /opt/pangolin-utilities/bin/pg_inplace_upgrade
    ./inplace_upgrade.sh update -n $PANGOLIN_VER_OLD -N $PANGOLIN_VER -s /opt/pangolin-utilities/bin/pg_inplace_upgrade -B /opt/pangolin-cache/pg_inplace_upgrade/backup -d $PGDATA -l /opt/pangolin-cache/pg_inplace_upgrade/log -p $PGPORT -h 127.0.0.1 -u postgres -b postgres -m /opt/pangolin-cache/pg_inplace_upgrade/dump -t $PGHOME/bin -T $PGHOME_CLIENT/bin -r -D -k -P $PGPASSWORD

    Ожидаемый успешный результат:

    INFO: Location of update_catalog_version utility: /opt/pangolin-utilities/bin/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-utilities/bin/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.
    ===================================================
    Внимание!

    В случае, если на реплике обновление прошло неуспешно, произведите восстановление по инструкции «Восстановление после неудачного обновления исполняемых файлов». Все дальнейшие шаги данной инструкции необходимо пропустить.

Шаг 21. Запуск компонентов СУБД Pangolin (обязательно)

Запустите все компоненты СУБД Pangolin после завершения обновления. Этот шаг обязателен для возобновления работы СУБД и предоставления доступа к данным.

Действия по запуску компонентов СУБД Pangolin

  1. Удалите временные переменные из $PGDATA/postgresql.conf на узлах с СУБД:

    synchronous_commit = 'off' #tmp_line
    autovacuum = 'off' #tmp_line
    cron.database_name = 'template1' #tmp_line
  2. Запустите компоненты СУБД Pangolin:

    • на мастере:

      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 pangolin-manager
      sudo -iu postgres
      $PGHOME/bin/pg_ctl restart -D $PGDATA
      exit
    • на арбитре:

      sudo systemctl restart pangolin-certs-rotate
      sudo systemctl restart pangolin-auth-reencrypt@postgres
      sudo systemctl restart pangolin-auth-reencrypt@kmadmin_pg
      sudo systemctl restart pangolin-manager
  3. Произведите проверку состояния служб:

    • на мастере:

      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
      sudo systemctl status pangolin-manager
      sudo -iu postgres
      $PGHOME/bin/pg_ctl status -D $PGDATA
      exit
    • на арбитре:

      sudo systemctl status pangolin-certs-rotate
      sudo systemctl status pangolin-auth-reencrypt@postgres
      sudo systemctl status pangolin-auth-reencrypt@kmadmin_pg
      sudo systemctl status pangolin-manager
  4. Для конфигурации с Pangolin Manager. Выведите компонент из режима паузы на мастере, дождитесь активного состояния и статуса основного узла (мастера) – Leader:

    sudo -iu postgres
    /opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml edit-config --set 'pause=false' --force
    /opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml list
    exit
  5. Для конфигурации с Pangolin Manager на мастере включите синхронизацию:

    sudo -iu postgres
    /opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml show-config | grep synchronous > save_old_dcs_value.txt
    /opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml edit-config --set 'synchronous_mode=true' --force
    /opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml edit-config --set 'synchronous_mode_strict=true' --force
    exit
  6. Для конфигурации с Pangolin Manager. Произведите запуск компонентов Pangolin на реплике:

    • на реплике:

      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 pangolin-manager
      sudo -iu postgres
      $PGHOME/bin/pg_ctl restart -D $PGDATA
      exit
  7. Для конфигурации с Pangolin Manager. Произведите проверку состояния служб на реплике:

    • на реплике:

      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
      sudo systemctl status pangolin-manager
      sudo -iu postgres
      $PGHOME/bin/pg_ctl status -D $PGDATA
      exit
  8. Для конфигурации с Pangolin Manager. Дождитесь статуса синхронизации на реплике – sync_standby:

    sudo -iu postgres
    /opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml list
    exit
  9. Для конфигурации с Pangolin Manager. Удалите временный физический слот репликации на мастера:

    sudo -iu postgres
    psql -c "SELECT * FROM pg_drop_replication_slot('tmp_update_slot');"
    /opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml edit-config --replace /opt/pangolin-cache/patroni.dynamic.json --force
    exit
  10. С помощью функции edit-config под пользователем postgres произведите ручное восстановление исходных значений конфигурации DCS согласно информации из файла save_old_dcs_value.txt:

    sudo -iu postgres
    /opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml edit-config
    exit

Шаг 22. Обновление расширений (опционально)

Действия по обновлению расширений

  1. Создайте временный файл ext_update.sql под пользователем postgres и поместите его в /opt/pangolin-cache:

    set ON_ERROR_STOP = true;
    DO $$
    DECLARE
    r text;
    dp_schema_name text;
    BEGIN
    SELECT n.nspname
    INTO dp_schema_name
    FROM pg_catalog.pg_extension e
    JOIN pg_catalog.pg_namespace n ON e.extnamespace = n.oid
    WHERE e.extname = 'psql_diagpack';
    IF dp_schema_name IS NOT NULL THEN
    RAISE NOTICE 'Drop extension psql_diagpack';
    EXECUTE format('DROP EXTENSION IF EXISTS %I', 'psql_diagpack');
    END IF;
    FOR r IN (SELECT extname FROM pg_catalog.pg_extension WHERE extname in ('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_variables', 'pg_trgm', 'pg_visibility', 'pgcrypto', 'pgrowlocks', 'pgstattuple', 'plperl', 'plperlu', 'plpgsql', 'pltcl', 'plpython3u', 'plan_cache_limit', 'pg_freeze_recovery', 'ptrack', 'old_snapshot', 'psql_license_info', 'pltclu', 'postgres_fdw', 'refint', 'seg', 'sslinfo', 'tablefunc', 'tcn', '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', 'vector', 'pg_surgery', 'pg_walinspect', 'anon', 'psql_data_lineage', 'psql_bfile', 'plantuner', 'postgis', 'postgis_raster', 'postgis_sfcgal', 'postgis_topology', 'address_standardizer', 'address_standardizer_data_us', 'postgis_tiger_geocoder', 'pg_background', 'pgrouting') 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;
    IF dp_schema_name IS NOT NULL THEN
    RAISE NOTICE 'Restore extension psql_diagpack in schema %', dp_schema_name;
    EXECUTE format('CREATE EXTENSION %I WITH SCHEMA %I', 'psql_diagpack', dp_schema_name);
    END IF;
    END $$;
  2. Создайте временный файл run_update_extentions.sh под пользователем postgres и поместите его в /opt/pangolin-cache/:

    #!/bin/bash
    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
    echo "Run ALTER EXTENSION UPDATE"
    $PG_HOME/bin/psql -d $ud -f /opt/pangolin-cache/ext_update.sql -1
    done
    if [ "$?" -eq 0 ]; then
    echo "All extensions have updated on nodes"
    else
    echo "There were some problems during process updating"
    exit 1
    fi
    timescale_databases=($($PG_HOME/bin/psql -t --csv -c "SELECT datname FROM pg_database WHERE datname NOT LIKE 'template0';"))
    SELECT extname, extversion FROM pg_extension WHERE extname = 'timescaledb'
  3. Запустите sh-скрипт run_update_extentions.sh под пользователем postgres:

    sudo -iu postgres
    chmod 0700 /opt/pangolin-cache/run_update_extentions.sh /opt/pangolin-cache/ext_update.sql
    cd /opt/pangolin-cache/
    export PGPASSWORD=<password for db user>
    PG_HOME=$PGHOME_CLIENT PGHOST=127.0.0.1 ./run_update_extentions.sh
    exit
  4. Зарегистрируйте новую версию расширения timescaledb во всех БД, где оно присутствует. <DB> - заменить на название базы данных:

    sudo -iu postgres
    psql -d <DB> -c "ALTER EXTENSION timescaledb UPDATE;"
    exit

Шаг 23. Обновление каталога безопасности (обязательно)

Обновите каталог безопасности СУБД для применения новых механизмов защиты. Этот шаг обязателен для корректной работы функциональностей безопасности в новой версии СУБД.

Внимание!

В случае кластерной конфигурации произведите действия только на мастере.

Действия по обновлению каталога безопасности

  1. Добавьте временный параметр enable_protection_catalogs_upgrade под пользователем postgres в конец конфигурационного файла с помощью обычного текстового редактора:

    Отредактируйте конфигурационный файл postgresql.conf:

    enable_protection_catalogs_upgrade = True
  2. Произведите reload и restart СУБД Pangolin:

    sudo -iu postgres
    $PGHOME/bin/pg_ctl reload -D $PGDATA
    $PGHOME/bin/pg_ctl restart -D $PGDATA
    exit
  3. Выполните следующую команду в каждой БД поочередно, кроме БД с включенным флагом datallowconn. <DB> - заменить на название базы данных:

    sudo -iu postgres
    psql -c "SELECT NOW()" -d <DB>
    exit
  4. Удалите временный параметр enable_protection_catalogs_upgrade из конфигурационного файла под пользователем postgres, с помощью обычного текстового редактора. И произведите reload и restart СУБД в зависимости от конфигурации:

    sudo -iu postgres
    $PGHOME/bin/pg_ctl reload -D $PGDATA
    $PGHOME/bin/pg_ctl restart -D $PGDATA
    exit

Шаг 24. Завершающие действия (обязательно)

Выполните завершающие действия: удалите временные файлы и параметры, актуализируйте конфигурацию. Этот шаг обязателен для приведения СУБД в рабочее состояние и удаления служебных данных, созданных в процессе обновления.

Завершающие действия по обновлению СУБД

  1. Произведите выключение блокировки трафика и запуск службы crond, если ранее они были выключены.
  2. В случае использования ОС Astra Linux «Смоленск» выполните действия описанные в разделе особенностей работы с данной ОС.