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

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

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

Внимание!

Перед началом обновления необходимо знать особенности, в связи с изменением формата WAL-файлов:

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

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

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

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

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

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

Обозначения

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

  • PANGOLIN_VER – новая версия СУБД Pangolin (формат - х.х.х);
  • PANGOLIN_DBMS_MAJOR – новая мажорная версия СУБД Pangolin (формат - х);
  • PANGOLIN_DBMS_MAJOR_OLD – исходная мажорная версия СУБД Pangolin (формат - х);
  • PANGOLIN_BACKUP_TOOLS – новая версия компонента Pangolin Backup Tools (формат - х.х.х);
  • PANGOLIN_BACKUP_TOOLS_VENV – новая версия зависимости pangolin-backup-tools-venv (формат - х.х.х);
  • PANGOLIN_BACKUP_TOOLS_OLD – исходная версия компонента Pangolin Backup Tools (формат - х.х.х);
  • PANGOLIN_BACKUP_TOOLS_VENV_OLD – исходная версия зависимости pangolin-backup-tools-venv (формат - х.х.х);
  • PANGOLIN_POOLER – новая версия компонента Pangolin Pooler (формат - х.х.х);
  • PANGOLIN_MANAGER – новая версия компонента Pangolin Manager (формат - х.х.х);
  • PANGOLIN_TUNER – новая версия компонента Pangolin Tuner (формат - х.х.х);
  • PANGOLIN_TUNER_OLD – исходная версия утилиты Pangolin Tuner (формат - х.х.х);
  • PANGOLIN_PGHOME_VER – новая версия в пути к бинарным файлам СУБД Pangolin (формат - х.х);
  • PANGOLIN_PGHOME_OLD_VER – исходная версия в пути к бинарным файлам СУБД Pangolin (формат - х.х);
  • PANGOLIN_OLD_VER – исходная версия СУБД Pangolin (формат - х.х.х);
  • PANGOLIN_FULL_VER – новая версия СУБД Pangolin (формат - 0х.00х.0х);
  • PANGOLIN_FULL_OLD_VER – исходная версия СУБД Pangolin (формат - 0х.00х.0х);
  • PGPASSWORD - пароль от пользователя БД (по умолчанию пользователь postgres).

Предусловие

Сведения

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

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

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

Сведения

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

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

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

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

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

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

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

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

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

    Сведения

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

    export PANGOLIN_VER=x.x.x
    sudo dnf install -y pangolin-inplace-upgrade-$PANGOLIN_VER-sberlinux9.x86_64.rpm

    sudo -iu postgres
    export PANGOLIN_VER=x.x.x
    export PANGOLIN_OLD_VER=x.x.x
    export PGPASSWORD=<password for db user>

    mkdir -p /home/postgres/pg_inplace_upgrade/{log,backup,dump}
    cd /opt/pangolin-utilities/bin/pg_inplace_upgrade

    ./inplace_upgrade.sh info \
    -n $PANGOLIN_OLD_VER -N $PANGOLIN_VER \
    -s /opt/pangolin-utilities/bin/pg_inplace_upgrade \
    -B /home/postgres/pg_inplace_upgrade/backup \
    -d /pgdata/07/data \
    -l /home/postgres/pg_inplace_upgrade/log \
    -p 5433 -h 127.0.0.1 \
    -u postgres -b postgres \
    -m /home/postgres/pg_inplace_upgrade/dump \
    -t /opt/pangolin-dbms-server-7/bin -T /opt/pangolin-dbms-client-7/bin \
    -P $PGPASSWORD

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

    INFO: ======= START INPLACE_UPGRADE IN INFO MODE =======

    INFO: Initial update analysis........................... OK

    INFO:
    INFO mode finished with Success. Update required.
    ===================================================

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

    Location of update_catalog_version utility: /opt/pangolin-utilities/bin/pg_inplace_upgrade/update_catalog_version
    The log-file containing postgresql logs produced during catalog update: /home/postgres/pg_inplace_upgrade/log/postgres_update.log
    The summarized catalog update report: /home/postgres/pg_inplace_upgrade/log/report.log
    ======= START INPLACE_UPGRADE IN INFO MODE =======
    ----------- Checking for the absence of previous launches -----------
    Checking for the absence of previous launches..... OK
    ----------- Initial update analysis -----------
    CATALOG_VERSION_NO_OLD: 202602111
    Following directories will be searched to find sql-scripts applicable in this run:
    Initial update analysis........................... OK
    Update is unnecessary
    INFO mode finished with Success. Update not required.

    Если в процессе работы утилиты что-то пошло не так, будет выведено сообщение:

    ======= START INPLACE_UPGRADE IN INFO MODE =======
    ----------- Checking for the absence of previous launches -----------
    Checking for the absence of previous launches..... OK
    ----------- Initial update analysis -----------
    File /home/postgres/pg_inplace_upgrade/util/sql_upgrade_7xx/7.1.2//CATALOG_VERSION was not found
    Initial update analysis........................... FAIL
    INFO:
    INFO mode finished with Error.
    ===================================================
    Сведения

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

  3. Для кластерной конфигурации. Добавьте временный физический слот репликации на мастере:

    1. Проверьте наличие заданных слотов репликации в конфигурации DCS:

      sudo -iu postgres
      /opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml show-config
    2. Создайте отдельный файл ignore_slots.json и при необходимости добавьте существующие слоты репликации. Формат файла должен быть следующим:

      ignore_slots:
      - <replication_slots>

      Где <replication_slots> - существующие слоты репликации из конфигурации DCS.

    3. Добавьте в созданный ранее файл ignore_slots.json информацию о новом временном слоте репликации:

      echo '- name: tmp_update_slot' >> ignore_slots.json
      echo ' type: physical' >> ignore_slots.json
    4. Сохраните текущую конфигурацию DCS и примените настройки для ignore_slots:

      cp -r /$PGDATA/patroni.dynamic.json /home/postgres
      /opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml edit-config --apply <путь_к_ignore_slots> --force
      psql -c "SELECT * FROM pg_create_physical_replication_slot('tmp_update_slot', 'TRUE');"

      Где path_to_ignore_slots - полный путь до созданного ранее файла ignore_slots.json.

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

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

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

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

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

    • Для конфигурации без Pangolin Manager:

      • в случае отсутствия pangolin-dbms.service:

        sudo -iu postgres
        /opt/pangolin-dbms-server-7/bin/pg_ctl stop -D $PGDATA
        exit
      • с наличием файла pangolin-dbms.service:

        sudo systemctl stop pangolin-dbms
    • Для конфигурации с Pangolin Manager:

      sudo -iu postgres
      /opt/pangolin-dbms-server-7/bin/pg_ctl stop -D $PGDATA
      exit
      sudo systemctl stop pangolin-manager
    • Для любой конфигурации:

      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
  3. Проверьте, что все компоненты корректно остановлены:

    sudo ps aux | grep -E "pangolin-pooler|pangolin-manager|pangolin-dbms|pangolin-certs-rotate|pangolin-auth-reencrypt" | 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" | grep -v grep

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

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

Произведите обновление пакета компонента (pangolin-auth-reencrypt):

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

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

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

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

Произведите обновление пакета компонента (pangolin-certs-rotate):

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

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

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

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

  1. Произведите обновление пакета компонента (pangolin-security-utilities):

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

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

  1. (master, replica) Проверьте присутствует ли на стенде файл secret_dump_key.bin:

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

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

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

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

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

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

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

Произведите обновление пакета компонента (pangolin-diagnostic-tool):

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

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

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

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

tar -xzf ~/pangolin/3rdparty/3rdparty.tar.gz -C ~/pangolin/3rdparty/
export PANGOLIN_BACKUP_TOOLS_VENV=x.x.x
export PANGOLIN_BACKUP_TOOLS=x.x.x
sudo dnf install -y ~/pangolin/3rdparty/pangolin-backup-tools-venv pangolin-backup-tools-venv-$PANGOLIN_BACKUP_TOOLS_VENV-sberlinux9.x86_64.rpm
sudo dnf install -y ~/pangolin/pangolin-backup-tools-$PANGOLIN_BACKUP_TOOLS-sberlinux9.x86_64.rpm

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

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

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

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

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

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

Внимание!

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

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

export PANGOLIN_MANAGER_OLD=x.x.x
export PANGOLIN_MANAGER=x.x.x
sudo dnf install -y ~/pangolin/3rdparty/pangolin-manager-venv/pangolin-manager-venv-$PANGOLIN_MANAGER_VENV-sberlinux9.x86_64.rpm
sudo dnf install -y ~/pangolin/pangolin-manager-$PANGOLIN_MANAGER-sberlinux9.x86_64.rpm

Шаг 10. Обновление компонента серверной части (pangolin-dbms) (обязательно)

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

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

  • При отсутствии untrusted-расширений:

    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
  • При наличии untrusted-расширений:

    Внимание!

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

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

      tar -zxf untrusted/untrusted.tar.gz -C untrusted
    2. Переустановите пакет расширения:

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

Шаг 11. Обновление компонента клиентской части (pangolin-dbms-client) (обязательно)

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

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

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

Шаг 12. Переустановка файлов компонента pangolin-timescaledb (опционально)

Действия по переустановке компонента timescaledb

Переустановите расширение:

export PANGOLIN_TIMESCALEDB=x.xx.x
export PANGOLIN_DBMS_MAJOR=x
sudo dnf install -y ~/pangolin/timescaledb_{version_componentpangolin-timescaledb-$PANGOLIN_DBMS_MAJOR-apache-$PANGOLIN_TIMESCALEDB-sberlinux9-x86_64.rpm

Где {version_component} - актуальная версия компонента timescaledb в формате x_x_x.

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

Выполните актуализацию системного файла dynmotd.sh.

Дополнительные действия

  1. Актуализируйтеdynmotd.sh:

    export PANGOLIN_MANAGER=x.x.x
    export PANGOLIN_OLD_MANAGER=x.x.x
    export PANGOLIN_FULL_VER=0x.00x.0x
    export PANGOLIN_FULL_OLD_VER=0x.00x.0x

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

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

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

Внимание!

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

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

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

  2. Добавьте в конец конфигурационного файла postgresql.conf временные значения для мастера и реплики:

    sudo -iu postgres
    echo "synchronous_commit = 'off' #tmp_line" >> /$PGDATA/postgresql.conf
    echo "autovacuum = 'off' #tmp_line" >> /$PGDATA/postgresql.conf
    echo "cron.database_name = 'template1' #tmp_line" >> /$PGDATA/postgresql.conf
    exit
  3. Произведите запуск обновления системных данных на мастере:

    sudo -iu postgres
    export PANGOLIN_VER=x.x.x
    export PANGOLIN_OLD_VER=x.x.x
    export PGPASSWORD=<password for db user>
    cd /opt/pangolin-utilities/bin/pg_inplace_upgrade

    ./inplace_upgrade.sh update \
    -n $PANGOLIN_OLD_VER -N $PANGOLIN_VER \
    -s /opt/pangolin-utilities/bin/pg_inplace_upgrade \
    -B /home/postgres/pg_inplace_upgrade/backup \
    -d /pgdata/07/data \
    -l /home/postgres/pg_inplace_upgrade/log \
    -p 5433 -h 127.0.0.1 \
    -u postgres -b postgres \
    -m /home/postgres/pg_inplace_upgrade/dump \
    -t /opt/pangolin-dbms-server-7/bin -T /opt/pangolin-dbms-client-7/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_OLD_VER=x.x.x
    export PGPASSWORD=<password for db user>
    cd /opt/pangolin-utilities/bin/pg_inplace_upgrade

    ./inplace_upgrade.sh update \
    -n $PANGOLIN_OLD_VER -N $PANGOLIN_VER \
    -s /opt/pangolin-utilities/bin/pg_inplace_upgrade \
    -B /home/postgres/pg_inplace_upgrade/backup \
    -d /pgdata/07/data \
    -l /home/postgres/pg_inplace_upgrade/log \
    -p 5433 -h 127.0.0.1 \
    -u postgres -b postgres \
    -m /home/postgres/pg_inplace_upgrade/dump \
    -t /opt/pangolin-dbms-server-7/bin -T /opt/pangolin-dbms-client-7/bin \
    -r -D -k -P $PGPASSWORD

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

    INFO: ======= START INPLACE_UPGRADE IN UPDATE MODE =======
    INFO: ----------- Initial update analysis -----------
    INFO: Initial update analysis........................... OK
    INFO: ----------- Update CATALOG_VERSION_NO -----------
    INFO: Update CATALOG_VERSION_NO......................... OK
    <...>
    INFO: Replica is updated
    INFO:
    UPDATE mode finished with Success.
    ===================================================
    Внимание!

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

  5. Произведите удаление утилиты pangolin-inplace-upgrade:

    sudo dnf remove -y pangolin-inplace-upgrade

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

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

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

  1. Удалите временные переменные из postgresql.conf на мастере и реплике:

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

    • Для любой конфигурации:

      sudo systemctl daemon-reload
      sudo systemctl restart user@$(id -u postgres)
      sudo systemctl restart user@$(id -u kmadmin_pg)
    • Для конфигурации без Pangolin Manager:

      • в случае отсутствия pangolin-dbms.service:

        sudo -iu postgres
        /opt/pangolin-dbms-server-7/bin/pg_ctl restart -D $PGDATA
        exit
      • с наличием файла pangolin-dbms.service:

        sudo systemctl restart pangolin-dbms
    • Для конфигурации с Pangolin Manager:

      sudo -iu postgres
      /opt/pangolin-dbms-server-7/bin/pg_ctl restart -D $PGDATA
      exit
      sudo systemctl restart pangolin-manager
    • Для любой конфигурации:

      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
  3. Произведите проверку состояния служб на мастере:

    • Для конфигурации с Pangolin Manager:

      sudo systemctl status pangolin-manager
    • Для конфигурации без Pangolin Manager:

      • в случае отсутствия pangolin-dbms.service:

        sudo -iu postgres
        /opt/pangolin-dbms-server-7/bin/pg_ctl status -D $PGDATA
        exit
      • с наличием файла pangolin-dbms.service:

        sudo systemctl status pangolin-dbms
    • Для любой конфигурации:

      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
  4. Для конфигурации с Pangolin Manager. Выведите компонент из режима паузы на мастере, дождитесь активного состояния и статуса основного узла (мастера) – Leader:

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

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

    • Для любой конфигурации:

      sudo systemctl daemon-reload
      sudo systemctl restart user@$(id -u postgres)
      sudo systemctl restart user@$(id -u kmadmin_pg)
    • Для конфигурации без Pangolin Manager:

      • в случае отсутствия pangolin-dbms.service:

        sudo -iu postgres
        /opt/pangolin-dbms-server-7/bin/pg_ctl restart -D $PGDATA
        exit
      • с наличием файла pangolin-dbms.service:

        sudo systemctl restart pangolin-dbms
    • Для конфигурации с Pangolin Manager:

      sudo -iu postgres
      /opt/pangolin-dbms-server-7/bin/pg_ctl restart -D $PGDATA
      exit
      sudo systemctl restart pangolin-manager
    • Для любой конфигурации:

      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
  7. Произведите проверку состояния служб на реплике:

    • Для конфигурации с Pangolin Manager:

      sudo systemctl status pangolin-manager
    • Для конфигурации без Pangolin Manager:

      • в случае отсутствия pangolin-dbms.service:

        sudo -iu postgres
        /opt/pangolin-dbms-server-7/bin/pg_ctl status -D $PGDATA
        exit
      • с наличием файла pangolin-dbms.service:

        sudo systemctl status pangolin-dbms
    • Для любой конфигурации:

      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
  8. Дождитесь статуса синхронизации на реплике – sync_standby:

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

    sudo -iu postgres
    /opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml edit-config --replace /home/postgres/patroni.dynamic.json --force
    psql -c "SELECT * FROM pg_drop_replication_slot('tmp_update_slot');"
    exit
  10. Восстановите исходных значений конфигурации dcs

    sudo -iu postgres
    echo pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml edit-config --set "'synchronous_mode=$(sed -n /synchronous_mode:/p save_old_dcs_value.txt | sed 's/synchronous_mode: //')'" --force | bash
    echo pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml edit-config --set "'synchronous_mode_strict=$(sed -n /synchronous_mode_strict:/p save_old_dcs_value.txt | sed 's/synchronous_mode_strict: //')'" --force | bash
    exit

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

Обновите все установленные расширения СУБД до актуальных версий.

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

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

    set ON_ERROR_STOP = true;
    DO $$
    DECLARE
    r text;
    BEGIN
    FOR r IN (SELECT extname FROM pg_catalog.pg_extension WHERE extname in ( 'adminpack', 'amcheck', 'auth_delay', 'auto_explain', 'autoinc', 'bloom', 'btree_gin', 'btree_gist', 'citext', 'cube', 'dblink', 'dict_int', 'dict_xsyn', 'earthdistance', 'file_fdw', 'fuzzystrmatch', 'hstore', 'hstore_plperl', 'hstore_plperlu', 'hstore_plpython3u', 'insert_username', 'intagg', 'intarray', 'isn', 'jsonb_plperl', 'jsonb_plperlu', 'jsonb_plpython3u', 'lo', 'ltree', 'ltree_plpython3u', 'moddatetime', 'pageinspect', 'pg_buffercache', 'pg_freespacemap', 'pg_prewarm', 'pg_stat_statements', 'pg_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', 'postgis', 'postgis_raster', 'postgis_sfcgal', 'postgis_topology', 'address_standardizer', 'address_standardizer_data_us','postgis_tiger_geocoder', 'pg_background', 'pgrouting', 'plantuner' ) and extname not in ('pg_repack', 'timescaledb'))
    LOOP
    RAISE NOTICE 'Update extension %', r;
    EXECUTE FORMAT('ALTER EXTENSION %I UPDATE;', r);
    END LOOP;
    FOR r IN (SELECT extname FROM pg_catalog.pg_extension WHERE extname = 'pg_repack')
    LOOP
    RAISE NOTICE 'Update extension %', r;
    EXECUTE FORMAT('DROP EXTENSION IF EXISTS %I;', r);
    EXECUTE FORMAT('CREATE EXTENSION IF NOT EXISTS %I WITH SCHEMA ext;', r);
    END LOOP;
    END $$;
  2. Создайте временный файл run_update_extentions.sh под пользователем postgres и поместите его в /home/postgres/:

    databases=($($PG_HOME/bin/psql -t --csv -c "SELECT datname FROM pg_database WHERE datname NOT LIKE 'template0';"))
    echo "databases: " $databases
    for ud in "${databases[@]}"; do
    echo "database: " $ud
    $PG_HOME/bin/psql -d $ud -f /home/postgres/ext_update.sql
    done
    if [ $? -eq 0 ]
    then
    echo "All extentions have updated on nodes"
    else
    echo "There were some problems during proccess updating"
    exit 1

    fi
  3. Запустите sh-скрипт run_update_extentions.sh:

    sudo -iu postgres
    chmod 0700 run_update_extentions.sh ext_update.sql
    cd ~/
    export PGPASSWORD=<password for db user>
    PG_LICENSE_PATH=/opt/pangolin_license PG_HOME=/usr/pangolin-dbms-client PGHOST=127.0.0.1 PGPORT=5433 ./run_update_extentions.sh
    rm -f /home/postgres/run_update_extentions.sh /home/postgres/ext_update.sql
    exit

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

Выполните обновление каталога безопасности. Этот шаг обязателен для применения всех изменений в механизмах защиты данных.

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

Внимание!

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

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

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

      enable_protection_catalogs_upgrade = True
    • Для конфигурации c Pangolin Manager. Отредактируйте конфигурационный файл postgres.yml:

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

    • Для конфигурации без Pangolin Manager:

      • в случае отсутствия pangolin-dbms.service:

        sudo su - postgres
        /opt/pangolin-dbms-server-7/bin/pg_ctl reload -D $PGDATA
        /opt/pangolin-dbms-server-7/bin/pg_ctl restart -D $PGDATA
        exit
      • с наличием файла pangolin-dbms.service:

        sudo systemctl reload pangolin-dbms
        sudo systemctl restart pangolin-dbms
    • Для конфигурации c Pangolin Manager:

      sudo su - postgres
      /opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml reload clustername
      /opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml restart clustername
      exit
  3. Выполните следующую команду в каждой БД поочередно, кроме БД с включенным флагом datallowconn. <DB> - заменить на название базы данных:

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

    • Для конфигурации без Pangolin Manager:

      • в случае отсутствия pangolin-dbms.service:

        sudo su - postgres
        /opt/pangolin-dbms-server-7/bin/pg_ctl reload -D $PGDATA
        /opt/pangolin-dbms-server-7/bin/pg_ctl restart -D $PGDATA
        exit
      • с наличием файла pangolin-dbms.service:

        sudo systemctl reload pangolin-dbms
        sudo systemctl restart pangolin-dbms
    • Для конфигурации c Pangolin Manager:

      sudo su - postgres
      /opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml reload clustername
      /opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml restart clustername
      exit

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

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

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

    export PANGOLIN_TIMESCALEDB=x.xx.x
    export PANGOLIN_DBMS_MAJOR=x
    sudo dnf install -y ~/pangolin/timescaledb/pangolin-timescaledb-$PANGOLIN_DBMS_MAJOR-apache-$PANGOLIN_TIMESCALEDB-sberlinux9-x86_64.rpm
  2. Зарегистрируйте новую версию расширения:

    psql -h 127.0.0.1 -U postgres -p 5433 -X -d db -c 'ALTER EXTENSION timescaledb UPDATE;'

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

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

Произведите обновление пакета утилиты pangolin-auth-password:

export PANGOLIN_DBMS_MAJOR=x
sudo dnf install -y ~/pangolin/pangolin-auth-password-$PANGOLIN_DBMS_MAJOR-sberlinux9-x86_64.rpm

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

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

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

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

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

Внимание!

В случае использования libpq-части, произведите указанные действия в данном шаге.

Действия по обновлению 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

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

Выполните очистку временных файлов и актуализацию системных настроек.

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

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