Перейти к основному содержимому

Автоматизированное обновление СУБД Pangolin

Сведения

При переходе к данному разделу предполагается, что изучена информация общего блока «Обновление».

Автоматизированное обновление следует запускать на отдельном хосте не входящем в кластер СУБД Pangolin.

Автоматизированное обновление поддерживает обновление исполняемых файлов с обновлением данных системных каталогов и без, а также обновление с переносом данных.

Важно

Перед запуском Ansible плейбука, либо перед началом использования инструмента Pangolin Installer, необходимо убедиться, что на всех узлах, в том числе и на том, с которого планируется запуск автоматизированного обновления, установлены все, необходимые для корректной работы, пакеты, указанные в разделе «Список пакетных зависимостей, требуемых для корректной работы Ansible-скриптов».

Выбор способа обновления

Автоматизированное обновление СУБД, как и автоматизированная установка, доступно двумя вариантами:

  • Запуск Ansible плейбуков предназначен больше для инженеров. Он более нативный и может использоваться, например, при интеграции его в работу собственных автоматизированных сценариев пользователя.
  • Запуск обновления с помощью инструмента Pangolin Installer предназначен скорее для пользователей, которые хотят максимально упростить все процессы по использованию сценариев и не погружаться в тонкости их запуска. Инструмент предоставляет интуитивный запуск сценария, не требующего от пользователя никаких дополнительных шагов, кроме установки rpm/deb-пакета инструмента с помощью пакетного менеджера.

Воспользуйтесь одной из предложенных инструкций, в зависимости от выбора сценария:

Внимание!

Перед выполнением обновления рекомендуется сделать резервную копию базы данных до начала всех работ, чтобы избежать возможных проблем и иметь возможность откатиться к первоначальному состоянию в случае их возникновения.

Пример

class: info Схемы процессов различных сценариев обновления СУБД Pangolin автоматизированными скриптами представлены в разделе «Схемы работы сценариев автоматизации СУБД Pangolin».

Обновление при помощи 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 плейбуков состоит из двух шагов:

  1. Запуск проверки готовности к обновлению с помощью скрипта-разведчика.
  2. Запуск сценария обновления с помощью скрипта обновления.

Проверка готовности к обновлению

Проверка по данному сценарию выполняется, если обновление происходит при помощи Ansible плейбука. В случае обновления с использованием Pangolin Installer проверка готовности к обновлению выполняется автоматически.

Автоматизированная проверка готовности к обновлению происходит при помощи запуска скрипта-разведчика (scouting).

Информация о проверках и возможных ошибках, а также описание запуска скрипта описана в одноименном разделе «Проверка готовности к обновлению».

Запуск сценария обновления

Чтобы выполнить обновление при помощи Ansible плейбука:

  1. Скачайте и распакуйте дистрибутив.

  2. Перейдите в каталог с распакованным дистрибутивом, а затем в каталог installer.

  3. Перед запуском обновления заполните файл hosts.ini в зависимости от установленного решения добавив информацию о хостах и учетных данных пользователя, которые будет использовать Ansible.

    Данные должны содержать те же параметры, что и при установке. Примеры заполнения файлов описаны в разделе «Автоматизированная установка при помощи Ansible-плейбука».

  4. Заполните настраиваемый конфигурационный файл custom_file_sample.yml.

    Предупреждение!

    При обновлении в секции 3.1.HBA RULES не поддерживаются следующие параметры:

    • ldap_tls;
    • cert_dir;
    • openldap_config.
  5. Запустите 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=${}" \

    Описание параметров:

    • 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

  1. Установите rpm-пакет pangolin-installer-beta:

    sudo dnf install pangolin-installer-{version_component}-{OS}.x86_64.rpm
    Подсказка

    Пример заполненной команды:

    cd distributive
    sudo dnf install installer/utilities/pangolin-installer-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 подразумевает под собой этапы:

  1. Инициализация и заполнение конфигурационного файла Pangolin Installer.
  2. Запуск сценария обновления.
  3. Проверка готовности к обновлению (выполняется автоматически).
  4. Завершение обновления СУБД (вывод информации утилиты о результате выполнения обновления).

Шаг 1. Инициализация и заполнение конфигурационного файла Pangolin Installer

  1. Выполните команду инициализации конфигурационного файла:

    pangolin-installer init -t/--terminal

    В результате выполнения команды создается начальный конфигурационный файл config.yml, предназначенный для дальнейшей настройки.

  2. Отредактируйте созданный файл 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.json
    Подсказка

    В случае установки standalone конфигурации необходимо удалить параметры хостов replica и arbiter, аналогично примеру.

Шаг 2. Запуск процесса обновления

  1. Запустите процесс обновления Pangolin. Выполните команду:

    pangolin-installer terminal -c config.yml -a updates

    Возможные параметры запуска установки:

    • флаг -c предполагает заполнение пути до конфигурационного файла;
    • без указания атрибута -a будет запущено автоопределение процесса действий установка/обновление;
    • если указан флаг -a install – будет запущен процесс установки/переустановки;
    • если указан флаг -a updates – будет запущен процесс обновления.
  2. Во время запуска проверки перед обновлением и самим обновлением, утилитой будет выведена информация о ходе выполнения этапов.

    Пример вывода:

    Вывод об успешном обновлении 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-venv (1.1.0) |
    | | | 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