Автоматизированное обновление СУБД Pangolin#
При переходе к данному разделу предполагается, что изучена информация общего блока «Обновление».
Автоматизированное обновление следует запускать на отдельном хосте не входящем в кластер СУБД Pangolin.
Автоматизированное обновление поддерживает все типы обновления: с переносом данных, исполняемых файлов с обновлением данных системных каталогов и без.
Перед запуском Ansible плейбука, либо перед началом использования инструмента Pangolin Installer, необходимо убедиться, что на всех узлах, в том числе и на том, с которого планируется запуск автоматизированного обновления, установлен пакет python версии 3 и выше.
Выбор способа обновления#
Автоматизированное обновление СУБД, как и автоматизированная установка, доступно двумя вариантами:
Запуск Ansible плейбуков предназначен больше для инженеров. Он более нативный и может использоваться, например, при интеграции его в работу собственных автоматизированных сценариев пользователя.
Запуск обновления с помощью инструмента Pangolin Installer предназначен скорее для пользователей, которые хотят максимально упростить все процессы по использованию сценариев и не погружаться в тонкости их запуска. Инструмент предоставляет интуитивный запуск сценария, не требующего от пользователя никаких дополнительных шагов, кроме установки rpm/deb-пакета инструмента с помощью пакетного менеджера.
Воспользуйтесь одной из предложенных инструкций, в зависимости от выбора сценария:
Внимание
Перед выполнением обновления рекомендуется сделать резервную копию базы данных до начала всех работ, чтобы избежать возможных проблем и иметь возможность откатиться к первоначальному состоянию в случае их возникновения.
Обновление при помощи Ansible плейбуков#
Описание#
В составе дистрибутива (папка installer) расположены два скрипта, для обновления:
Скрипт-разведчик — скрипт проверки перед обновлением.
Скрипт-обновление — основной скрипт, при запуске которого происходит установка обновления.
Процесс разведки и обновления может осуществляться по различным алгоритмам, существенно различающимися по времени выполнения и сложности (зависит от объема и типа изменений между версиями):
Обновление, при котором осуществляется замена старых файлов (исполняемых, конфигурационных, файлов расширений) на их обновленные версии, и/или добавляются новые утилиты, которые отсутствовали в предыдущих версиях. Характеризуется малым временем выполнения и возможностью обновления без прерывания работы сервиса.
Обновление, при котором, помимо обновления файлов, осуществляется изменение структуры или состава данных в системных каталогах обновляемых БД. Характеризуется дополнительным набором предварительным проверок, обновлением с прерыванием работы сервиса и рекомендацией по созданию резервной копии перед обновлением.
Примечание:
Под изменением структуры или состава данных понимается:
изменение состава системных таблиц;
изменение состава системных представлений;
изменение состава системных функций;
изменение списка встроенных типов данных;
изменение формата хранения данных (включая изменения в алгоритме шифрования).
Изменение мажорной версии оригинального ядра PostgreSQL в основе СУБД Pangolin требует дополнительных проверок и ограничений.
Общая информация о сценарии разведки#
Сценарий обновления состоит из обязательного запуска сценария разведки, в ходе которого пользователь получает всю необходимую ему информацию о состоянии текущего стенда с СУБД, и непосредственно сценария обновления, который можно запускать только когда разведчик выдает «success» сообщение.
Перед началом обновления запустите скрипт-разведчик, который:
выводит список установленных
extensions(в процессе обновления они не будут перенесены в новую версию СУБД Pangolin):сторонние/не входящие в текущую версию продукта СУБД Pangolin;
запрещенные расширения;
расширения, несовместимые с новой версией СУБД Pangolin;
полный список ограничений, для администраторов автоматизированной системы (в случае их наличия).
проверяет:
возможность создания резервной копии (для обновления с переносом данных). Локальная РК является необходимым условием для работы механизма автоматического отката к исходной версии СУБД в случае возникновения любых внештатных ситуаций в процессе работы механизма обновления;
Внимание!
Если в настраиваемом конфигурационном слое параметр, отвечающий за создание резервного копирования, будет выключен, то в случае ошибок в процессе обновления ответственность за сохранность данных и восстановление исходной версии СУБД находится на стороне владельца настраиваемого конфигурационного слоя.
наличие дубликатов в конфигурационном файле Pangolin Manager (
postgres.yml);наличие специальных символов в конфигурационных файлах
postgres.yml,pg_hba.conf,postgresql.conf;количество транзакций с незавершенным статусом;
состояние БД на наличие близости к пороговому значению заморозки транзакций
autovacuum_freeze_max_age;полный список проверок представлен в разделе «Проверка готовности к обновлению».
В процессе обновления будет обновлена СУБД Pangolin и версии всех утилит, входящих в состав продукта.
При обновлении происходит процесс слияния пользовательских настроек и настроек, отвечающих требованиям новой версии СУБД, в конфигурационных файлах:
postgres.yml(в случае наличия Pangolin Manager);pangolin-pooler.ini(в случае наличия Pangolin Pooler);pg_hba.conf;postgresql.conf.
Важно!
При обновлении с pgbouncer на Pangolin Pooler до обновления patroni на Pangolin Manager необходимо:
проверить наличие файла
/etc/patroni/reload_pgbouncer.shизменить содержимое файла:
строку
sudo systemctl restart pgbouncerзаменить наsudo systemctl restart pangolin-pooler
В случае ошибки при обновлении срабатывает механизм прерывания работы обновления версии СУБД, позволяющий остановить процесс обновления и вернуть версию СУБД в состояние до обновления.
Примечание:
Перед запуском скрипта обновления добавьте в файлы
sudoercосновного узла, реплики и арбитра строкуuser_ansible ALL=(ALL:ALL) NOPASSWD: ALL. –>
Процесс обновления при помощи Ansible плейбуков состоит из двух шагов:
Запуск проверки готовности к обновлению с помощью скрипта-разведчика.
Запуск сценария обновления с помощью скрипта обновления.
Проверка готовности к обновлению#
Проверка по данному сценарию выполняется, если обновление происходит при помощи Ansible плейбука. В случае обновления с использованием Pangolin Installer проверка готовности к обновлению выполняется автоматически.
Автоматизированная проверка готовности к обновлению происходит при помощи запуска скрипта-разведчика (scouting).
Информация о проверках и возможных ошибках, а также описание запуска скрипта описана в одноименном разделе «Проверка готовности к обновлению».
Запуск сценария обновления#
Чтобы выполнить обновление при помощи Ansible плейбука:
Перейдите в каталог с распакованным дистрибутивом, а затем в каталог
installer.Перед запуском обновления заполните файл
hosts.iniв зависимости от установленного решения добавив информацию о хостах и учетных данных пользователя, которые будет использовать Ansible.Данные должны содержать те же параметры, что и при установке. Примеры заполнения файлов описаны в разделе «Автоматизированная установка при помощи Ansible-плейбука».
Заполните настраиваемый конфигурационный файл
custom_file_sample.yml.Предупреждение
При обновлении в секции
3.1.HBA RULESне поддерживаются следующие параметры:ldap_tls;cert_dir;openldap_config.
Запустите Ansible плейбук.
Далее приведены примеры Ansible сценариев для обновления различных решений:
ansible-playbook playbook_updates.yaml \ -i inventories/cluster/hosts.ini \ -t always,cluster \ --ask-vault-pass \ -vv \ -e '{"update_complexity_level": "update_complexity_level_2"}' \ -e '{"is_inner_full_backup": true}' --extra-vars "local_distr_path=${} \ custom_config=${}" \ansible-playbook playbook_updates.yaml \ -i inventories/standalone/hosts.ini \ -t always,standalone \ --ask-vault-pass \ -vv \ -e '{"update_complexity_level": "update_complexity_level_2"}' \ -e '{"is_inner_full_backup": true}' --extra-vars "local_distr_path=${} \ custom_config=${}" \Описание параметров:
custom_config- абсолютный путь к файлу конфигурацииcustom_config_sample.yml;update_complexity_level- тип обновления (распознается при запуске скрипта-разведчика);is_inner_full_backup- отвечает за создание резервной копии;local_distr_path- абсолютный путь к загруженному и распакованному дистрибутиву Pangolin.
Значения используемых в команде запуска Ansible ключей:
-i- путь к inventory-файлу;-e- переменная для передачи;--extra-vars- переменные, которые по приоритету важнее переменных из inventory;-t- теги для запуска;-v- уровень логирования Ansible. Может быть, как пустым, так и -vvvvvv, где запуск без v - минимальное логирование.
После завершения обновления в его директории
/var/log/pangolin_ansible_logs/будет сгенерирован файл с названиемpangolin_update_<date>.log. В нем будет отображаться состояние корректности установленных обновлений.Ниже приведен пример данного файла с конфигурации продукта standalone:
msg: - RLM.INFO__I01001:Версия ansible корректная.__RLM.INFO - RLM.INFO__I01008:Проверка ОС прошла успешно. Текущая ОС SberLinux.__RLM.INFO - RLM.INFO__I01002:Версия 8.8 корректная.__RLM.INFO - RLM.INFO__I03005:Процесс обновления исполняемых файлов будет сопровождаться запуском скрипта обновления системных данных. Работа скрипта подразумевает полную недоступность кластера до конца работы сценария.__RLM.INFO - RLM.INFO__I05020:Все необходимые RPM/DEB пакеты для установки или обновления/восстановления найдены.__RLM.INFO - RLM.INFO__I01005:Файл лицензии license.json найден.__RLM.INFO - RLM.INFO__I01006:Лицензия валидна.__RLM.INFO - RLM.INFO__I01009:Процесс мержа конфигурационного файла /pgarclogs/backups/06.004.00/2025-02-27-T1627/pangolin_dbms/pgdata/06/data/postgresql.conf завершился успешно.__RLM.INFO - RLM.INFO__I01009:Процесс мержа конфигурационного файла /pgarclogs/backups/06.004.00/2025-02-27-T1627/pangolin_dbms/pgdata/06/data/pg_hba.conf завершился успешно. __RLM.INFO - RLM.INFO__I01009:Процесс мержа конфигурационного файла /pgarclogs/backups/06.004.00/2025-02-27-T1627/pangolin_dbms/pgdata/06/data/postgresql.base.conf завершился успешно.__RLM.INFO - RLM.INFO__I01009:Процесс мержа конфигурационного файла /pgarclogs/backups/06.004.00/2025-02-27-T1627/pangolin_dbms/pgdata/06/data/postgresql.auto.conf завершился успешно.__RLM.INFO - RLM.INFO__I03007:Процесс обновления системных каталогов завершился успешно.__RLM.INFO ... - RLM.OK__S05001:Обновление успешно завершено.__RLM.OK
Обновление при помощи инструмента Pangolin Installer#
Обновление при помощи инструмента Pangolin Installer проходит по такому же сценарию, как и обновление при помощи Ansible плейбуков, но требует меньше действий и погружения в процесс. Все те же проверки и типы обновления реализуются «внутри» данного инструмента.
Подготовка к обновлению#
Шаг 1. Подготовка дистрибутива#
Предварительно скачайте и распакуйте дистрибутив новой версии.
Шаг 2. Установка утилиты Pangolin Installer#
Установите rpm-пакет
pangolin-installer-beta:sudo dnf install pangolin-installer-{version_component}-{OS}.x86_64.rpmsudo yum install pangolin-installer-{version_component}-{OS}.x86_64.rpmsudo apt install pangolin-installer-{version_component}_amd64.debsudo apt-get install pangolin-installer-{version_component}-{OS}.x86_64.rpmПример заполненной команды:
cd distributive sudo dnf install installer/utilities/pangolin-installer-beta-1.0.0-sberlinux8.x86_64.rpm
Шаг 3. Ознакомление с параметрами Pangolin Installer (опциональный)#
Для вывода на экран справки по Pangolin Installer в режиме terminal выполните команду:
pangolin-installer terminal --help
Вывод команды pangolin-installer terminal --help
Использование: pangolin-installer terminal [-h] [--version] [--debug] -c CONFIG [-a {info,install,clean,updates,scouting,configure_roles}] [-v] [--no_archive_logs] [--force] [--vault-password-file VAULT_PASSWORD_FILE]
Опции:
-h, --help Вывести справку по команде
--version Версия pangolin-installer
--debug Включить функцию дебага pangolin-installer – подробное сообщение о процессе выполнения (по умолчанию=False)
-c CONFIG, --config CONFIG Путь до конфигурационного файла
-a {info,install,clean,updates,scouting,configure_roles}, --action {info,install,clean,updates,scouting,configure_roles}
Тип действий для запуска процесса установки или обновления (не обязательный параметр, по умолчанию работает автоопределение процесса установки). Поддерживаемые типы:
info - вывод информации о хосте и типе автоопределенного action
install - запуск процесса установки
clean - запуск очистки стенда
updates - запуск обновление хоста
scouting - запуск процесса проверки перед обновлением
configure_roles - запуск процесса ролевой модели
-v Уровень логирования в ansible-playbook (по умолчанию=vvv)
--no_archive_logs Выключить архивирование директории с логами (по умолчанию=False)
--force Принудительно запускать action (по умолчанию=False)
--vault-password-file VAULT_PASSWORD_FILE
Путь до файла vault, который нужен для запуска ansible-playbook
Запуск сценария обновления#
Обновление СУБД Pangolin через Pangolin Installer подразумевает под собой этапы:
Инициализация и заполнение конфигурационного файла Pangolin Installer.
Проверка готовности к обновлению (выполняется автоматически).
Завершение обновления СУБД (вывод информации утилиты о результате выполнения обновления).
Шаг 1. Инициализация и заполнение конфигурационного файла Pangolin Installer#
Выполните команду инициализации конфигурационного файла:
pangolin-installer init -t/--terminalВ результате выполнения команды создается начальный конфигурационный файл
config.yml, предназначенный для дальнейшей настройки.Отредактируйте созданный файл
config.ymlс помощью текстового редактора.Обозначения
Заполните информацию о конечных узлах и параметрах подключения:
В поле
hosts, заполните параметры хостов (ip/dns,password,usersname).В
local_distr_pathукажите полный путь к дистрибутиву новой версии.В
pangolin_license_pathукажите полный путь до лицензионного файла с названием файла. Пример:/home/admin/distributive/license.json.
Пример настроенного конфигурационного файла
config.yaml:hosts: master: hostname: <ip-address> password: password username: user replica: hostname: <ip-address> password: password username: user arbiter: hostname: <ip-address> password: password username: user local_distr_path: /home/admin/distributive pangolin_license_path: /home/admin/distributive/license.jsonhosts: master: hostname: <ip-address> password: password username: user1 local_distr_path: /home/admin/distributive pangolin_license_path: /home/admin/distributive/license.jsonВ случае установки standalone конфигурации необходимо удалить параметры хостов replica и arbiter, аналогично примеру.
Шаг 2. Запуск процесса обновления#
Запустите процесс обновления Pangolin. Выполните команду:
pangolin-installer terminal -c config.yml -a updatesВозможные параметры запуска установки:
флаг
-cпредполагает заполнение пути до конфигурационного файла;без указания атрибута
-aбудет запущено автоопределение процесса действий установка/обновление;если указан флаг
-a install– будет запущен процесс установки/переустановки;если указан флаг
-a updates– будет запущен процесс обновления.
Во время запуска проверки перед обновлением и самим обновлением, утилитой будет выведена информация о ходе выполнения этапов.
Пример вывода:
Вывод об успешном обновлении stanalone конфигурации
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | scouting | +----------------------+---------+-----+-------+---------------------------+-----------+------------+-----------------------------------+---------------------------+---------------+ | Node | Action | CPU | MEM | Disk available | OS | Version OS | Packages Installed | Packages Update | Configuration | +----------------------+---------+-----+-------+---------------------------+-----------+------------+-----------------------------------+---------------------------+---------------+ | node: master | updates | 4 | 12 GB | /dev 5.9G | SberLinux | 8.8 | pangolin-pooler (1.3.0) | pangolin-pooler (1.5.0) | standalone | | ip/dns: (IP-address) | | | | /dev/shm 5.9G | | | platform-v-pangolin-dbms (6.1.9) | pangolin-dbms-6.5 (6.5.0) | | | | | | | /run 5.9G | | | pangolin-timescaledb-6.1 (2.14.2) | | | | | | | | /sys/fs/cgroup 5.9G | | | | | | | | | | | / 45G | | | | | | | | | | | /boot 668M | | | | | | | | | | | /tmp 4.6G | | | | | | | | | | | /run/user/1002 1.2G | | | | | | +----------------------+---------+-----+-------+---------------------------+-----------+------------+-----------------------------------+---------------------------+---------------+ Выполняемая задача: scouting 🟢 Роль MAIN PLAY - Завершена! [Время выполнения: 0:06:52] Задач выполнено: 628 | | |####################################################################################################| 🟢 Роль COMMON - Завершена! [Время выполнения: 0:02:49] Задач выполнено: 335 | | |####################################################################################################| Success: S03001:Разведка перед обновлением успешно выполнена. +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | updates | +----------------------+---------+-----+-------+---------------------------+-----------+------------+-----------------------------------+---------------------------+---------------+ | Node | Action | CPU | MEM | Disk available | OS | Version OS | Packages Installed | Packages Update | Configuration | +----------------------+---------+-----+-------+---------------------------+-----------+------------+-----------------------------------+---------------------------+---------------+ | node: master | updates | 4 | 12 GB | /dev 5.9G | SberLinux | 8.8 | pangolin-pooler (1.3.0) | pangolin-pooler (1.5.0) | standalone | | ip/dns: (IP-address) | | | | /dev/shm 5.9G | | | platform-v-pangolin-dbms (6.1.9) | pangolin-dbms-6.5 (6.5.0) | | | | | | | /run 5.9G | | | pangolin-timescaledb-6.1 (2.14.2) | | | | | | | | /sys/fs/cgroup 5.9G | | | | | | | | | | | / 45G | | | | | | | | | | | /boot 668M | | | | | | | | | | | /tmp 4.6G | | | | | | | | | | | /run/user/1002 1.2G | | | | | | +----------------------+---------+-----+-------+---------------------------+-----------+------------+-----------------------------------+---------------------------+---------------+ Процедура проверки перед обновлением прошла успешно. Начать обновление? (Y/N): y Выполняемая задача: updates 🟢 Роль MAIN PLAY - Завершена! [Время выполнения: 0:00:13] Задач выполнено: 11 | | |####################################################################################################| 🟢 Роль PANGOLIN_CHECKS - Завершена! [Время выполнения: 0:13:29] Задач выполнено: 849 | | |####################################################################################################| 🟢 Роль COMMON - Завершена! [Время выполнения: 0:01:08] Задач выполнено: 142 | | |####################################################################################################| 🟢 Роль PANGOLIN_LICENSE - Завершена! [Время выполнения: 0:00:07] Задач выполнено: 6 | | |####################################################################################################| 🟢 Роль PANGOLIN_AUTH_REENCRYPT - Завершена! [Время выполнения: 0:00:52] Задач выполнено: 28 | | |####################################################################################################| 🟢 Роль PANGOLIN_CERTS_ROTATE - Завершена! [Время выполнения: 0:00:29] Задач выполнено: 29 | | |####################################################################################################| 🟢 Роль PANGOLIN_SECURITY_UTILITIES - Завершена! [Время выполнения: 0:00:12] Задач выполнено: 10 | | |####################################################################################################| 🟢 Роль PANGOLIN_MANAGER - Завершена! [Время выполнения: 0:00:00] Задач выполнено: 4 | | |####################################################################################################| 🟢 Роль PANGOLIN_DBMS - Завершена! [Время выполнения: 0:05:05] Задач выполнено: 147 | | |####################################################################################################| 🟢 Роль PANGOLIN_POOLER - Завершена! [Время выполнения: 0:00:27] Задач выполнено: 16 | | |####################################################################################################| 🟢 Роль PANGOLIN_TUNER - Завершена! [Время выполнения: 0:00:12] Задач выполнено: 9 | | |####################################################################################################| 🟢 Роль PANGOLIN_DIAGNOSTIC_TOOL - Завершена! [Время выполнения: 0:00:11] Задач выполнено: 10 | | |####################################################################################################| 🟢 Роль FINALLY - Завершена! [Время выполнения: 0:00:32] Задач выполнено: 29 | | |####################################################################################################| 🟢 Роль CONFIGURE - Завершена! [Время выполнения: 0:00:20] Задач выполнено: 45 | | |####################################################################################################| 🟢 Роль FINALLY - Завершена! [Время выполнения: 0:01:29] Задач выполнено: 92 | | |####################################################################################################| 🟢 Роль PANGOLIN_BACKUP_TOOLS - Завершена! [Время выполнения: 0:00:52] Задач выполнено: 100 | | |####################################################################################################| Success: S05001:Обновление успешно завершено. +---------------------------------------------------------------------------------+ | after updates | +----------------------+---------------+------------------------------------------+ | Node | Action | Packages Installed | +----------------------+---------------+------------------------------------------+ | node: master | after updates | pangolin-backup-tools (1.2.3) | | ip/dns: (IP-address) | | pangolin-pooler (1.5.0) | | | | pangolin-dbms-6.5 (6.5.0) | | | | pangolin-tuner (1.0.0) | | | | pangolin-auth-reencrypt (6.5.0) | | | | pangolin-dbms-6.5-client (6.5.0) | | | | pangolin-certs-rotate (6.5.0) | | | | pangolin-timescaledb-6.5-apache (2.14.2) | | | | pangolin-security-utilities (6.5.0) | | | | pangolin-diagnostic-tool (6.5.0) | | | | pangolin-ansible-venv-controlled (6.5.0) | | | | | +----------------------+---------------+------------------------------------------+
Обновление компонентов#
Обновление компонентов происходит во время сценария обновления СУБД.
Проверка результатов обновления#
Для проверки успешности обновления СУБД рекомендуется использовать чек-лист проверки корректности работы СУБД Pangolin.
Восстановление продукта после неудачного обновления#
Сценарий осуществляется автоматически, в случае возникновения проблемы, инструментом Pangolin Installer или Ansible плейбуком.
Пример сообщения из лог-файла:
RLM.FAIL__E05002:В процессе обновления возникла ошибка. Было произведено восстановление версии СУБД Pangolin до запуска обновления. Ознакомьтесь с логами.__RLM.FAIL