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

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

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

Внимание!

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

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

Внимание!

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

Например, сочетание (мастер, реплика) означает, что действия, указанные в пункте, необходимо выполнить сначала на основном узле, затем на реплике (при этом выполнять действия на арбитре не нужно).

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

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

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

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

Обозначения

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

  • PANGOLIN_VER_OLD – исходная версия СУБД Pangolin (формат - х.х.х);
  • PANGOLIN_VER – новая версия СУБД Pangolin (формат - х.х.х);
  • PANGOLIN_FULL_VER – новая версия СУБД Pangolin (формат - 0х.00х.0х);
  • PANGOLIN_FULL_VER_OLD – исходная версия СУБД Pangolin (формат - 0х.00х.0х);
  • PANGOLIN_DBMS_MAJOR_MINOR_OLD – исходная мажорная и минорная версия СУБД Pangolin (формат - х.х);
  • PANGOLIN_DBMS_MAJOR – новая мажорная версия СУБД Pangolin (формат - х);
  • PANGOLIN_DBMS_MAJOR_OLD – исходная мажорная версия СУБД Pangolin (формат - х);
  • PANGOLIN_TIMESCALEDB_OLD – исходная версия расширения timescaledb (формат - х.х.х);
  • PANGOLIN_TIMESCALEDB – новая версия расширения timescaledb (формат - х.х.х);
  • PANGOLIN_TIMESCALEDB_RELEASE – новая версия релиза пакета расширения timescaledb (формат - х.х.х);
  • PANGOLIN_POOLER_OLD – исходная версия компонента Pangolin Pooler (формат - х.х.х);
  • PANGOLIN_POOLER – новая версия компонента Pangolin Pooler (формат - х.х.х);
  • PANGOLIN_MANAGER_OLD – исходная версия компонента Pangolin Manager (формат - х.х.х);
  • PANGOLIN_MANAGER_VENV_OLD – исходная версия зависимости pangolin-manager-venv (формат - х.х.х);
  • PANGOLIN_MANAGER – новая версия компонента Pangolin Manager (формат - х.х.х);
  • PANGOLIN_MANAGER_VENV – новая версия зависимости pangolin-manager-venv (формат - х.х.х);
  • PANGOLIN_BACKUP_TOOLS_OLD – исходная версия компонента Pangolin Backup Tools (формат - х.х.х);
  • PANGOLIN_BACKUP_TOOLS_VENV_OLD – исходная версия зависимости pangolin-backup-tools-venv (формат - х.х.х);
  • PANGOLIN_BACKUP_TOOLS – новая версия компонента Pangolin Backup Tools (формат - х.х.х);
  • PANGOLIN_BACKUP_TOOLS_VENV – новая версия зависимости pangolin-backup-tools-venv (формат - х.х.х);
  • PANGOLIN_TUNER_OLD – исходная версия компонента Pangolin Tuner (формат - х.х.х);
  • PANGOLIN_TUNER – новая версия компонента Pangolin Tuner (формат - х.х.х);
  • PANGOLIN_POSTGIS – новая версия пакета стороннего расширения postgis (формат - х.х.х);
  • PANGOLIN_POSTGIS_OLD – исходная версия пакета стороннего расширения postgis (формат - х.х.х);
  • PANGOLIN_PGROUTING – новая версия пакета стороннего расширения pgrouting (формат - х.х.х);
  • PANGOLIN_PGROUTING_OLD – исходная версия пакета стороннего расширения pgrouting (формат - х.х.х);
  • PANGOLIN_PG_BACKGROUND – новая версия пакета стороннего расширения pg_background (формат - х.х.х);
  • PANGOLIN_PG_BACKGROUND_OLD – исходная версия пакета стороннего расширения pg_background (формат - х.х.х);
  • PANGOLIN_POSTGIS_RELEASE – новая версия релиза пакета стороннего расширения postgis (формат - х.х.х);
  • PANGOLIN_PGROUTING_RELEASE – новая версия релиза пакета стороннего расширения pgrouting (формат - х.х.х);
  • PANGOLIN_PG_BACKGROUND_RELEASE – новая версия релиза пакета стороннего расширения pg_background (формат - х.х.х);
  • PGPASSWORD - пароль от пользователя БД (по умолчанию пользователь postgres);
  • PGDATA – исходный путь до данных СУБД Pangolin (формат - /pgdata/xx);
  • PGDATA_NEW – новый путь до данных СУБД Pangolin (формат - /pgdata/xx);
  • PGHOME – исходный путь до серверной части СУБД Pangolin (формат - /usr/pangolin);
  • PGHOME_NEW – новый путь до серверной части СУБД Pangolin (формат - /opt/pangolin-dbms-server);
  • PGHOME_CLIENT – исходный путь до клиентской части СУБД Pangolin (формат - /usr/pangolin-dbms-client);
  • PGHOME_CLIENT_NEW – новый путь до клиентской части СУБД Pangolin (формат - /opt/pangolin-dbms-client);
  • PGBACKUP – исходный путь для резервного копирования СУБД Pangolin (формат - /pgarclogs/xx);
  • PGBACKUP_NEW – новый путь для резервного копирования СУБД Pangolin (формат - /pgarclogs/xx);
  • PGPORT - порт СУБД Pangolin (по умолчанию 5433);
  • CLUSTERNAME - наименование кластера (по умолчанию clustername).

Предусловие

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

Сведения

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

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

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

Сведения

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

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

Список ограничений перед проведением обновления с переносом данных СУБД Pangolin

Сведения

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

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

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

  2. Убедитесь, что у существующих пользователей и администраторов БД есть необходимые полномочия на создание объектов и назначения прав в полном объеме.

  3. Ознакомьтесь с особенностями обновления, связанные с переходом на ядро PostgreSQL 17.5.

  4. Проверьте наличие расширений, установленных в схему public или в системный каталог (рекомендуется: перенести в схему ext).

  5. В случае кластерной конфигурации, обновите строку подключения к СУБД (проверьте значение портов) и убедитесь, что в строке указаны оба узла кластера (active и standby), так как в процессе обновления утилита confd будет автоматически удалена. Пример исправления неактуальной строки для подключения:

    Строку:

    jdbc:postgresql://127.0.0.1:6544,127.0.0.2:6544/dbname?prepareThreshold=0`

    Исправьте на:

    jdbc:postgresql://127.0.0.1:6544,127.0.0.2:6544/dbname?targetServerType=master&prepareThreshold=0
  6. В случае использования расширения 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. Резервное копирование (обязательно)

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

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

  1. (master, replica, arbiter) Сохраните рабочие файлы компонентов СУБД 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
      export PANGOLIN_DBMS_MINOR_OLD=x
      mkdir -p ~/pangolin/cache/backup/pangolin_dbms
      sudo cp -ra {path_to_service}/postgresql.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_DBMS_MINOR_OLD-$PANGOLIN_VER_OLD
      sudo dnf download --downloadonly --destdir=~/pangolin/cache/backup/pangolin_dbms/ pangolin-dbms-$PANGOLIN_DBMS_MAJOR_OLD.$PANGOLIN_DBMS_MINOR_OLD-client-$PANGOLIN_VER_OLD
    • pangolin-timescaledb:

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

      export PANGOLIN_TIMESCALEDB_OLD=x.x.x
      export PANGOLIN_DBMS_MAJOR_OLD=x
      export PANGOLIN_DBMS_MINOR_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.$PANGOLIN_DBMS_MINOR_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
      export PANGOLIN_DBMS_MINOR_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.$PANGOLIN_DBMS_MINOR_OLD-libpq-$PANGOLIN_VER_OLD
      sudo dnf download --downloadonly --destdir=~/pangolin/cache/backup/pangolin_dbms_libpq_dev/ pangolin-dbms-$PANGOLIN_DBMS_MAJOR_OLD.$PANGOLIN_DBMS_MINOR_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. (мастер) Добавьте запись host репликаtion postgres 127.0.0.1/32 scram-sha-256 первой строкой в файл $PGDATA/data/pg_hba.conf или в файл /etc/pangolin-manager/postgres.yml в секцию pg_hba для конфигурации с Pangolin Manager для корректного выполнения резервной копии БД.

  3. (мастер) Перечитайте обновленный конфигурационный файл БД.

    sudo -iu - postgres
    export PGDATA=/pgdata/xx
    export PGHOME=/usr/pangolin
    $PGHOME/bin/pg_ctl reload -D $PGDATA/data
    exit
  4. (master) Создайте каталог для резервной копии:

    sudo mkdir -p /pgarclogs/cache/backup/pangolin_dbms
    sudo chmod -R 0700 /pgarclogs/cache/backup/pangolin_dbms
    sudo chown -R postgres:postgres /pgarclogs/
  5. (мастер) Выполните резервное копирование:

    sudo -iu postgres
    export PGPASSWORD=<password_postgres>
    export PGPORT=<порт СУБД>
    export PGDATA=/pgdata/xx
    export CLUSTERNAME=clustername
    /opt/pangolin-backup-tools/bin/pg_probackup init -B /pgarclogs/cache/backup/pangolin_dbms
    /opt/pangolin-backup-tools/bin/pg_probackup add-instance -B /pgarclogs/cache/backup/pangolin_dbms -D $PGDATA/data --instance $CLUSTERNAME
    /opt/pangolin-backup-tools/bin/pg_probackup backup -B /pgarclogs/cache/backup/pangolin_dbms --instance $CLUSTERNAME -b FULL -h 127.0.0.1 -p $PGPORT -U postgres --compress-algorithm=zlib --compress-level=4 -j 14 --temp-slot --stream --progress -w
    exit
  6. (мастер) Удалите строку host replication postgres 127.0.0.1/32 scram-sha-256 из файла $PGDATA/data/pg_hba.conf для конфигурации без Pangolin Manager или из файла /etc/pangolin-manager/postgres.yml для конфигурации с Pangolin Manager.

  7. (мастер) Перечитайте обновленный конфигурационный файл БД.

    sudo -iu - postgres
    export PGDATA=/pgdata/xx
    export PGHOME=/usr/pangolin
    $PGHOME/bin/pg_ctl reload -D $PGDATA/data
    exit

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

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

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

  1. (мастер) Сохраните исходные значения стенда для последующей инициализации новой БД:

    sudo -iu postgres
    export PGPASSWORD=<password_postgres>
    psql -c "SHOW SERVER_ENCODING;" > current_value.txt
    psql -c "SHOW LC_COLLATE;" >> current_value.txt
    psql -c "SHOW LC_CTYPE;" >> current_value.txt
    psql -c "SHOW LC_MESSAGES;" >> current_value.txt
    psql -c "SHOW LC_MONETARY;" >> current_value.txt
    psql -c "SHOW LC_NUMERIC;" >> current_value.txt
    psql -c "SHOW LC_TIME;" >> current_value.txt
    psql -c "SELECT oid, pg_tablespace_location(oid) FROM pg_tablespace WHERE spcname not in ('pg_default', 'pg_global');" >> current_value.txt
    exit
  2. (master, replica) Сформируйте конфигурационные файлы для работы с новой версией:

    export PGDATA=/pgdata/xx
    mkdir -p ~/pangolin/cache/merge
    sudo cp $PGDATA/data/postgresql.conf ~/pangolin/cache/merge/postgresql.conf
    sudo cp $PGDATA/data/postgresql.base.conf ~/pangolin/cache/merge/postgresql.base.conf
    sudo cp $PGDATA/data/pg_hba.conf ~/pangolin/cache/merge/pg_hba.conf

    Пример редактируемых параметров:

    archive_command = '/opt/pangolin-backup-tools/bin/pg_probackup archive-push -B $PGBACKUP_NEW --instance $CLUSTERNAME --wal-file-path=%p --wal-file-name=%f --compress --overwrite -j 4 --batch-size=100'
    pg_plugins_path = '$PGHOME_NEW/lib'
    hba_file = '$PGDATA_NEW/data/pg_hba.conf'
    ident_file = '$PGDATA_NEW/data/pg_ident.conf'
  3. (мастер, реплика, арбитр) Скачайте дистрибутив в рабочий каталог и распакуйте его. Далее по инструкции путь к компонентам дистрибутива будет формироваться по ~/pangolin:

    mkdir -p ~/pangolin
    tar -xzvf pangolin.tar.gz -C ~/pangolin

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

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

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

Внимание!

Перед остановкой необходимо выполнить командуCHECKPOINT на мастере.

  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. В случае кластерной конфигурации действия по остановке произведите сначала на мастере, затем на реплике, после на арбитре:

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

      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
      export PGHOME=/usr/pangolin
      export PGDATA=/pgdata/xx
      $PGHOME/bin/pg_ctl stop -D $PGDATA/data
      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

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

    export PANGOLIN_VER=x.x.x
    sudo dnf install -y ~/pangolin/utilities/pangolin-auth-reencrypt-$PANGOLIN_VER-sberlinux9.x86_64.rpm
  2. (мастер, реплика) С помощью текстового редактора произведите замену старых значений $PGDATA, $PGHOME, $PGHOME_CLIENT на новые $PGDATA_NEW, $PGHOME_NEW, $PGHOME_CLIENT_NEW в service-файле компонента {path_to_service}.

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

Внимание!

В случае конфигурации с 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-diagnostic-tool

  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. (мастер, реплика) Актуализируйте конфигурационный файл /etc/pangolin-backup-tools/backup-tools-env согласно шаблону ниже:

    # PATH, used for access to required executable files, default value: "${PATH}:{PGHOME}/bin/"
    PATH="${PATH}:$PGHOME_NEW/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="$PGBACKUP_NEW"
    # 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
  3. (мастер, реплика) С помощью текстового редактора произведите замену старых значений $PGDATA, $PGHOME, $PGHOME_CLIENT на новые $PGDATA_NEW, $PGHOME_NEW, $PGHOME_CLIENT_NEW в service-файле компонента {path_to_service}.

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

  4. (мастер, реплика) Перенаправьте вспомогательную символьную ссылку для корректной работы компонента:

    export PANGOLIN_DBMS_MAJOR=x
    export PGHOME_NEW=/opt/pangolin-dbms-server-$PANGOLIN_DBMS_MAJOR
    sudo ln -sfvn $PGHOME_NEW /opt/pangolin-dbms
Внимание!

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

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

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

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

    export PANGOLIN_VER=x.x.x
    export PANGOLIN_DBMS_MAJOR=x
    sudo dnf install -y ~/pangolin/pangolin-dbms-$PANGOLIN_DBMS_MAJOR-$PANGOLIN_VER-sberlinux9.x86_64.rpm
  2. (мастер, реплика) С помощью текстового редактора произведите замену старых значений $PGDATA, $PGHOME, $PGHOME_CLIENT на новые $PGDATA_NEW, $PGHOME_NEW, $PGHOME_CLIENT_NEW в service-файле компонента {path_to_service}.

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

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

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

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

export PANGOLIN_VER=x.x.x
export PANGOLIN_DBMS_MAJOR=x
sudo dnf install -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_TIMESCALEDB_RELEASE=x.x.x
export PANGOLIN_DBMS_MAJOR=x
sudo dnf install -y ~/pangolin/timescaledb/pangolin-timescaledb-$PANGOLIN_DBMS_MAJOR-apache-$PANGOLIN_TIMESCALEDB-$PANGOLIN_TIMESCALEDB_RELEASE.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 install -y ~/pangolin/pangolin-dbms-$PANGOLIN_DBMS_MAJOR-libpq-$PANGOLIN_VER-sberlinux9.x86_64.rpm
sudo dnf install -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. Подготовка к миграции данных (обязательно)

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

Действия по подготовке к миграции данных СУБД

  1. (мастер, реплика, арбитр) Создайте директории и рабочие поддиректории $PGDATA_NEW/data, $PGBACKUP_NEW, а также каталоги для работы утилиты pg_upgrade:

    export PGDATA_NEW=/pgdata/xx
    export PGBACKUP_NEW=/pgarclogs/xx
    sudo mkdir -p $PGDATA_NEW/{data,raft_data,raft_dump,raft} $PGBACKUP_NEW /pgarclogs/pg_upgrade /var/run/postgresql/pg_upgrade
    sudo chown -R postgres:postgres $PGDATA_NEW $PGBACKUP_NEW /pgarclogs/pg_upgrade /var/run/postgresql
    sudo chmod -R 0700 $PGDATA_NEW $PGBACKUP_NEW /pgarclogs/pg_upgrade /var/run/postgresql
  2. (master) Инициализируйте новый кластер СУБД Pangolin:

    export PANGOLIN_VER=x.x.x
    sudo tar -xz -f ~/pangolin/3rdparty/3rdparty.tar.gz -C ~/pangolin/3rdparty/
    sudo dnf update -y ~/pangolin/3rdparty/pangolin-ansible-venv-controlled-$PANGOLIN_VER-sberlinux9.x86_64.rpm
    sudo /opt/pangolin-ansible-venv-controlled/bin/python3 ~/pangolin/installer/utilities/psql_get_password_hash -t scram-sha-256 -P '<password_postgres>' > ~/pangolin/cache/.tmp_file
    sudo cp -r ~/pangolin/cache/.tmp_file /home/postgres/
    sudo chown postgres:postgres /home/postgres/.tmp_file
    sudo -iu postgres
    export PGDATA_NEW=/pgdata/xx
    export PGHOME_NEW=/opt/pangolin-dbms-server
    $PGHOME_NEW/bin/initdb -D $PGDATA_NEW/data -k -A scram-sha-256 --pwfile ~/.tmp_file -E UTF8 --update-authid --lc-collate <данные из файла current_value.txt> --lc-ctype <данные из файла current_value.txt> --lc-messages <данные из файла current_value.txt> --lc-monetary <данные из файла current_value.txt> --lc-numeric <данные из файла current_value.txt> --lc-time <данные из файла current_value.txt>
    exit

    Пример заполненной команды initdb:

    /opt/pangolin-dbms-server/bin/initdb -D /pgdata/07/data -k -A scram-sha-256 --pwfile ~/.tmp_file -E UTF8 --update-authid --lc-collate en_US.utf-8 --lc-ctype en_US.utf-8 --lc-messages en_US.utf8 --lc-monetary en_US.utf8 --lc-numeric en_US.utf8 --lc-time en_US.utf8
  3. (master) Переместите предварительно подготовленные конфигурационные файлы каталога в рабочую директорию:

    export PGDATA_NEW=/pgdata/xx
    sudo cp -rf ~/pangolin/cache/merge/postgresql.conf $PGDATA_NEW/data/postgresql.conf
    sudo cp -rf ~/pangolin/cache/merge/postgresql.base.conf $PGDATA_NEW/data/postgresql.base.conf
    sudo cp ~/pangolin/cache/merge/pg_hba.conf $PGDATA_NEW/data/pg_hba.conf
    sudo chown postgres:postgres $PGDATA_NEW/data
    sudo chmod 0700 $PGDATA_NEW/data/*.conf
    Дополнительные действия в случае кластерной конфигурации

    (master, replica) Дополнительно для конфигурации с Pangolin Manager:

    export PGDATA_NEW=/pgdata/xx
    sudo cp -rf ~/pangolin/cache/merge/postgres.yml /etc/pangolin-manager/postgres.yml
    sudo cp -rf ~/pangolin/cache/merge/patroni.dynamic.json $PGDATA_NEW/data/patroni.dynamic.json # выполнить действие только на узле мастер
    sudo chown postgres:postgres /etc/pangolin-manager/postgres.yml $PGDATA_NEW/data/patroni.dynamic.json
    sudo chmod 0600 /etc/pangolin-manager/postgres.yml $PGDATA_NEW/data/patroni.dynamic.json
  4. (master) Внесите следующие корректировки в конфигурационные файлы СУБД для миграции с комментарием tmp_line:

    export PGDATA=/pgdata/xx
    export PGDATA_NEW=/pgdata/xx
    sudo sed -i '1ilocal all postgres scram-sha-256 #tmp_line' $PGDATA/data/pg_hba.conf
    sudo sed -i '1ilocal all postgres scram-sha-256 #tmp_line' $PGDATA_NEW/data/pg_hba.conf
    sudo sed -i -e "\$aautovacuum = 'off' #tmp_line" $PGDATA/data/postgresql.conf
    sudo sed -i -e "\$asynchronous_commit = 'off' #tmp_line" $PGDATA/data/postgresql.conf
    sudo sed -i -e "\$acron.database_name = 'template1' #tmp_line" $PGDATA/data/postgresql.conf
    sudo sed -i -e "\$aautovacuum = 'off' #tmp_line" $PGDATA_NEW/data/postgresql.conf
    sudo sed -i -e "\$asynchronous_commit = 'off' #tmp_line" $PGDATA_NEW/data/postgresql.conf
    sudo sed -i -e "\$acron.database_name = 'template1' #tmp_line" $PGDATA_NEW/data/postgresql.conf

Шаг 19. Миграция данных с помощью утилиты pg_upgrade (обязательно)

Выполните миграцию данных из старой версии СУБД в новую с помощью утилиты pg_upgrade.

Действия по миграции данных СУБД

(мастер) Запустите миграцию данных с помощью pg_upgrade:

sudo -iu postgres
export PANGOLIN_OLD_VER=x.x
export PGPORT=<порт СУБД>
export PGHOST=127.0.0.1
export PGHOME=/usr/pangolin
export PGHOME_NEW=/opt/pangolin-dbms-server
export PGHOME_CLIENT=/usr/pangolin-dbms-client
export PGHOME_CLIENT_NEW=/opt/pangolin-dbms-client
export PGPASSWORD=<password_postgres>
export PGDATA=/pgdata/xx
export PGDATA_NEW=/pgdata/xx
$PGHOME_NEW/bin/pg_upgrade -b $PGHOME/bin -B $PGHOME_NEW/bin --old-bindirclient $PGHOME_CLIENT/bin --new-bindirclient $PGHOME_CLIENT_NEW/bin -d $PGDATA/data -D $PGDATA_NEW/data -p $PGPORT -P 5433 -j 2 --socketdir=/var/run/postgresql/pg_upgrade -l /pgarclogs/pg_upgrade --link -r
exit
Внимание!

При предустановленном в СУБД расширенииtimescaledb, в строку запуска утилиты pg_upgrade, требуется добавить дополнительный флаг -c timescaledb.restoring='on'.

Ошибка обновления расширения

Если в процессе обновления возникают ошибки связанные с загрузкой расширений, например:

could not load library "$libdir/pg_stat_kcache": ERROR:  This module can only be loaded via shared_preload_libraries

Или

2025-07-21 16:28:15.673 MSK [804508] FATAL:  unrecognized configuration parameter "pg_stat_statements.max"
2025-07-21 16:28:15.673 MSK [804508] HINT: make sure pg_stat_statements is loaded, and make sure pg_stat_kcache is present after pg_stat_statements in the shared_preload_libraries setting

Попробуйте добавить их в параметр shared_preload_libraries, который находится в $PGDATA_NEW/data/postgresql.conf, в правильном порядке, как в примере ниже:

export PGDATA_NEW=/pgdata/xx
sudo sed -i "s/#shared_preload_libraries = ''/shared_preload_libraries = 'pg_stat_statements,pg_stat_kcache'/g" $PGDATA_NEW/data/postgresql.conf

Шаг 20. Актуализация путей до табличных пространств (обязательно)

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

Действия по актуализации

(мастер) Актуализируйте пути табличных пространств (ТП):

export PGDATA=/pgdata/xx
export PGDATA_NEW=/pgdata/xx
sudo rm -rf $PGDATA/tablespaces/<название ТП>/PG_15_XXXXXXXXX
sudo cp -ra $PGDATA/tablespaces $PGDATA_NEW/tablespaces

sudo -iu postgres
export PGDATA_NEW=/pgdata/xx
ln -sfn <path> $PGDATA_NEW/data/pg_tblspc/<oid>
exit

Где, значения для <path> и <oid> необходимо заменить на значения oid и pg_tablespace_location из файла /home/postgres/current_value.txt соответственно. В параметре <path> перед выполнением команды заменить значение $PGDATA на значение $PGDATA_NEW.

Пример команды:

sudo  -iu postgres
ln -sfn /pgdata/07/tablespaces/Tbl_t /pgdata/07/data/pg_tblspc/16739
exit

Шаг 21. Перенос данных с помощью rsync на реплику (опционально)

Внимание!

Выполните данный шаг, если используется конфигурация с Pangolin Manager, иначе данный шаг пропустите и переходите кшагу 22.

Действия по переносу данных на реплику

  1. (реплика) Сгенерируйте ключ доступа для переноса данных с мастера на реплику:

    sudo -iu postgres
    mkdir -p /pgarclogs/cache/rsync
    ssh-keygen
    exit
    Generating public/private rsa key pair.
    # Введите имя файла, в котором будет сохранен ключ: /pgarclogs/cache/rsync/ssh_key_rsync
    Enter file in which to save the key (/home/postgres/.ssh/id_rsa): /pgarclogs/cache/rsync/ssh_key_rsync
    # Введите ключевую фразу (опционально):
    Enter passphrase (empty for no passphrase): <passphrase or enter>
    # Введите ту же ключевую фразу еще раз (опционально):
    Enter same passphrase again: <passphrase or enter>

    Your identification has been saved in /pgarclogs/cache/rsync/ssh_key_rsync.
    Your public key has been saved in /pgarclogs/cache/rsync/ssh_key_rsync.pub.
    The key fingerprint is:
    SHA256:5VV.........
    The key's randomart image is:
    +---[RSA 3072]----+
    | ==+|
    | .BBo+|
    | .o.=*=+|
    | o..+ +++|
    | S .o = =o|
    | + o *.+|
    | o =. .* |
    | ..oo.+. E|
    | .oo o... |
    +----[SHA256]-----+

    Копирование ssh-ключа с реплики на мастер:

    sudo -iu postgres
    mkdir ~/.ssh && chmod 700 ~/.ssh
    ssh-copy-id -i /pgarclogs/cache/rsync/ssh_key_rsync postgres@<ip-address_мастер>
    exit
  2. (реплика) Запустите rsync для переноса данных /pgdata:

    sudo -iu postgres
    export PGDATA_NEW=/pgdata/xx
    sshpass -d4 /bin/rsync --delay-updates -F --checksum --archive --rsync-path=rsync --hard-links --progress --size-only --no-inc-recursive --delete --rsh='ssh -S none -i /pgarclogs/cache/rsync/ssh_key_rsync -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null' --out-format='<<CHANGED>>%i %n%L' postgres@<ip-address_мастер>:$PGDATA_NEW /pgdata
    exit
  3. (реплика) Если есть табличные пространства, находящиеся в не /pgdata, их необходимо аналогично перенести:

    sshpass -d4 /bin/rsync --delay-updates -F --checksum --archive --rsync-path=rsync --hard-links --size-only --stats --dry-run --delete --no-inc-recursive --rsh='ssh -S none -i /pgarclogs/cache/rsync/ssh_key_rsync -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null' --out-format='<<CHANGED>>%i %n%L' <ip-address_мастер>:/pgdata/xx/tablespaces/tsin /pgdata/xx/tablespaces

Шаг 22. Индексирование и очистка устаревших записей (обязательно)

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

Действия по очистке

  1. (мастер) Запустите экземпляр СУБД на мастере:

    sudo -iu postgres
    export PGHOME_NEW=/opt/pangolin-dbms-server
    export PGDATA_NEW=/pgdata/xx
    $PGHOME_NEW/bin/pg_ctl start -D $PGDATA_NEW/data
    exit
  2. (мастер) Проиндексируйте данные в БД:

    sudo -iu postgres
    export PGPASSWORD=<password_postgres>
    export PGHOME_CLIENT_NEW=/opt/pangolin-dbms-client
    export PGHOST=127.0.0.1
    export PGDATA=$PGDATA_NEW
    $PGHOME_CLIENT_NEW/bin/reindexdb -j 2 --all
    $PGHOME_CLIENT_NEW/bin/vacuumdb -j 2 --analyze-in-stages --all
    exit

    В случае наличия файла /pgarclogs/pg_upgrade/reindex_gin.sql выполните следующую команду:

    sudo -iu postgres
    export PGPASSWORD=<password_postgres>
    export PGHOME_NEW=/opt/pangolin-dbms-server
    $PGHOME_NEW/bin/psql < /pgarclogs/pg_upgrade/reindex_gin.sql
    exit
  3. (мастер) Остановите экземпляр СУБД на мастере:

    sudo -iu postgres
    export PGHOME_NEW=/opt/pangolin-dbms-server
    export PGDATA_NEW=/pgdata/xx
    $PGHOME_NEW/bin/pg_ctl stop -D $PGDATA_NEW/data
    exit

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

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

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

  1. (мастер, реплика, арбитр) Запустите компоненты СУБД Pangolin:

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

      sudo systemctl daemon-reload
      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 systemctl daemon-reload
      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
  2. (мастер, реплика, арбитр) Произведите проверку состояния служб:

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

      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 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
  3. (мастер, реплика, арбитр) Запустите сторонние сервисы:

    sudo systemctl restart crond

Шаг 24. Очистка кластера Pangolin Manager (опционально)

Внимание!

Выполните данный шаг, если используется конфигурация с Pangolin Manager, иначе данный шаг пропустите и переходите кшагу 25.

Действия по очистке кластера

  1. (мастер) Произведите очистку кластера:

    sudo -iu postgres
    export CLUSTERNAME=clustername
    /opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml remove $CLUSTERNAME
    exit
  2. (мастер) Произведите restart компонента Pangolin Manager:

    sudo -iu postgres
    systemctl --user restart pangolin-manager
    exit
  3. (мастер) Выведите Pangolin Manager из режима паузы:

    sudo -iu postgres
    export CLUSTERNAME=clustername
    /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 restart $CLUSTERNAME
    exit
  4. (реплика) Произведите restart компонента Pangolin Manager на реплике:

    sudo -iu postgres
    systemctl --user restart pangolin-manager
    exit

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

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

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

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

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

    enable_protection_catalogs_upgrade = True
  2. (мастер) Произведите reload и restart СУБД в зависимости от конфигурации:

    sudo -iu postgres
    export PGDATA_NEW=/pgdata/xx
    export PGHOME_NEW=/opt/pangolin-dbms-server
    $PGHOME_NEW/pg_ctl reload -D $PGDATA_NEW/data
    $PGHOME_NEW/pg_ctl restart -D $PGDATA_NEW/data
    exit
  3. (master) Выполните следующую команду в каждой БД поочередно, кроме БД с включенным флагом datallowconn. <DB> - заменить на название базы данных:

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

  5. (мастер) Произведите reload и restart СУБД в зависимости от конфигурации:

    sudo -iu postgres
    export PGDATA_NEW=/pgdata/xx
    export PGHOME_NEW=/opt/pangolin-dbms-server
    $PGHOME_NEW/pg_ctl reload -D $PGDATA_NEW/data
    $PGHOME_NEW/pg_ctl restart -D $PGDATA_NEW/data
    exit

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

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

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

  1. (мастер, реплика) Удалите временные параметры из рабочих конфигурационных файлов:

    export PGDATA_NEW=/pgdata/xx
    sudo sed -i '/local all postgres scram-sha-256 #tmp_line/d' $PGDATA_NEW/data/pg_hba.conf
    sudo sed -i "/autovacuum = 'off' #tmp_line/d" $PGDATA_NEW/data/postgresql.conf
    sudo sed -i "/synchronous_commit = 'off' #tmp_line/d" $PGDATA_NEW/data/postgresql.conf
    sudo sed -i "/cron.database_name = 'template1' #tmp_line/d" $PGDATA_NEW/data/postgresql.conf
  2. (мастер, реплика) Удалите неактуальные рабочие файлы исходной БД:

    export PGDATA_NEW=/pgdata/xx
    export PANGOLIN_DBMS_MAJOR_MINOR_OLD=x.x
    export PGDATA=/pgdata/xx
    export PGBACKUP=/pgarclogs/xx
    sudo dnf remove -y pangolin-dbms-$PANGOLIN_DBMS_MAJOR_MINOR_OLD pangolin-dbms-$PANGOLIN_DBMS_MAJOR_MINOR_OLD-client
    sudo ln -sfvn $PGDATA_NEW /pgdata/data
    sudo rm -rf $PGDATA $PGBACKUP
  3. (мастер, реплика, арбитр) Актуализируйте 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
  4. (мастер, реплика, арбитр) Актуализируйте ~/.bash_profile для пользователя postgres:

    export PGHOME="\/usr\/pangolin-x.x"
    export PGHOME_NEW="\/opt\/pangolin-dbms-server-x"
    export PGHOME_CLIENT="\/usr\/pangolin-dbms-client-x"
    export PGHOME_CLIENT_NEW="\/opt\/pangolin-dbms-client-x"
    export PGDATA="\/pgdata\/xx"
    export PGDATA_NEW="\/pgdata\/xx"
    sudo sed -i "s/$PGHOME/$PGHOME_NEW/g" /home/postgres/.bash_profile
    sudo sed -i "s/$PGHOME_CLIENT/$PGHOME_CLIENT_NEW/g" /home/postgres/.bash_profile
    sudo sed -i "s/$PGDATA/$PGDATA_NEW/g" /home/postgres/.bash_profile
  5. В случае использования ОС Astra Linux «Смоленск» выполните действия описанные в разделе особенностей работы с данной ОС.