Ручное обновление исполняемых файлов СУБД Pangolin
Данный раздел рассматривает ручное обновление исполняемых файлов СУБД Pangolin.
Перед началом обновления необходимо знать особенности, в связи с изменением формата WAL-файлов:
- При обновлении стенда кластерной конфигурации, перед началом обновления необходимо выключить все узлы кластера во избежание фоновых записей старого формата, которые при старте уже обновленного узла считаются некорректными.
Перед началом выполнения инструкции необходимо убедиться, что 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. Подготовка (обязательно);
- Шаг 2. Остановка компонентов СУБД Pangolin (обязательно);
- Шаг 3. Обновление компонента pangolin-auth-reencrypt (опционально, выполните в случае использования компонента);
- Шаг 4. Обновление компонента pangolin-certs-rotate (опционально, выполните в случае использования компонента);
- Шаг 5. Обновление компонентов безопасности (pangolin-security-utilities) (опционально, выполните в случае использования компонента);
- Шаг 6. Обновление компонента pangolin-diagnostic-tool (опционально, выполните в случае использования компонента);
- Шаг 7. Обновление компонента резервного копирования (pangolin-backup-tools) (опционально, выполните в случае использования компонента);
- Шаг 8. Обновление компонента Pangolin Pooler (опционально, выполните в случае использования компонента);
- Шаг 9. Обновление компонента Pangolin Manager (опционально, выполните в случае кластерной конфигурации);
- Шаг 10. Обновление компонента серверной части (pangolin-dbms) (обязательно);
- Шаг 11. Обновление компонента клиентской части (pangolin-dbms-client) (обязательно);
- Шаг 12. Переустановка файлов компонента pangolin-timescaledb (опционально, выполните в случае использования расширения);
- Шаг 13. Дополнительные действия (обязательно);
- Шаг 14. Запуск утилиты обновления системных данных каталога СУБД Pangolin (обязательно);
- Шаг 15. Запуск компонентов СУБД Pangolin (обязательно);
- Шаг 16. Обновление расширений (опционально, в случае наличия расширений);
- Шаг 17. Обновление каталога безопасности (обязательно, выполните в случае использования компонента);
- Шаг 18. Обновление компонента timescaledb (опционально, выполните в случае использования расширения);
- Шаг 19. Обновление компонента pangolin-auth-password (опционально, выполните в случае использования компонента);
- Шаг 20. Обновление компонента Pangolin Tuner (опционально, выполните в случае использования компонента);
- Шаг 21. Обновление опциональных пакетов (опционально, выполните в случае использования libpq-части);
- Шаг 22. Завершающие действия (обязательно).
Шаг 1. Подготовка (обязательно)
Подготовьте дистрибутив и проверьте необходимость обновления системных данных каталога. Корректное выполнение этого этапа определяет необходимость последующих действий по обновлению.
Действия по подготовке СУБД
-
Скачайте дистрибутив в рабочий каталог и распакуйте его. Далее по инструкции путь к компонентам дистрибутива будет формироваться по
~/pangolin:mkdir -p ~/pangolin
tar -xzvf pangolin_7.tar.gz -C ~/pangolin -
Перед началом обновления убедитесь, в необходимости обновления системных данных каталога. Запустите команду из примера ниже на мастере и на реплике:
СведенияКлючи
-tи-T, в режимеinfo, следует использовать с директорией/директориями старой версии. Подробнее о ключах, смотрите в справке к утилитеinplace_upgradeexport 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». -
Для кластерной конфигурации. Добавьте временный физический слот репликации на мастере:
-
Проверьте наличие заданных слотов репликации в конфигурации DCS:
sudo -iu postgres
/opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml show-config -
Создайте отдельный файл
ignore_slots.jsonи при необходимости добавьте существующие слоты репликации. Формат файла должен быть следующим:ignore_slots:
- <replication_slots>Где
<replication_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/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 перед обновлением. Этот шаг обязателен для предотвращения повреждения данных и корректного выполнения процесса обновления.
Действия по остановке компонентов СУБД
-
В случае конфигурации с Pangolin Manager введите компонент в режим паузы на мастере:
sudo -iu postgres
pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml edit-config --set 'pause=true' --force
exit -
Остановите все компоненты СУБД Pangolin. Перед остановкой необходимо выполнить команду
CHECKPOINTна мастере. В случае кластерной конфигурации действия по остановке произведите сначала на реплике, затем на мастере:- Без функциональности «Отказ от root»
- С включенной функциональностью «Отказ от root»
-
Для конфигурации без 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
-
Для конфигурации с Pangolin Manager:
sudo -iu postgres
/opt/pangolin-dbms-server-7/bin/pg_ctl stop -D $PGDATA
systemctl --user stop pangolin-manager -
Для конфигурации без Pangolin Manager:
-
в случае отсутствия
pangolin-dbms.service:sudo -iu postgres
/opt/pangolin-dbms-server-7/bin/pg_ctl stop -D $PGDATA -
с наличием файла
pangolin-dbms.service:sudo -iu postgres
systemctl --user stop pangolin-dbms
-
-
Для любой конфигурации:
sudo -iu postgres
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 "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) (опционально)
Действия по обновлению компонентов безопасности
-
Произведите обновление пакета компонента (
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, произведите дополнительно обновление на узле арбитр.
-
(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
- Кластерная конфигурация
-
С помощью утилиты
pg_dump_generate_secret_fileсоздайте файл для хранения ключа засекречивания:sudo /opt/pangolin-security-utilities/bin/pg_dump_generate_secret_file
-
(master) С помощью утилиты
generate_encryption_keyсоздайте ключ засекречивания, который далее будет использоваться для создания файла с ключом засекречивания:sudo /opt/pangolin-security-utilities/bin/generate_encryption_key -
(master, replica) Создайте файл для хранения ключа засекречивания:
sudo /opt/pangolin-security-utilities/bin/pg_dump_generate_secret_file -t BASE64 -m -
(master, replica) Введите сгенерированный в пункте 1 ключ.
Шаг 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-расширениям».
-
Распакуйте архив, содержащий untrusted-расширения:
tar -zxf untrusted/untrusted.tar.gz -C untrusted -
Переустановите пакет расширения:
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.
Дополнительные действия
-
Актуализируйте
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».
Действия по обновлению системных данных каталога
-
Заблокируйте трафик на всех хостах СУБД, убедитесь в отсутствии активных внешних подключений, в течение всего процесса обновления.
-
Добавьте в конец конфигурационного файла
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 -
Произведите запуск обновления системных данных на мастере:
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.
===================================================Внимание!В случае, если на мастере обновление прошло неуспешно, произведите восстановление по инструкции «Восстановление после неудачного обновления исполняемых файлов». Все дальнейшие шаги данной инструкции необходимо пропустить.
-
Произведите запуск обновления системных данных на реплике, если кластерная конфигурация и обновления на основном узле прошло успешно.
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.
===================================================Внимание!В случае, если на мастере обновление прошло неуспешно, произведите восстановление по инструкции «Восстановление после неудачного обновления исполняемых файлов». Все дальнейшие шаги данной инструкции необходимо пропустить.
-
Произведите удаление утилиты
pangolin-inplace-upgrade:sudo dnf remove -y pangolin-inplace-upgrade
Шаг 15. Запуск компонентов СУБД Pangolin (обязательно)
Запустите все компоненты СУБД Pangolin после обновления. Этот шаг обязателен для возобновления работы СУБД и проверки корректности выполненного обновления.
Действия по запуску компонентов СУБД 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:
-
в случае отсутствия
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
-
Для любой конфигурации:
sudo systemctl --user restart user@$(id -u postgres)
sudo systemctl --user restart user@$(id -u kmadmin_pg) -
Для конфигурации с 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 pangolin-dbms.service -
Для любой конфигурации:
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:
-
в случае отсутствия
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
-
Для конфигурации с Pangolin Manager:
sudo -iu postgres
systemctl --user status pangolin-manager -
Для конфигурации без Pangolin Manager:
sudo -iu postgres
systemctl --user status pangolin-dbms -
Для любой конфигурации:
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:
-
в случае отсутствия
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
-
Для любой конфигурации:
sudo systemctl --user restart user@$(id -u postgres)
sudo systemctl --user restart user@$(id -u kmadmin_pg) -
Для конфигурации с 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 pangolin-dbms.service -
Для любой конфигурации:
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:
-
в случае отсутствия
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
-
Для конфигурации с Pangolin Manager:
sudo -iu postgres
systemctl --user status pangolin-manager -
Для конфигурации без Pangolin Manager:
sudo -iu postgres
systemctl --user status pangolin-dbms -
Для любой конфигурации:
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под пользователем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 $$; -
Создайте временный файл
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 -
Запустите 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. Обновление каталога безопасности (обязательно)
Выполните обновление каталога безопасности. Этот шаг обязателен для применения всех изменений в механизмах защиты данных.
Действия по обновлению каталога безопасности
В случае кластерной конфигурации произведите действия на мастере.
-
Добавьте временный параметр
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:
-
в случае отсутствия
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
-
-
Выполните следующую команду в каждой БД поочередно, кроме БД с включенным флагом
datallowconn. <DB> - заменить на название базы данных:sudo su - postgres
psql -c "SELECT NOW()" -d <DB>
exit -
Удалите временный параметр
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
-
Произведите обновление пакета компонента (
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 -
Зарегистрируйте новую версию расширения:
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
- Произведите выключение блокировки трафика и запуск службы
crond, если ранее они были выключены. - В случае использования ОС Astra Linux «Смоленск» выполните действия описанные в разделе особенностей работы с данной ОС.