Ручное обновление исполняемых файлов СУБД Pangolin
Данный раздел рассматривает ручное обновление исполняемых файлов СУБД Pangolin.
Перед началом обновления необходимо знать особенности, в связи с изменением формата WAL-файлов:
- Корректный откат к исходной версии Pangolin (6.1.0/6.1.2/6.1.4) при отсутствии резервной копии осуществить не получится, поэтому необходимо это учесть при попытке обновиться.
- При обновлении стенда кластерной конфигурации, перед началом обновления необходимо выключить все узлы кластера во избежание фоновых записей старого формата, который при старте уже обновленного узла считаются некорректными.
Перед началом выполнения инструкции необходимо убедиться, что yum/dnf-репозитории настроены корректно.
Поскольку инструкция является универсальной для standalone и кластерных (cluster) конфигураций, каждый пункт необходимо выполнить на всех узлах экземпляра СУБД. На узле арбитр производить обновление компонентов только по необходимости.
Обновление СУБД может осуществляться пользователем с правами суперпользователя, а также пользователем postgres
.
Все команды ниже являются примерами. Их необходимо отредактировать в соответствии с требуемыми параметрами и конфигурациями. В названиях rpm-пакетов, при необходимости, в блоках кода замените наименование ОС и пакетного менеджера.
Обозначения
В инструкции используются переменные для динамической настройки. Перед выполнением команд эти переменные будут экспортироваться. Скорректируйте значение относительно реализуемого сценария обновления:
PANGOLIN_VER
– новая версия СУБД Pangolin (формат - х.х.х);PANGOLIN_BACKUP_TOOLS
– новая версия компонента pangolin-backup-tools (формат - х.х.х);PANGOLIN_POOLER
– новая версия компонента pangolin-pooler (формат - х.х.х);PANGOLIN_MANAGER
– новая версия компонента pangolin-manager (формат - х.х.х);PANGOLIN_TIMESCALEDB
– новая версия компонента pangolin-timescaledb (формат - х.х.х);PANGOLIN_TIMESCALEDB_OLD
– исходная версия компонента pangolin-timescaledb (формат - х.х.х);PANGOLIN_PGHOME_VER
– новая версия в пути к бинарным файлам СУБД Pangolin (формат - х.х);PANGOLIN_PGHOME_OLD_VER
– исходная версия в пути к бинарным файлам СУБД Pangolin (формат - х.х.х/х.х);PANGOLIN_OLD_VER
– исходная версия СУБД Pangolin (формат - х.х.х);PANGOLIN_FULL_VER
– новая версия СУБД Pangolin (формат - 0х.00х.0х);PANGOLIN_FULL_OLD_VER
– исходная версия СУБД Pangolin (формат - 0х.00х.0х);PGPASSWORD
- пароль от пользователя БД (по умолчанию пользователь postgres).
Предусловие
Перед началом обновления необходимо заблокировать трафик на всех хостах СУБД и выключить службу crond
во избежание сторонних подключений на всех хостах СУБД.
В случае кластерной конфигурации дождитесь полного отсутствия задержки репликации между мастером и репликой. Перед началом процесса обновления узлы кластера должны быть синхронизированы.
Перед началом необходимо произвести проверку готовности СУБД к процессу обновления и устранить выявленные проблемы. Список необходимых проверок представлен в разделе «Проверка готовности к обновлению».
Проверка и устранение возможных ограничений происходит автоматически при выборе автоматизированного способа обновления.
В случае использования расширения timescaledb
убедитесь, что обновляемая версия расширения не ниже 2.14.2. В противном случае необходимо сначала обновить расширение до этой версии. Если поднять версию расширения в рамках одной версии СУБД невозможно, следует произвести обновление СУБД на промежуточную, а затем на целевую версию. Уточнение по процессу обновления стендов с предустановленным расширением timescaledb
указано в «Таблице поддерживаемых для обновления версий СУБД».
Шаг 1. Подготовка
-
Скачайте дистрибутив в рабочий каталог и распакуйте его. Далее по инструкции путь к компонентам дистрибутива будет формироваться по
~/pangolin
:mkdir -p ~/pangolin
tar -xzvf pangolin_6.tar.gz -C ~/pangolin -
Перед началом обновления убедитесь, что данный сценарий подходит для текущего стенда. Запустите команду из примера ниже на мастере и на реплике:
sudo mkdir -p /home/postgres/pg_inplace_upgrade/{util,backup,log,dump}
sudo cp -r ~/pangolin/installer/utilities/pg_inplace_upgrade/* /home/postgres/pg_inplace_upgrade/util
sudo chmod 700 -R /home/postgres/pg_inplace_upgrade
sudo chown postgres:postgres -R /home/postgres/pg_inplace_upgrade
sudo -iu postgres
export PANGOLIN_VER=x.x.x
export PANGOLIN_OLD_VER=x.x.x
export PGPASSWORD=<password for db user>
cd /home/postgres/pg_inplace_upgrade/util
./inplace_upgrade.sh info -n $PANGOLIN_OLD_VER -N $PANGOLIN_VER -s /home/postgres/pg_inplace_upgrade/util -B /home/postgres/pg_inplace_upgrade/backup -d /pgdata/06/data -l /home/postgres/pg_inplace_upgrade/log -p 5433 -h 127.0.0.1 -u postgres -b postgres -m /home/postgres/pg_inplace_upgrade/dump -t /usr/pangolin/bin -T /usr/pangolin-dbms-client/bin -P $PGPASSWORDВ случае, если необходимо произвести обновление системных данных каталога, будет выведено сообщение:
INFO: Location of update_catalog_version utility: /opt/pangolin_cache/pg_inplace_upgrade/update_catalog_version
INFO: The log-file containing postgresql logs produced during catalog update: /pgarclogs/pg_inplace_upgrade/log/postgres_updade.log
INFO: The summarized catalog update report: /pgarclogs/pg_inplace_upgrade/log/report.log
INFO: ======= START INPLACE_UPGRADE IN INFO MODE =======
INFO: ----------- Initial update analysis -----------
INFO: CATALOG_VERSION_NO_OLD: 202310091
INFO: Following directories will be searched to find sql-scripts applicable in this run:
INFO: /opt/pangolin_cache/pg_inplace_upgrade/update_catalog_version/sql_upgrade_6xx/6.4.0/
INFO: Version: 6.4.0 CATALOG_VERSION_NO_NEW: 202409231
INFO: Initial update analysis........................... OK
INFO: ----------- Update CATALOG_VERSION_NO -----------
INFO: update_catalog_version: The new catalog version is the same as the current one.
INFO: Update CATALOG_VERSION_NO......................... OK
INFO: ----------- Read all catalog update SQL-scripts -----------
INFO: Read all catalog update SQL-scripts............... OK
INFO: ----------- Extract info about users tablespaces -----------
INFO: paths: /opt/pangolin_cache/pg_inplace_upgrade/tmp_check/test_db
INFO: version: PostgreSQL 15.5 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 8.5.0 20210514 (Platform V SberLinux 8.5.0-18), 64-bit
INFO: Extract info about users tablespaces.............. OK
INFO:
INFO mode finished with Success. Update required.
===================================================Если нет необходимости в обновлении системных данных каталога, будет выведено сообщение:
INFO: Location of update_catalog_version utility: /opt/pangolin_cache/pg_inplace_upgrade/update_catalog_version
INFO: The log-file containing postgresql logs produced during catalog update: /pgarclogs/pg_inplace_upgrade/log/postgres_updade.log
INFO: The summarized catalog update report: /pgarclogs/pg_inplace_upgrade/log/report.log
INFO: ======= START INPLACE_UPGRADE IN INFO MODE =======
INFO: ----------- Initial update analysis -----------
INFO: CATALOG_VERSION_NO_OLD: 202409231
INFO: Following directories will be searched to find sql-scripts applicable in this run:
INFO: /opt/pangolin_cache/pg_inplace_upgrade/sql_upgrade_6xx/6.4.0/
INFO: Version: 6.4.0 CATALOG_VERSION_NO_NEW: 202409231
INFO: Initial update analysis........................... OK
INFO:
INFO mode finished with Success. Update not required.
===================================================Если в процессе работы утилиты что-то пошло не так, будет выведено сообщение:
INFO: Location of update_catalog_version utility: /opt/pangolin_cache/pg_inplace_upgrade/update_catalog_version
INFO: The log-file containing postgresql logs produced during catalog update: /pgarclogs/pg_inplace_upgrade/log/postgres_updade.log
INFO: The summarized catalog update report: /pgarclogs/pg_inplace_upgrade/log/report.log
INFO: ======= START INPLACE_UPGRADE IN INFO MODE =======
INFO: ----------- Initial update analysis -----------
INFO: CATALOG_VERSION_NO_OLD: 202310091
INFO: Following directories will be searched to find sql-scripts applicable in this run:
INFO: /opt/pangolin_cache/pg_inplace_upgrade/sql_upgrade_6xx/6.2.0/
INFO: Version: 6.2.0 CATALOG_VERSION_NO_NEW: 202310091
INFO: /opt/pangolin_cache/pg_inplace_upgrade/sql_upgrade_6xx/6.3.0/
INFO: Version: 6.3.0 CATALOG_VERSION_NO_NEW: 202310091
INFO: /opt/pangolin_cache/pg_inplace_upgrade/sql_upgrade_6xx/6.4.0/
INFO: Version: 6.4.0 CATALOG_VERSION_NO_NEW: 202409231
ERROR: File /opt/pangolin_cache/pg_inplace_upgrade/sql_upgrade_6xx/6.4.1/CATALOG_VERSION was not found
INFO: Initial update analysis........................... FAIL
INFO:
INFO mode finished with Error.
===================================================СведенияК дальнейшим шагам приступайте, если утилита
inplace_upgrade.sh
вернула сообщение на Шаге 1:«INFO mode finished with Success. Update required»
. -
Для кластерной конфигурации. Добавьте временный физический слот репликации на мастере:
-
Проверьте наличие заданных слотов репликации в конфигурации DCS:
sudo -iu postgres
/opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml show-config -
Создайте отдельный файл
ignore_slots.json
и добавьте, по необходимости, существующие слоты репликации. Формат файла должен быть следующим:ignore_slots:
- <слот репликации>Где
<слот репликации>
- существующие слоты репликации из конфигурации DCS. -
Добавьте в созданный ранее файл
ignore_slots.json
информацию о новом временном слоте репликации:echo '- name: tmp_update_slot' >> ignore_slots.json && echo ' type: physical' >> ignore_slots.json
-
Сохраните текущую конфигурацию DCS и примените настройки для
ignore_slots
:cp -r /pgdata/data/data/patroni.dynamic.json /home/postgres
/opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml edit-config --apply <path_to_ignore_slots> --force
psql
SELECT * FROM pg_create_physical_replication_slot('tmp_update_slot', 'TRUE');
exitГде
path_to_ignore_slots
- полный путь до созданного ранее файлаignore_slots.json
.
-
Шаг 2. Остановка компонентов СУБД Pangolin
-
В случае конфигурации с Pangolin Manager (patroni) введите компонент в режим паузы:
- Конфигурация с patroni (более старые версии продукта)
- Конфигурация с Pangolin Manager
sudo -iu postgres
patronictl -c /etc/patroni/postgres.yml edit-config --set 'pause=true' --force
exitsudo -iu postgres
pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml edit-config --set 'pause=true' --force
exit -
Остановите все компоненты СУБД Pangolin. Перед остановкой необходимо выполнить команду
CHECKPOINT
на мастере. В случае кластерной конфигурации действия по остановке произведите сначала на реплике, затем на мастере:- Без функциональности «Отказ от root»
- С включенной функциональностью «Отказ от root»
-
Для конфигурации без Pangolin Manager:
sudo systemctl stop postgresql
-
Для конфигурации с Pangolin Manager:
sudo -iu postgres
pg_ctl stop
exit
sudo systemctl stop patroni
sudo systemctl stop pangolin-manager -
Для конфигурации с etcd:
sudo systemctl stop etcd
-
Для любой конфигурации:
sudo systemctl stop pangolin-pooler
sudo systemctl stop pangolin_reencrypt@postgres.service
sudo systemctl stop pangolin_reencrypt@kmadmin_pg.service
sudo systemctl stop pg_certs_rotate_agent.service
sudo systemctl stop pangolin-certs-rotate
sudo systemctl stop pangolin-auth-reencrypt@postgres
sudo systemctl stop pangolin-auth-reencrypt@kmadmin_pg
-
Для конфигурации с etcd:
sudo systemctl stop etcd
sudo -iu postgres -
Для конфигурации с Pangolin Manager:
pg_ctl stop
systemctl --user stop pangolin-manager -
Для конфигурации без Pangolin Manager:
systemctl --user stop postgresql
-
Для любой конфигурации:
systemctl --user stop pangolin-pooler
systemctl --user stop pangolin-certs-rotate
systemctl --user stop pangolin-auth-reencrypt
exit
sudo -iu kmadmin_pg
export XDG_RUNTIME_DIR=/run/user/$(id -u)
export DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus"
systemctl --user stop pangolin-auth-reencrypt
exit
-
Проверьте, что все компоненты корректно остановлены:
sudo ps aux | grep -E "pgbouncer|pangolin-pooler|pangolin-manager|patroni|postgresql|pangolin-certs-rotate|pg_certs_rotate_agent|pangolin-auth-reencrypt|pangolin_reencrypt|etcd" | grep -v grep
Если команда на шаге 3 вернула результат, то выполните следующее:
sudo kill -9 <pid>
sudo ps aux | grep -E "pgbouncer|pangolin-pooler|pangolin-manager|patroni|postgresql|pangolin-certs-rotate|pg_certs_rotate_agent|pangolin-auth-reencrypt|pangolin_reencrypt|etcd" | grep -v grep
Шаг 3. Обновление компонента pg_auth_reencrypt
Произведите обновление пакета компонента (pangolin-auth-reencrypt
):
export PANGOLIN_VER=x.x.x
sudo dnf install -y ~/pangolin/utilities/pangolin-auth-reencrypt-$PANGOLIN_VER-sberlinux8.x86_64.rpm
В случае конфигурации с DCS, произведите дополнительно обновление на узле арбитр.
Шаг 4. Обновление компонента pangolin_certs_rotate
Произведите обновление пакета компонента (pangolin-certs-rotate
):
export PANGOLIN_VER=x.x.x
sudo dnf install -y ~/pangolin/utilities/pangolin-certs-rotate-$PANGOLIN_VER-sberlinux8.x86_64.rpm
В случае конфигурации с DCS, произведите дополнительно обновление на узле арбитр.
Шаг 5. Обновление компонентов безопасности (security-utilities)
- Произведите обновление пакета компонента (
pangolin-security-utilities
):
export PANGOLIN_VER=x.x.x
sudo dnf install -y ~/pangolin/utilities/pangolin-security-utilities-$PANGOLIN_VER-sberlinux8.x86_64.rpm
В случае конфигурации с DCS, произведите дополнительно обновление на узле арбитр.
-
(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
в зависимости от конфигурации выполните:
- Конфигурация standalone
- Кластерная конфигурация
-
C помощью bash-команды создайте файл для хранения ключа засекречивания:
/opt/pangolin-security-utilities/bin/pg_dump_generate_secret_file
-
(master) С помощью bash-команды создайте ключ засекречивания, который далее будет использоваться для создания файла с ключом засекречивания:
/opt/pangolin-security-utilities/bin/generate_encryption_key
-
(master, replica) Создайте файл для хранения ключа засекречивания:
/opt/pangolin-security-utilities/bin/pg_dump_generate_secret_file -t BASE64 -m
-
(master, replica) Введите сгенерированный в пункте 1 ключ.
Шаг 6. Обновление компонента diagnostic_tool
Произведите обновление пакета компонента (pangolin-diagnostic-tool
):
export PANGOLIN_VER=x.x.x
sudo dnf install -y ~/pangolin/utilities/pangolin-diagnostic-tool-$PANGOLIN_VER-sberlinux8.x86_64.rpm
Шаг 7. Обновление компонента резервного копирования (backup-tools)
-
Обновите пакет
pangolin-backup-tools-venv
(обязательная зависимость дляpangolin-backup-tools
), либо установите его, если он отсутствует:sudo dnf remove -y ~/pangolin/pangolin-backup-tools-venv
sudo dnf install -y ~/pangolin/pangolin-backup-tools-venv-{version_component}-sberlinux8.x86_64.rpm -
Произведите обновление пакета компонента (
pangolin-backup-tools
):export PANGOLIN_BACKUP_TOOLS=1.2.2
sudo dnf remove -y ~/pangolin/pangolin-backup-tools-$PANGOLIN_BACKUP_TOOLS
sudo dnf install -y ~/pangolin/pangolin-backup-tools-$PANGOLIN_BACKUP_TOOLS-sberlinux8.x86_64.rpm -
Актуализируйте конфигурационный файл
backup-tools-env
согласно шаблону ниже:# PATH, used for access to required executable files, default value: "${PATH}:{PGHOME}/bin/"
PATH="${PATH}:/usr/pangolin-6.5/bin/"
# path to PGHOME, default value: "/opt/pangolin-backup-tools/bin"
PGHOME="/opt/pangolin-backup-tools"
# path to python libraries, required for manage_backup.bin, default value: "/opt/pangolin-backup-tools/lib/python3/site-packages"
PYTHONPATH="/opt/pangolin-backup-tools/lib/python3/site-packages"
# path to libraries, required for executable files, default value: "/opt/pangolin-backup-tools/lib"
LD_LIBRARY_PATH="/opt/pangolin-backup-tools/lib"
# path to plugins libraries, default value: "/opt/pangolin-backup-tools/lib"
PG_PLUGINS_PATH="/opt/pangolin-backup-tools/lib"
# Pangolin DBMS server IP, default value: "127.0.0.1"
ARG_KEY_DBMS_SERVER_IP="127.0.0.1"
# Pangolin DBMS port, default value: "5433"
ARG_KEY_DBMS_SERVER_PORT="5433"
# user used for access to database, default value: "backup_user"
ARG_KEY_DBMS_CONNECT_USER="backup_user"
# database to connect, default value: "postgres"
ARG_KEY_DBMS_CONNECT_DATA_BASE="postgres"
# path to backup storage, default value: "/pgarclogs"
ARG_KEY_DBMS_CONNECT_BACKUP_DIR="/pgarclogs/06"
# password to connect to Pangolin DBMS, default value: 'sample_password'
# cluster name, default value: "clustername"
PGINSTANCE="clustername"
# WAL archives list
WALSTATE_FILE="$ARG_KEY_DBMS_CONNECT_BACKUP_DIR/wals_to_delete"
# Log file
LOG_FILE="$ARG_KEY_DBMS_CONNECT_BACKUP_DIR/archive.log"
# path to script, used for creating backup files, default value: "/opt/pangolin-backup-tools/bin/manage_backup.sh"
MANAGE_BACKUP_SCRIPT="/opt/pangolin-backup-tools/bin/manage_backup.sh"
# setting up of connection string
PANGOLIN_BACKUP_TOOLS_ARGS="$PANGOLIN_BACKUP_TOOLS_ARGS --host $ARG_KEY_DBMS_SERVER_IP"
PANGOLIN_BACKUP_TOOLS_ARGS="$PANGOLIN_BACKUP_TOOLS_ARGS -p $ARG_KEY_DBMS_SERVER_PORT"
PANGOLIN_BACKUP_TOOLS_ARGS="$PANGOLIN_BACKUP_TOOLS_ARGS -U $ARG_KEY_DBMS_CONNECT_USER"
PANGOLIN_BACKUP_TOOLS_ARGS="$PANGOLIN_BACKUP_TOOLS_ARGS -d $ARG_KEY_DBMS_CONNECT_DATA_BASE"
PANGOLIN_BACKUP_TOOLS_ARGS="$PANGOLIN_BACKUP_TOOLS_ARGS -B $ARG_KEY_DBMS_CONNECT_BACKUP_DIR"
# environment variables to launch manage backup
export PATH
export PGHOME
export PYTHONPATH
export LD_LIBRARY_PATH
export PG_PLUGINS_PATH
# опционально
sudo rm -rf /opt/omni/lbin/*manage_backup*
sudo rm -rf /opt/omni/lbin/*pg_se_archlogs*
Шаг 8. Обновление компонента Pangolin Pooler
Произведите обновление пакета компонента:
export PANGOLIN_POOLER=1.4.1
sudo dnf install -y ~/pangolin/pangolin-pooler-$PANGOLIN_POOLER-sberlinux8.x86_64.rpm
Шаг 9. Обновление компонента Pangolin Manager
-
Произведите обновление пакета компонента (
pangolin-pooler
):export PANGOLIN_PGHOME_VER=x.x
export PANGOLIN_PGHOME_OLD_VER=x.x
export PANGOLIN_MANAGER=2.1.6
sudo dnf install -y ~/pangolin/pangolin-manager-venv-$PANGOLIN_MANAGER_VENV-sberlinux8.x86_64.rpm
sudo dnf install -y ~/pangolin/pangolin-manager-$PANGOLIN_MANAGER-sberlinux8.x86_64.rpm
sudo sed -i "s/$PANGOLIN_PGHOME_OLD_VER/$PANGOLIN_PGHOME_VER/g" /etc/pangolin-manager/postgres.yml
# Добавить в файл /etc/pangolin-manager/postgres.yml параметр в секцию postgresql, если его нет
bin_dir_client: /usr/pangolin-dbms-client-$PANGOLIN_PGHOME_VER/binВнимание!В случае конфигурации с DCS, произведите дополнительно обновление на узле арбитр.
-
Для конфигурации с DCS выполните данный шаг только на узле арбитр:
sudo chmod -R 0440 /opt/pangolin-manager/lib/plugins/ /opt/pangolin-manager/lib/libfe_elog.so
sudo chmod 0770 /opt/pangolin-manager /opt/pangolin-manager/bin /opt/pangolin-manager/lib /opt/pangolin-manager/lib/plugins
sudo chown postgres:pangolin_users /opt/pangolin-manager /opt/pangolin-manager/bin /opt/pangolin-manager/lib /opt/pangolin-manager/lib/plugins /opt/pangolin-manager/lib/libfe_elog.so
Шаг 10. Обновление компонента серверной части (pangolin-dbms)
Произведите обновление пакета компонента:
export PANGOLIN_OLD_VER=x.x.x
sudo dnf remove -y pangolin-dbms-6.4-$PANGOLIN_OLD_VER
export PANGOLIN_VER=x.x.x
sudo dnf install -y ~/pangolin/pangolin-dbms-6.5-$PANGOLIN_VER-sberlinux8.x86_64.rpm
sudo rm -rf /usr/pangolin-6.1* /usr/pangolin-6.2* usr/pangolin-6.3* usr/pangolin-6.4* /usr/pgsql-se-06
Для конфигурации без Pangolin Manager:
export PANGOLIN_PGHOME_OLD_VER=x.x
export PANGOLIN_PGHOME_VER=x.x
sudo sed -i "s/$PANGOLIN_PGHOME_OLD_VER/$PANGOLIN_PGHOME_VER/g" /pgdata/06/data/postgresql.conf
sudo sed -i "s/$PANGOLIN_PGHOME_OLD_VER/$PANGOLIN_PGHOME_VER/g" /lib/systemd/system/postgresql.service
Шаг 11. Обновление компонента клиентской части (pangolin-dbms-client)
Произведите обновление пакета компонента:
export PANGOLIN_OLD_VER=x.x.x
sudo dnf remove -y pangolin-dbms-6.4-client-$PANGOLIN_OLD_VER
export PANGOLIN_VER=x.x.x
sudo dnf install -y ~/pangolin/pangolin-dbms-6.5-client-$PANGOLIN_VER-sberlinux8.x86_64.rpm
Шаг 12. Обновление компонента timescaledb
Произведите обновление пакета компонента (pangolin-timescaledb
):
-
При необходимости удалите старый пакет компонента и зафиксируйте версию:
export PANGOLIN_TIMESCALEDB_OLD=2.14.2
sudo dnf remove -y pangolin-timescaledb-6.4-apache-$PANGOLIN_TIMESCALEDB_OLD -
Произведите обновление:
export PANGOLIN_TIMESCALEDB=2.19.3
sudo dnf install -y ~/pangolin/timescaledb/pangolin-timescaledb-6.5-apache-$PANGOLIN_TIMESCALEDB-sberlinux8-x86_64.rpm
Шаг 13. Дополнительные действия
-
Скопируйте 3rd-party компоненты:
sudo cp -r ~/pangolin/3rdparty/ /usr/pangolin/
sudo tar -xzvf /usr/pangolin/3rdparty/3rdparty.tar.gz -C /usr/pangolin/3rdparty/
sudo chown -R postgres:postgres /usr/pangolin/3rdparty
sudo chmod -R 0700 /usr/pangolin/3rdparty -
Актуализируйте
.bash_profile
иdynmotd.sh
:export PANGOLIN_MANAGER=x.x.x
export PANGOLIN_OLD_MANAGER=x.x.x
export PANGOLIN_FULL_VER=0x.00x.0x
export PANGOLIN_FULL_OLD_VER=0x.00x.0x
export PANGOLIN_PGHOME_VER=x.x
export PANGOLIN_PGHOME_OLD_VER=x.x
sudo sed -i "s/$PANGOLIN_PGHOME_OLD_VER/$PANGOLIN_PGHOME_VER/g" /home/postgres/.bash_profile
sudo sed -i "s/$PANGOLIN_PGHOME_OLD_VER/$PANGOLIN_PGHOME_VER/g" /home/kmadmin_pg/.bash_profile
sudo sed -i "s/$PANGOLIN_PGHOME_OLD_VER/$PANGOLIN_PGHOME_VER/g" /home/postgres/.bashrc
sudo sed -i "s/$PANGOLIN_PGHOME_OLD_VER/$PANGOLIN_PGHOME_VER/g" /home/kmadmin_pg/.bashrc
sudo sed -i "s/$PANGOLIN_OLD_MANGER/$PANGOLIN_MANAGER/g" /usr/local/sbin/dynmotd.sh
sudo sed -i "s/$PANGOLIN_FULL_OLD_VER/$PANGOLIN_FULL_VER/g" /usr/local/sbin/dynmotd.shВнимание!Произведите дополнительно данные действия на узле арбитр.
Шаг 14. Запуск утилиты обновления системных данных каталога СУБД Pangolin
Выполните данный шаг, если утилита inplace_upgrade.sh
вернула сообщение на «Шаге 1»: «INFO mode finished with Success. Update required»
.
-
Добавьте в конец конфигурационного файла
postgresql.conf
временные значения для мастера и реплики:sudo -iu postgres
echo "synchronous_commit = 'off' #tmp_line" >> /pgdata/data/data/postgresql.conf
echo "autovacuum = 'off' #tmp_line" >> /pgdata/data/data/postgresql.conf
echo "cron.database_name = 'template1' #tmp_line" >> /pgdata/data/data/postgresql.conf
exit -
Заменить все вхождения, в строках
postgresql.conf
, старой версии на новую версию для мастера и репликиexport PANGOLIN_PGHOME_OLD_VER=x.x
export PANGOLIN_PGHOME_VER=x.x
sudo sed -i "s/$PANGOLIN_PGHOME_OLD_VER/$PANGOLIN_PGHOME_VER/g" /pgdata/06/data/postgresql.conf -
Произведите запуск обновления системных данных на мастере:
sudo -iu postgres
export PANGOLIN_VER=x.x.x
export PANGOLIN_OLD_VER=x.x.x
export PGPASSWORD=<password for db user>
cd /home/postgres/pg_inplace_upgrade/util
./inplace_upgrade.sh update -n $PANGOLIN_OLD_VER -N $PANGOLIN_VER -s /home/postgres/pg_inplace_upgrade/util -B /home/postgres/pg_inplace_upgrade/backup -d /pgdata/06/data -l /home/postgres/pg_inplace_upgrade/log -p 5433 -h 127.0.0.1 -u postgres -b postgres -m /home/postgres/pg_inplace_upgrade/dump -t /usr/pangolin/bin -T /usr/pangolin-dbms-client/bin -D -k -P $PGPASSWORD
exitОжидаемый успешный результат:
...
INFO: Update Complete!
INFO: ----------- Finish upgrade -----------
INFO: Finish upgrade.................................... OK
INFO:
UPDATE mode finished with Success.
===================================================Внимание!В случае, если на мастере обновление прошло неуспешно, произведите восстановление по инструкции «Восстановление после неудачного обновления исполняемых файлов». Все дальнейшие шаги данной инструкции необходимо пропустить.
-
Произведите запуск обновления системных данных на реплике, если кластерная конфигурация и обновления на основном узле прошло успешно.
sudo -iu postgres
export PANGOLIN_VER=x.x.x
export PANGOLIN_OLD_VER=x.x.x
export PGPASSWORD=<password for db user>
cd /home/postgres/pg_inplace_upgrade/util
./inplace_upgrade.sh update -n $PANGOLIN_OLD_VER -N $PANGOLIN_VER -s /home/postgres/pg_inplace_upgrade/util -B /home/postgres/pg_inplace_upgrade/backup -d /pgdata/06/data -l /home/postgres/pg_inplace_upgrade/log -p 5433 -h 127.0.0.1 -u postgres -b postgres -m /home/postgres/pg_inplace_upgrade/dump -t /usr/pangolin/bin -T /usr/pangolin-dbms-client/bin -r -D -k -P $PGPASSWORDОжидаемый результат:
INFO: Location of update_catalog_version utility: /opt/pangolin_cache/pg_inplace_upgrade/update_catalog_version
INFO: The log-file containing postgresql logs produced during catalog update: /pgarclogs/pg_inplace_upgrade/log/postgres_updade.log
INFO: The summarized catalog update report: /pgarclogs/pg_inplace_upgrade/log/report.log
INFO: ======= START INPLACE_UPGRADE IN UPDATE MODE =======
INFO: ----------- Initial update analysis -----------
INFO: CATALOG_VERSION_NO_OLD: 202310091
INFO: Following directories will be searched to find sql-scripts applicable in this run:
INFO: /opt/pangolin_cache/pg_inplace_upgrade/tmp_check/upgrade9/sql_upgrade_6xx/6.4.0/
INFO: Version: 6.4.0 CATALOG_VERSION_NO_NEW: 202409231
INFO: Initial update analysis........................... OK
INFO: ----------- Update CATALOG_VERSION_NO -----------
INFO: update_catalog_version: Catalog version has been successfully updated to 202409231.
INFO: Update CATALOG_VERSION_NO......................... OK
INFO: ----------- Read all catalog update SQL-scripts -----------
INFO: Read all catalog update SQL-scripts............... OK
INFO: ----------- Update user tablespaces -----------
INFO: renamed '/tmp/WDfqY_1Ing/PG_15_202310091' -> '/tmp/WDfqY_1Ing/PG_15_202409231'
INFO: Rename directories of user tablespaces
INFO: Update user tablespaces........................... OK
INFO: Replica is updated
INFO:
UPDATE mode finished with Success.
===================================================Внимание!В случае, если на мастере обновление прошло неуспешно, произведите восстановление по инструкции «Восстановление после неудачного обновления исполняемых файлов». Все дальнейшие шаги данной инструкции необходимо пропустить.
Шаг 15. Запуск компонентов СУБД Pangolin
-
Удалите временные переменные из
postgresql.conf
на мастере и реплике:synchronous_commit = 'off' #tmp_line
autovacuum = 'off' #tmp_line
cron.database_name = 'template1' #tmp_line -
Запустите компоненты Pangolin на мастере:
- Без функциональности «Отказ от root»
- С функциональностью «Отказ от root»
-
Для любой конфигурации:
sudo systemctl daemon-reload
sudo systemctl restart user@$(id -u postgres)
sudo systemctl restart user@$(id -u kmadmin_pg) -
Для конфигурации с Pangolin Manager:
sudo systemctl restart pangolin-manager
-
Для конфигурации без Pangolin Manager:
sudo systemctl restart postgresql
-
Для конфигурации с etcd:
sudo systemctl restart etcd
-
Для любой конфигурации:
sudo systemctl restart pangolin-pooler
sudo systemctl restart pangolin-certs-rotate
sudo systemctl restart pangolin-auth-reencrypt@postgres
sudo systemctl restart pangolin-auth-reencrypt@kmadmin_pg
-
Для любой конфигурации:
sudo systemctl --user restart user@$(id -u postgres)
sudo systemctl --user restart user@$(id -u kmadmin_pg) -
Для конфигурации с etcd:
sudo systemctl --user restart etcd
-
Для конфигурации с Pangolin Manager:
sudo -iu postgres
systemctl --user daemon-reload
systemctl --user restart pangolin-manager -
Для конфигурации без Pangolin Manager:
sudo -iu postgres
systemctl --user daemon-reload
systemctl --user restart postgresql -
Для любой конфигурации:
systemctl --user restart pangolin-pooler
systemctl --user restart pangolin-certs-rotate
systemctl --user restart pangolin-auth-reencrypt
exit
sudo -iu kmadmin_pg
systemctl --user daemon-reload
export XDG_RUNTIME_DIR=/run/user/$(id -u)
export DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus"
systemctl --user restart pangolin-auth-reencrypt
exit
-
Произведите проверку состояния служб на мастере:
- Без функциональности «Отказ от root»
- С функциональностью «Отказ от root»
-
Для конфигурации с Pangolin Manager:
sudo systemctl status pangolin-manager
-
Для конфигурации без Pangolin Manager:
sudo systemctl status postgresql
-
Для конфигурации с etcd:
sudo systemctl status etcd
-
Для любой конфигурации:
sudo systemctl status pangolin-pooler
sudo systemctl status pangolin-certs-rotate
sudo systemctl status pangolin-auth-reencrypt@postgres
sudo systemctl status pangolin-auth-reencrypt@kmadmin_pg
-
Для конфигурации с etcd:
sudo systemctl --user status etcd
-
Для конфигурации с Pangolin Manager:
sudo -iu postgres
systemctl --user status pangolin-manager -
Для конфигурации без Pangolin Manager:
sudo -iu postgres
systemctl --user status postgresql -
Для любой конфигурации:
sudo -iu postgres
systemctl --user status pangolin-pooler
systemctl --user status pangolin-certs-rotate
systemctl --user status pangolin-auth-reencrypt
exit
sudo -iu kmadmin_pg
export XDG_RUNTIME_DIR=/run/user/$(id -u)
export DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus"
systemctl --user status pangolin-auth-reencrypt
exit
-
Для конфигурации с Pangolin Manager. Выведите компонент из режима паузы, дождитесь активного состояния и статуса основного узла (мастера) –
Leader
:sudo -iu postgres
pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml edit-config --set 'pause=false' --force
pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml list
exit -
Для конфигурации с Pangolin Manager. Включите синхронизацию:
sudo -iu postgres
pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml show-config | grep synchronous > save_old_dcs_value.txt
pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml edit-config --set 'synchronous_mode=true' --force
pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml edit-config --set 'synchronous_mode_strict=true' --force
exit -
Произведите запуск компонентов Pangolin на реплике:
- Без функциональности «Отказ от root»
- С функциональностью «Отказ от root»
-
Для любой конфигурации:
sudo systemctl daemon-reload
sudo systemctl restart user@$(id -u postgres)
sudo systemctl restart user@$(id -u kmadmin_pg) -
Для конфигурации с Pangolin Manager:
sudo systemctl restart pangolin-manager
-
Для конфигурации без Pangolin Manager:
sudo systemctl restart postgresql
-
Для конфигурации с etcd:
sudo systemctl restart etcd
-
Для любой конфигурации:
sudo systemctl restart pangolin-pooler
sudo systemctl restart pangolin-certs-rotate
sudo systemctl restart pangolin-auth-reencrypt@postgres
sudo systemctl restart pangolin-auth-reencrypt@kmadmin_pg
-
Для любой конфигурации:
sudo systemctl --user restart user@$(id -u postgres)
sudo systemctl --user restart user@$(id -u kmadmin_pg) -
Для конфигурации с etcd:
sudo systemctl --user restart etcd
-
Для конфигурации с Pangolin Manager:
sudo -iu postgres
systemctl --user daemon-reload
systemctl --user restart pangolin-manager -
Для конфигурации без Pangolin Manager:
sudo -iu postgres
systemctl --user daemon-reload
systemctl --user restart postgresql -
Для любой конфигурации:
systemctl --user restart pangolin-pooler
systemctl --user restart pangolin-certs-rotate
systemctl --user restart pangolin-auth-reencrypt
exit
sudo -iu kmadmin_pg
systemctl --user daemon-reload
export XDG_RUNTIME_DIR=/run/user/$(id -u)
export DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus"
systemctl --user restart pangolin-auth-reencrypt
exit
-
Произведите проверку состояния служб на реплике:
- Без функциональности «Отказ от root»
- С функциональностью «Отказ от root»
-
Для конфигурации с Pangolin Manager:
sudo systemctl status pangolin-manager
-
Для конфигурации без Pangolin Manager:
sudo systemctl status postgresql
-
Для конфигурации с etcd:
sudo systemctl status etcd
-
Для любой конфигурации:
sudo systemctl status pangolin-pooler
sudo systemctl status pangolin-certs-rotate
sudo systemctl status pangolin-auth-reencrypt@postgres
sudo systemctl status pangolin-auth-reencrypt@kmadmin_pg
-
Для конфигурации с etcd:
sudo systemctl --user status etcd
-
Для конфигурации с Pangolin Manager:
sudo -iu postgres
systemctl --user status pangolin-manager -
Для конфигурации без Pangolin Manager:
sudo -iu postgres
systemctl --user status postgresql -
Для любой конфигурации:
sudo -iu postgres
systemctl --user status pangolin-pooler
systemctl --user status pangolin-certs-rotate
systemctl --user status pangolin-auth-reencrypt
exit
sudo -iu kmadmin_pg
export XDG_RUNTIME_DIR=/run/user/$(id -u)
export DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus"
systemctl --user status pangolin-auth-reencrypt
exit
-
Дождитесь статуса синхронизации на реплике –
sync_standby
:sudo -iu postgres
pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml list
exit -
Удалите временный физический слот репликации на мастера:
sudo -iu postgres
/opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml edit-config --replace /home/postgres/patroni.dynamic.json --force
psql -c "SELECT * FROM pg_drop_replication_slot('tmp_update_slot');"
exit -
Восстановите исходных значений конфигурации dcs
sudo -iu postgres
echo pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml edit-config --set "'synchronous_mode=$(sed -n /synchronous_mode:/p save_old_dcs_value.txt | sed 's/synchronous_mode: //')'" --force | bash
echo pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml edit-config --set "'synchronous_mode_strict=$(sed -n /synchronous_mode_strict:/p save_old_dcs_value.txt | sed 's/synchronous_mode_strict: //')'" --force | bash
exit
Шаг 16. Обновление расширений
-
Создайте временный файл
ext_update.sql
и поместите его в/home/postgres/
:set ON_ERROR_STOP = true;
DO $$
DECLARE
r text;
BEGIN
FOR r IN (SELECT extname FROM pg_catalog.pg_extension WHERE extname in ( 'adminpack', 'amcheck', 'auth_delay', 'auto_explain', 'autoinc', 'bloom', 'btree_gin', 'btree_gist', 'citext', 'cube', 'dblink', 'dict_int', 'dict_xsyn', 'earthdistance', 'file_fdw', 'fuzzystrmatch', 'hstore', 'hstore_plperl', 'hstore_plperlu', 'hstore_plpython3u', 'insert_username', 'intagg', 'intarray', 'isn', 'jsonb_plperl', 'jsonb_plperlu', 'jsonb_plpython3u', 'lo', 'ltree', 'ltree_plpython3u', 'moddatetime', 'pageinspect', 'pg_buffercache', 'pg_freespacemap', 'pg_prewarm', 'pg_stat_statements', 'pg_trgm', 'pg_visibility', 'pgcrypto', 'pgrowlocks', 'pgstattuple', 'plperl', 'plperlu', 'plpgsql', 'pltcl', 'pltclu', 'postgres_fdw', 'refint', 'seg', 'sslinfo', 'tablefunc', 'tcn', 'timetravel', 'tsm_system_rows', 'tsm_system_time', 'unaccent', 'uuid-ossp', 'xml2', 'bool_plperlu', 'bool_plperl', 'rum', 'oid2name', 'online_analyze', 'pg_backup', 'pg_standby', 'protected_dump', 'pg_profile', 'orafce', 'pg_squeeze', 'pg_cron', 'pg_repack', 'pgse_backup', 'pg_hint_plan', 'pg_outline', 'oracle_fdw', 'tds_fdw', 'psql_lockmon', 'pg_stat_kcache', 'psql_rotate_password', 'fasttrun', 'fulleq', 'mchar', 'psql_diagpack', 'pg_store_plans', 'pg_orphaned', 'psql_resources_consumption_limits') and extname not in ('pg_repack', 'timescaledb'))
LOOP
RAISE NOTICE 'Update extension %', r;
EXECUTE FORMAT('ALTER EXTENSION %I UPDATE;', r);
END LOOP;
FOR r IN (SELECT extname FROM pg_catalog.pg_extension WHERE extname = 'pg_repack')
LOOP
RAISE NOTICE 'Update extension %', r;
EXECUTE FORMAT('DROP EXTENSION IF EXISTS %I;', r);
EXECUTE FORMAT('CREATE EXTENSION IF NOT EXISTS %I WITH SCHEMA ext;', r);
END LOOP;
END $$; -
Создайте временный файл
run_update_extentions.sh
и поместите его в/home/postgres/
:databases=($($PG_HOME/bin/psql -t --csv -c "SELECT datname FROM pg_database WHERE datname NOT LIKE 'template0';"))
echo "databases: " $databases
for ud in "${databases[@]}"; do
echo "database: " $ud
$PG_HOME/bin/psql -d $ud -f /home/postgres/ext_update.sql
done
if [ $? -eq 0 ]
then
echo "All extentions have updated on nodes"
else
echo "There were some problems during proccess updating"
exit 1
fi
" > /home/postgres/run_update_extentions.sh
exit -
Запустите sh-скрипт
run_update_extentions.sh
:sudo -iu postgres
chmod 0700 run_update_extentions.sh
cd ~/
PG_LICENSE_PATH=/opt/pangolin_license PG_HOME=/usr/pangolin-dbms-client PGHOST=127.0.0.1 PGPORT=5433 ./run_update_extentions.sh
rm -f /home/postgres/run_update_extentions.sh /home/postgres/ext_update.sql
exitВнимание!Произведите выключение блокировки трафика и запуск службы
crond
, если ранее они были выключены.
Шаг 17. Обновление каталога безопасности
В случае кластерной конфигурации произведите действия на мастере.
-
Добавьте временный параметр
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
-
-
Произведите
reload
иrestart
СУБД в зависимости от конфигурации:-
Для конфигурации без Pangolin Manager:
sudo su - postgres
/usr/pangolin/bin/pg_ctl reload -D /pgdata/data/data
/usr/pangolin/bin/pg_ctl restart -D /pgdata/data/data
exit -
Для конфигурации 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
-
-
Выполните следующую команду в каждой БД поочередно, кроме БД с включенным флагом
datallowconn
. <DB> - заменить на название базы данных:sudo su - postgres
psql -c "SELECT NOW()" -d <DB>
exit -
Удалите временный параметр
enable_protection_catalogs_upgrade
из конфигурационного файла, в зависимости от конфигурации, под пользователем postgres, с помощью обычного текстового редактора. И произведитеreload
иrestart
СУБД в зависимости от конфигурации:-
Для конфигурации без Pangolin Manager:
sudo su - postgres
/usr/pangolin/bin/pg_ctl reload -D /pgdata/data/data
/usr/pangolin/bin/pg_ctl restart -D /pgdata/data/data
exit -
Для конфигурации 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
-