Обновление при помощи 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 DBMS и версии всех утилит, входящих в состав продукта.
При обновлении происходит процесс слияния пользовательских настроек и настроек, отвечающих требованиям новой версии СУБД, в конфигурационных файлах:
postgres.yml
(в случае кластерной конфигурации);pangolin-pooler.ini
(в случае наличия компонента Pangolin Pooler);pg_hba.conf
;postgresql.conf
(в случае решения standalone).
При обновлении с pgbouncer
на Pangolin Pooler
до обновления patroni
на Pangolin Manager
необходимо:
-
проверить наличие файла
/etc/patroni/reload_pgbouncer.sh
; -
изменить содержимое файла:
cтроку
sudo systemctl restart pgbouncer
заменить наsudo systemctl restart pangolin-pooler
.
В случае ошибки при обновлении срабатывает механизм прерывания работы обновления версии СУБД, позволяющий остановить процесс обновления и вернуть версию СУБД в состояние до обновления.
Перед запуском скрипта обновления добавьте в файлы sudoerc
основного узла, реплики и арбитра строку user_ansible ALL=(ALL:ALL) NOPASSWD: ALL
.
Процесс обновления при помощи Ansible плейбуков состоит из двух шагов:
- Запуск проверки готовности к обновлению с помощью скрипта-разведчика.
- Запуск сценария обновления с помощью скрипта обновления.
Проверка готовности к обновлению
Проверка по данному сценарию выполняется, если обновление происходит при помощи Ansible плейбука. В случае обновления с использованием Pangolin Installer проверка готовности к обновлению выполняется автоматически.
Автоматизированная проверка готовности к обновлению происходит при помощи запуска скрипта-разведчика (scouting
). Описание запуска скрипта описано в одноименном разделе «Проверка готовности к обновлению».
Запуск сценария обновления
После успешной проверки готовности к обновлению переходите к запуску сценария. Чтобы запустить обновление при помощи Ansible плейбука, выполните следующие действия:
-
Скачайте и распакуйте дистрибутив новой версии СУБД Pangolin.
-
Перейдите в каталог с распакованным дистрибутивом, а затем в каталог
installer
. -
Перед запуском обновления заполните файл
hosts.ini
в зависимости от установленного решения добавив информацию о хостах и учетных данных пользователя, которые будет использовать Ansible.Данные должны содержать те же параметры, что и при установке. Примеры заполнения файлов описаны в разделе «Автоматизированная установка при помощи Ansible плейбука».
-
Заполните настраиваемый конфигурационный файл
custom_file_sample.yml
.Предупреждение!При обновлении в секции
3.1.HBA RULES
не поддерживаются следующие параметры:ldap_tls
;cert_dir
;openldap_config
.
-
Запустите Ansible плейбук. Далее приведены примеры Ansible сценариев для обновления различных конфигураций:
- для cluster-конфигурации
- для решения standalone
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_ansible_log
конфигурационного файлаcustom_config_initial.yml
, будет сгенерирован файл с названием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/0X.00X.0X/2025-02-27-T1627/pangolin_dbms/pgdata/0{base_version}/data/postgresql.conf завершился успешно.__RLM.INFO
- RLM.INFO__I01009:Процесс мержа конфигурационного файла /pgarclogs/backups/0X.00X.0X/2025-02-27-T1627/pangolin_dbms/pgdata/0{base_version}/data/pg_hba.conf завершился успешно. __RLM.INFO
- RLM.INFO__I01009:Процесс мержа конфигурационного файла /pgarclogs/backups/0X.00X.0X/2025-02-27-T1627/pangolin_dbms/pgdata/0{base_version}/data/postgresql.base.conf завершился успешно.__RLM.INFO
- RLM.INFO__I01009:Процесс мержа конфигурационного файла /pgarclogs/backups/0X.00X.0X/2025-02-27-T1627/pangolin_dbms/pgdata/0{base_version}/data/postgresql.auto.conf завершился успешно.__RLM.INFO
- RLM.INFO__I03007:Процесс обновления системных каталогов завершился успешно.__RLM.INFO
...
- RLM.OK__S05001:Обновление успешно завершено.__RLM.OK
Дальнейшие шаги
Для проверки успешности завершения обновления рекомендуется обратиться к шагам «Проверки результата» в общем блоке автоматизированного обновления.