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

  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=${}" \
    
    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#

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

    sudo dnf install pangolin-installer-{version_component}-{OS}.x86_64.rpm
    
    sudo yum install pangolin-installer-{version_component}-{OS}.x86_64.rpm
    
    sudo apt install pangolin-installer-{version_component}_amd64.deb
    
    sudo 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 подразумевает под собой этапы:

  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
    
    hosts:
        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. Запуск процесса обновления#

  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 (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