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

Обновление SberLinux OS Server 8 на версию 9 с предустановленной СУБД Pangolin

Актуально для СУБД Pangolin версии 6.3.x.

Внимание!

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

Поскольку инструкция является универсальной для кластерной и standalone-конфигураций, каждый пункт необходимо выполнить на всех узлах. Обновление необходимо производить только тех компонентов, которые есть на исходном стенде. Иначе пропустить выполнение шага. Для удобства такие шаги помечены тегом - опционально.

Перед началом выполнения инструкции необходимо убедиться, что yum/dnf-репозитории настроены корректно.

Обновление СУБД осуществляется пользователем с правами суперпользователя, пользователя postgres и пользователя kmadmin_pg. Необходимо учесть это на старте выполнения инструкции.

Внимание!

Перед началом обновления сохраните дистрибутив СУБД Pangolin SberLinux OS Server 9 на каждый узел. В инструкции каталог будет размещен в ~/pangolin_sbel9.

Шаг 1. Подготовка ВМ к процедуре обновления ОС

  1. (Опционально для конфигурации с Pangolin Manager) Введите Pangolin Manager в режим паузы:

    sudo -iu postgres
    pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml edit-config --set 'pause=true' --force
    exit
  2. Остановите все компоненты СУБД Pangolin. В случае кластерной конфигурации действия по остановке произведите сначала на реплике затем на основном узле.

    • Без функциональности «Отказ от root»:
    # (опционально) Для конфигурации с pangolin-manager
    sudo systemctl stop pangolin-manager

    # (опционально) Для конфигурации с etcd
    sudo systemctl stop etcd

    # (опционально) Для конфигурации без pangolin-manager
    sudo systemctl stop postgresql

    # Для любой конфигурации
    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
    • С функциональностью «Отказ от root»:
    # (опционально) Для конфигурации с etcd  
    sudo systemctl stop etcd

    sudo -iu postgres
    # (опционально) Для конфигурации с pangolin-manager
    systemctl --user stop pangolin-manager

    # (опционально) Для конфигурации без pangolin-manager
    systemctl --user stop postgresql

    # Для любой конфигурации
    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
  3. Проверьте, что все компоненты корректно остановлены:

    sudo ps aux | grep -E "pangolin-pooler|pangolin-manager|postgresql|pangolin-certs-rotate|pangolin-auth-reencrypt@postgres|pangolin-auth-reencrypt@kmadmin_pg|etcd" | grep -v grep
  4. Если на предыдущем шаге была выведена информация, то выполните:

    sudo kill -9 <pid>
    sudo ps aux | grep -E "pangolin-pooler|pangolin-manager|postgresql|pangolin-certs-rotate|pangolin-auth-reencrypt@postgres|pangolin-auth-reencrypt@kmadmin_pg|etcd" | grep -v grep
  5. (Опционально) Для конфигурации с etcd. Создайте резервную копию рабочих файлов etcd:

    sudo mkdir -p ~/pangolin_sbel9/{etcd_backup_lib,etcd_backup_conf}
    sudo cp -ra /var/lib/etcd ~/pangolin_sbel9/etcd_backup_lib/
    sudo cp -ra /etc/etcd ~/pangolin_sbel9/etcd_backup_conf/

Шаг 2. Обновление ОС

  1. Установите утилиту:

    dnf -y install leapp-upgrade
  2. Создайте файл с репозиториями для использования утилиты:

    touch /etc/leapp/files/leapp_upgrade_repositories.repo

    Имена id должны отличаться от id в репозитории /etc/yum.repos.d/.

    leapp_upgrade_repositories.repo:

    [SBERLINUX-BASE-9]
    name=SBERLINUX-BASE
    baseurl=http://<URL>
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-SberTech-System-Tribe
    enabled=1

    [SBERLINUX-APPSTREAM-9]
    name=SBERLINUX-APPSTREAM
    baseurl=http://<URL>
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-SberTech-System-Tribe
    enabled=1


    [SBERLINUX-HighAvailability-9]
    name=SBERLINUX-HighAvailability
    baseurl=http://<URL>
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-SberTech-System-Tribe
    enabled=1

    [SBERLINUX-powertools-9]
    name=SBERLINUX-powertools
    baseurl=http://<URL>
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-SberTech-System-Tribe
    enabled=1
  3. Замените строки в файле /etc/leapp/repos.d/system_upgrade/common/libraries/config/version.py:

    _SUPPORTED_VERSIONS = {
    #'8': {'rhel': ['8.6', '8.8'], 'rhel-saphana': ['8.6', '8.8']},
    '8': {'sberlinux': ['8.6', '8.8'], 'rhel-saphana': ['8.6', '8.8']},
    }
  4. Уберите проверку checkinstalledkernels:

    mv /etc/leapp/repos.d/system_upgrade/common/actors/kernel/checkinstalledkernels /var/tmp
  5. Обновите с флагом перезагрузки после завершения:

    leapp upgrade --no-rhsm --nogpgcheck –-reboot
  6. Замените репозитории yum на новые в целевом месте (/etc/yum.repos.d/):

    [SBERLINUX-BASE]
    name=SBERLINUX-BASE
    baseurl=http://<URL>
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-SberTech-System-Tribe
    enabled=1

    [SBERLINUX-APPSTREAM]
    name=SBERLINUX-APPSTREAM
    baseurl=http://<URL>
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-SberTech-System-Tribe
    enabled=1


    [SBERLINUX-HighAvailability]
    name=SBERLINUX-HighAvailability
    baseurl=http://<URL>
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-SberTech-System-Tribe
    enabled=1

    [SBERLINUX-powertools]
    name=SBERLINUX-powertools
    baseurl=http://<URL>
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-SberTech-System-Tribe
    enabled=1

    [SBERLINUX-pangolin]
    name=SBERLINUX-pangolin
    baseurl=http://<URL>
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-SberLinux
    enabled=1

    [SBERLINUX-pangolin-dev]
    name=SBERLINUX-pangolin-dev
    baseurl=http://<URL>
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-SberLinux
    enabled=1
  7. Убедитесь в том, что версия ОС была корректна изменена:

    sudo cat /etc/os-release

    Ожидаемый результат:

    NAME="SberLinux"
    VERSION="9.3 (Shkhara)"
    ID="sberlinux"
    ID_LIKE="rhel sberlinux fedora"
    VERSION_ID="9.3"
    PLATFORM_ID="platform:el9"
    PRETTY_NAME="SberLinux 9.3 (Shkhara)"
    ANSI_COLOR="0;34"
    LOGO="fedora-logo-icon"
    CPE_NAME="cpe:/o:sberlinux:sberlinux:9::baseos"
    HOME_URL="https://sbertech.ru/"
    DOCUMENTATION_URL="https://sbertech.ru/"
    BUG_REPORT_URL="https://sbertech.ru/"

    SBERLINUX_MANTISBT_PROJECT="SberLinux-9"
    SBERLINUX_MANTISBT_PROJECT_VERSION="9.3"
    REDHAT_SUPPORT_PRODUCT="SberLinux"
    REDHAT_SUPPORT_PRODUCT_VERSION="9.3"

Шаг 3. Восстановление работы СУБД Pangolin после обновления ОС

  1. Остановите все компоненты СУБД Pangolin. В случае кластерной конфигурации действия по остановке произведите сначала на реплике, затем на основном.

    • Без функциональности «Отказ от root»:
    # (опционально) Для конфигурации с etcd 
    sudo systemctl stop etcd

    # (опционально) Для конфигурации с pangolin-manager
    sudo systemctl stop pangolin-manager

    # (опционально) Для конфигурации без pangolin-manager
    sudo systemctl stop postgresql

    # Для любой конфигурации
    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
    • С функциональностью «Отказ от root»:
    # (опционально) Для конфигурации с etcd  
    sudo systemctl stop etcd

    sudo -iu postgres
    # (опционально) Для конфигурации с pangolin-manager
    systemctl --user stop pangolin-manager

    # (опционально) Для конфигурации без pangolin-manager
    systemctl --user stop postgresql

    # Для любой конфигурации
    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
  2. Обновите rpm-пакеты компонентов:

    export PANGOLIN_VER=6.3.0
    export PANGOLIN_MANAGER_VER=2.1.1
    export PANGOLIN_POOLER_VER=1.3.1
    export PANGOLIN_BACKUP_TOOLS_VER=1.2.1

    # (опционально) Для конфигурации с pangolin-manager
    sudo dnf install -y ~/pangolin_sbel9/pangolin-manager-$PANGOLIN_MANAGER_VER-sberlinux9.3.x86_64.rpm

    # (опционально) Для любой конфигурации
    sudo dnf install -y ~/pangolin_sbel9/pangolin-dbms-6.3-$PANGOLIN_VER-sberlinux9.3.x86_64.rpm
    sudo dnf install -y ~/pangolin_sbel9/pangolin-dbms-6.3-client-$PANGOLIN_VER-sberlinux9.3.x86_64.rpm
    sudo dnf install -y ~/pangolin_sbel9/pangolin-pooler-$PANGOLIN_POOLER_VER-sberlinux9.3.x86_64.rpm
    sudo dnf install -y ~/pangolin_sbel9/pangolin-backup-tools-$PANGOLIN_BACKUP_TOOLS_VER-sberlinux9.3.x86_64.rpm
    sudo dnf install -y ~/pangolin_sbel9/timescaledb/pangolin-timescaledb-6.3-apache-2.14.2-sberlinux9.3-x86_64.rpm
    sudo dnf install -y ~/pangolin_sbel9/utilities/pangolin-auth-reencrypt-$PANGOLIN_VER-sberlinux9.3.x86_64.rpm
    sudo dnf install -y ~/pangolin_sbel9/utilities/pangolin-certs-rotate-$PANGOLIN_VER-sberlinux9.3.x86_64.rpm
    sudo dnf install -y ~/pangolin_sbel9/utilities/pangolin-diagnostic-tool-$PANGOLIN_VER-sberlinux9.3.x86_64.rpm
    sudo dnf install -y ~/pangolin_sbel9/utilities/pangolin-security-utilities-$PANGOLIN_VER-sberlinux9.3.x86_64.rpm
  3. (Опционально) Восстановите etcd:

    sudo rm -rf /var/lib/etcd /etc/etcd
    sudo cp -ra ~/pangolin_sbel9/etcd_backup_lib/etcd /var/lib/
    sudo cp -ra ~/pangolin_sbel9/etcd_backup_conf/etcd /etc/
  4. Запустите компоненты СУБД Pangolin.

    • Без функциональности «Отказ от root»:
    # (опционально) Для конфигурации с pangolin-manager
    sudo systemctl restart pangolin-manager

    # (опционально) Для конфигурации без pangolin-manager
    sudo systemctl restart postgresql

    # (опционально) Для конфигурации с etcd
    sudo systemctl restart etcd

    # (опционально) Для конфигурации с dsc. !!! Только для узла arbiter.
    sudo chmod -R 0440 /opt/pangolin-manager/lib/plugins/ /opt/pangolin-manager/lib/libfe_elog.so
    sudo chmod 0770 /opt/pangolin-manager /opt/pangolin-manager/bin /opt/pangolin-manager/lib /opt/pangolin-manager/lib/plugins
    sudo chown postgres:pangolin_users /opt/pangolin-manager /opt/pangolin-manager/bin /opt/pangolin-manager/lib /opt/pangolin-manager/lib/plugins /opt/pangolin-manager/lib/libfe_elog.so

    # (опционально) Для любой конфигурации
    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
    • С функциональностью «Отказ от root»:
    sudo -iu postgres
    # (опционально) Для конфигурации с pangolin-manager
    systemctl --user restart pangolin-manager

    # (опционально) Для конфигурации без pangolin-manager
    systemctl --user restart postgresql

    # (опционально) Для конфигурации с etcd
    exit
    systemctl restart etcd

    # Для любой конфигурации
    sudo -iu postgres
    systemctl --user restart pangolin-pooler
    systemctl --user restart pangolin-certs-rotate
    systemctl --user restart pangolin-auth-reencrypt
    exit

    # (опционально) Для конфигурации с dsc. !!! Только для узла arbiter.
    sudo chmod -R 0440 /opt/pangolin-manager/lib/plugins/ /opt/pangolin-manager/lib/libfe_elog.so
    sudo chmod 0770 /opt/pangolin-manager /opt/pangolin-manager/bin /opt/pangolin-manager/lib /opt/pangolin-manager/lib/plugins
    sudo chown postgres:pangolin_users /opt/pangolin-manager /opt/pangolin-manager/bin /opt/pangolin-manager/lib /opt/pangolin-manager/lib/plugins /opt/pangolin-manager/lib/libfe_elog.so

    # Для любой конфигурации
    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 restart pangolin-auth-reencrypt
    exit
  5. (Опционально для конфигурации с Pangolin Manager). Выведите Pangolin Manager из режима паузы:

    sudo -iu postgres
    pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml edit-config --set 'pause=false' --force
    exit
  6. Перестройте все объекты баз данных, которые используют параметры сортировки по умолчанию:

    sudo -iu postgres
    psql

    DO $$
    DECLARE
    db_name TEXT;
    BEGIN
    FOR db_name IN (SELECT datname FROM pg_database WHERE datname NOT IN ('template0','template1')) LOOP
    EXECUTE format('ALTER DATABASE %I REFRESH COLLATION VERSION', db_name);
    END LOOP;
    END $$;

    \q
    exit
  7. Проверьте корректность запуска компонентов.

    • Без функциональности «Отказ от root»:
    # (опционально) Для конфигурации с pangolin-manager
    sudo systemctl status pangolin-manager

    # (опционально) Для конфигурации без pangolin-manager
    sudo systemctl status postgresql

    # (опционально) Для конфигурации с etcd
    sudo systemctl status etcd

    # (опционально) Для любой конфигурации
    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
    • С функциональностью «Отказ от root»:
    sudo -iu postgres
    # (опционально) Для конфигурации с pangolin-manager
    systemctl --user status pangolin-manager

    # (опционально) Для конфигурации без pangolin-manager
    systemctl --user status postgresql

    # (опционально) Для конфигурации с etcd
    exit
    sudo systemctl status etcd

    # (опционально) Для любой конфигурации
    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

Возможные проблемы при миграции

  1. Если при миграции ОС возникла следующая ошибка на этапе проверки (leapp preupgrade --no-rhsm --nogpgcheck):

    Upgrade has been inhibited due to the following problems:
    1. Inhibitor: Detected RPMs with RSA/SHA1 signature
    Consult the pre-upgrade report for details and possible remediation.

    Выполните:

    # Сохраните текущее значение
    update-crypto-policies --show > crypt

    # Выставите временное значение
    update-crypto-policies --set LEGACY

    Повторно запустите проверку leapp preupgrade --no-rhsm --nogpgcheck. После полной миграции верните исходное значение:

    # Верните исходное значение
    update-crypto-policies --set $(cat crypt)
  2. Для миграции есть минимальные требования к характеристикам КТС. Если КТС не соответствует каким-то из параметров, то может быть получена ошибка:

    Upgrade has been inhibited due to the following problems:
    1. Inhibitor: Minimum memory requirements for RHEL 9 are not met
    Consult the pre-upgrade report for details and possible remediation.
    Summary: Memory detected: 962 MiB, required: 1536 MiB

    Увеличьте значение mem.