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

Восстановление работы СУБД Pangolin после обновления ОС РЕД ОС 7 до версии 8

Важно

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

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

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

Обновление СУБД осуществляется от пользователя с правами sudo, пользователя postgres и пользователя kmadmin_pg.

Внимание!

Перед началом выполнения процедуры обновления сохраните дистрибутив СУБД Pangolin РЕД ОС 8 на каждый узел. В инструкции каталог будет размещен по пути ~/pangolin_redos8.

Шаг 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
      sudo systemctl disable pangolin-manager

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

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

      # Для любой конфигурации
      sudo systemctl stop pangolin-pooler
      sudo systemctl disable pangolin-pooler
      sudo systemctl stop pangolin-certs-rotate
      sudo systemctl disable 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
      systemctl --user disable pangolin-manager

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

      # Для любой конфигурации
      systemctl --user stop pangolin-pooler
      systemctl --user disable pangolin-pooler
      systemctl --user stop pangolin-certs-rotate
      systemctl --user disable pangolin-certs-rotate
      systemctl --user stop pangolin-auth-reencrypt
      exit
      sudo -iu kmadmin_pg
      export XDG_RUNTIME_DIR=/run/user/$(id -u)
      export BUGS_SESSION_BUS_ADRESS="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

    Если команда вернула не пустой результат, выполните следующую команду:

    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
  4. (опционально) Для конфигурации с etcd. Создайте резервную копию рабочих файлов etcd:

    sudo mkdir -p ~/pangolin_redos8/{etcd_backup_lib, etcd_backup_conf}
    sudo cp -ra /var/lib/etcd/ ~/pangolin_redos8/etcd_backup_lib/
    sudo cp -ra /etc/etcd ~/pangolin_redos8/etcd_backup_conf/
  5. Проверьте версию GNU libc с помощью команды:

     ldd --version

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

    ldd (GNU libc) 2.28
    Copyright (C) 2018 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE
    Written by Roland McGrath and Ulrich Drepper.

    Если версия GNU libc меньше 2.28, то после обновления ОС и восстановления работы продукта выполните шаг 4.

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

  1. Обновите РЕД ОС до версии 8.

  2. Перед тем, как перейти к этапу восстановления, убедитесь в том, что версия ОС была корректно изменена:

    sudo cat /etc/os-release

    Вывод команды:

    NAME="RED OS"
    VERSION="8.0"
    PLATFORM_ID="platform:red80"
    ID="redos"
    ID_LIKE="rhel centos fedora"
    VERSION_ID="8.0"
    PRETTY_NAME="RED OS 8.0"
    ANSI_COLOR="0;31"
    CPE_NAME="cpe:/o:redos:redos:8"
    HOME_URL="https://redos.red-soft.ru"
    BUG_REPORT_URL="https://support.red-soft.ru"
    EDITION="Standard"

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

  1. Обновите пакеты:

    # (опционально) Для конфигурации с pangolin-manager
    sudo dnf install -y ~/pangolin_redos8/pangolin-manager-2.1.4-redos8.0.x86_64.rpm

    # (опционально) Для любой конфигурации
    sudo dnf install -y ~/pangolin_redos8/pangolin-dbms-6.4-6.4.3-redos8.0.x86_64.rpm &&\
    sudo dnf install -y ~/pangolin_redos8/pangolin-dbms-6.4-client-6.4.3-redos8.0.x86_64.rpm &&\
    sudo dnf install -y ~/pangolin_redos8/pangolin-pooler-1.4.0-redos8.0.x86_64.rpm &&\
    sudo dnf install -y ~/pangolin_redos8/pangolin-backup-tools-1.2.2-redos8.0.x86_64.rpm &&\
    sudo dnf install -y ~/pangolin_redos8/utilities/pangolin-auth-reencrypt-6.4.3-redos8.0.x86_64.rpm &&\
    sudo dnf install -y ~/pangolin_redos8/utilities/pangolin-certs-rotate-6.4.3-redos8.0.x86_64.rpm &&\
    sudo dnf install -y ~/pangolin_redos8/utilities/pangolin-diagnostic-tool-6.4.3-redos8.0.x86_64.rpm &&\
    sudo dnf install -y ~/pangolin_redos8/utilities/pangolin-security-utilities-6.4.3-redos8.0.x86_64.rpm &&\
    sudo dnf install -y ~/pangolin_redos8/timescaledb/pangolin-timescaledb-6.4-apache-2.14.2-redos8.0-x86_64.rpm

    Для проверки корректности обновления пакетов выполните команду:

    sudo dnf list installed | grep "pangolin"

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

    pangolin-ansible-venv-controlled.x86_64  6.4.3-redos7.3.2           @@commandline
    pangolin-auth-reencrypt.x86_64 6.4.3-redos8 @@commandline
    pangolin-backup-tools.x86_64 1.2.2-redos8 @@commandline
    pangolin-certs-rotate.x86_64 6.4.3-redos8 @@commandline
    pangolin-dbms-6.4.x86_64 6.4.3-redos8 @@commandline
    pangolin-dbms-6.4-client.x86_64 6.4.3-redos8 @@commandline
    pangolin-diagnostic-tool.x86_64 6.4.3-redos8 @@commandline
    pangolin-manager.x86_64 2.1.4-redos8 @@commandline
    pangolin-pooler.x86_64 1.4.0-redos8 @@commandline
    pangolin-security-utilities.x86_64 6.4.3-redos8 @@commandline
    pangolin-timescaledb-6.4-apache.x86_64 2.14.2-redos8 @@commandline
  2. (опционально) Восстановите etcd:

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

    • Без функциональности «Отказ от root»:

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

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

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

      # (опционально) Для конфигурации с dcs. !!! Только для узла 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 enable pangolin-pooler
      sudo systemctl restart pangolin-certs-rotate
      sudo systemctl enable 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
      systemctl --user enable pangolin-manager

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

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

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

      # (опционально) Для конфигурации с dcs. !!! Только для узла 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
  4. (Опционально для конфигурации с Pangolin Manager) Выведите Pangolin Mananger из режима паузы:

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

    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
  6. Проверьте корректность запуска компонентов:

    • Без функциональности «Отказ от 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
  7. Проверьте корректность ролевой модели master-replica:

    sudo -iu postgres
    list

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

     \+ Cluster: clustername (7459378915757009619) ------+--------------+-----------+----+-----------+
    | Member | Host | Role | State | TL | Lag in MB |
    +----------------------+---------------------------+--------------+-----------+----+-----------+
    | srv-1-14.db.dev.sbt | srv-1-14.db.dev.sbt:5433 | Leader | running | 5 | |
    | srv-1-145.db.dev.sbt | srv-1-145.db.dev.sbt:5433 | Sync Standby | streaming | 5 | 0 |

    Если роли распределились некорректно, выполните переключение:

    switch

Шаг 4. Перестройка индексов до запуска пользовательской нагрузки

  1. Cоздайте файл скрипта со следующим содержимым:

    read -s -p "Введите пароль: " pass
    echo
    echo

    # Получаем список баз данных
    dblist=$(PGPASSWORD=$pass psql -t -c "select string_agg(datname, ' ') from
    pg_database where datname not in ('template0','template1');")
    for i in $dblist
    do

    # Получаем список индексов в БД
    dbidx=$(PGPASSWORD=$pass psql -d $i -t -c "\
    SELECT DISTINCT indexrelid::regclass::text idx_name \
    FROM (SELECT indexrelid, indcollation[i] coll FROM pg_index, generate_subscripts(indcollation, 1) g(i)) s \
    JOIN pg_collation c ON coll=c.oid \
    WHERE c.collprovider IN ('d', 'c') AND c.collname NOT IN ('C', 'POSIX') \
    and indexrelid not in (SELECT distinct inhparent FROM pg_inherits);")
    echo "Текущая БД : $i"

    # Выполняем REINDEX для индексов
    for j in $dbidx
    do
    echo "Текущий обрабатываемый индекс : reindex index concurrently $j;"
    PGPASSWORD=$pass psql -d $i -c "reindex index concurrently $j;"
    done
    echo "------------------------------"
    done
  2. Измените права для скрипта:

    chmod 744 <название_файла_со_скриптом>
  3. Перенастройте индексы с помощью скрипта:

    Важно

    Для корректного исполнения скрипта понадобится пароль от пользователя базы данных!

    ./<название_файла_со_скриптом>

    Пример работы скрипта:

    Введите пароль:
    Текущая БД : postgres
    Текущий обрабатываемый индекс : reindex index concurrently cron.jobname_username_uniq;
    REINDEX
    Текущий обрабатываемый индекс : reindex index concurrently hint_plan.hints_norm_and_app;
    REINDEX
    Текущий обрабатываемый индекс : reindex index concurrently outline.outlines_pkey;
    REINDEX
    ------------------------------
    Текущая БД : First_db
    Текущий обрабатываемый индекс : reindex index concurrently pgse_profile.uk_baselines;
    REINDEX
    Текущий обрабатываемый индекс : reindex index concurrently pgse_profile.pk_sample_stat_tables_tot;
    REINDEX
    Текущий обрабатываемый индекс : reindex index concurrently pgse_profile.pk_report_struct;
    REINDEX
    Текущий обрабатываемый индекс : reindex index concurrently pgse_profile.ix_sample_stmts_qid;
    REINDEX
    Текущий обрабатываемый индекс : reindex index concurrently pgse_profile.pk_import_queries_version_order;
    REINDEX
    Текущий обрабатываемый индекс : reindex index concurrently pgse_profile.ix_fk_report_struct_tree;
    REINDEX
    Текущий обрабатываемый индекс : reindex index concurrently pgse_profile.ix_sample_kcache_sl;
    REINDEX
    Текущий обрабатываемый индекс : reindex index concurrently pgse_profile.uk_sample_we;
    REINDEX
    Текущий обрабатываемый индекс : reindex index concurrently pgse_profile.pk_report_headers;
    REINDEX
    Текущий обрабатываемый индекс : reindex index concurrently pgse_profile.uk_sample_settings_sysid;
    REINDEX
    Текущий обрабатываемый индекс : reindex index concurrently outline.outlines_pkey;
    REINDEX
    Текущий обрабатываемый индекс : reindex index concurrently pgse_profile.pk_import_queries;
    REINDEX
    Текущий обрабатываемый индекс : reindex index concurrently pgse_profile.pk_sample_settings;
    REINDEX
    Текущий обрабатываемый индекс : reindex index concurrently pgse_profile.pk_sample_timings;
    REINDEX
    Текущий обрабатываемый индекс : reindex index concurrently pgse_profile.pk_stmt_list;
    REINDEX
    Текущий обрабатываемый индекс : reindex index concurrently hint_plan.hints_norm_and_app;
    REINDEX
    ------------------------------