Ручное обновление исполняемых файлов СУБД 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) введите компонент в режим паузы:
sudo -iu postgres patronictl -c /etc/patroni/postgres.yml edit-config --set 'pause=true' --force exitsudo -iu postgres pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml edit-config --set 'pause=true' --force exitОстановите все компоненты СУБД Pangolin. Перед остановкой необходимо выполнить команду
CHECKPOINTна мастере. В случае кластерной конфигурации действия по остановке произведите сначала на реплике, затем на мастере:Для конфигурации без Pangolin Manager:
sudo systemctl stop postgresqlДля конфигурации с Pangolin Manager:
sudo -iu postgres pg_ctl stop exit sudo systemctl stop patroni sudo systemctl stop pangolin-managerДля конфигурации с etcd:
sudo systemctl stop etcdДля любой конфигурации:
sudo systemctl stop pangolin-pooler sudo systemctl stop pangolin_reencrypt@postgres.service sudo systemctl stop pangolin_reencrypt@kmadmin_pg.service sudo systemctl stop pg_certs_rotate_agent.service sudo systemctl stop pangolin-certs-rotate sudo systemctl stop pangolin-auth-reencrypt@postgres sudo systemctl stop pangolin-auth-reencrypt@kmadmin_pg
Для конфигурации с etcd:
sudo systemctl stop etcd sudo -iu postgresДля конфигурации с Pangolin Manager:
pg_ctl stop systemctl --user stop pangolin-managerДля конфигурации без Pangolin Manager:
systemctl --user stop postgresqlДля любой конфигурации:
systemctl --user stop pangolin-pooler systemctl --user stop pangolin-certs-rotate systemctl --user stop pangolin-auth-reencrypt exit sudo -iu kmadmin_pg export XDG_RUNTIME_DIR=/run/user/$(id -u) export DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus" systemctl --user stop pangolin-auth-reencrypt exit
Проверьте, что все компоненты корректно остановлены:
sudo ps aux | grep -E "pgbouncer|pangolin-pooler|pangolin-manager|patroni|postgresql|pangolin-certs-rotate|pg_certs_rotate_agent|pangolin-auth-reencrypt|pangolin_reencrypt|etcd" | grep -v grepЕсли команда на шаге 3 вернула результат, то выполните следующее:
sudo kill -9 <pid> sudo ps aux | grep -E "pgbouncer|pangolin-pooler|pangolin-manager|patroni|postgresql|pangolin-certs-rotate|pg_certs_rotate_agent|pangolin-auth-reencrypt|pangolin_reencrypt|etcd" | grep -v grep
Шаг 3. Обновление компонента 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 в зависимости от конфигурации выполните:
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 на мастере:
Для любой конфигурации:
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
Произведите проверку состояния служб на мастере:
Для конфигурации с 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 на реплике:
Для любой конфигурации:
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
Произведите проверку состояния служб на реплике:
Для конфигурации с 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