Обновление ОС РЕД ОС 7 на версию 8 с предустановленной СУБД Pangolin
Актуально для СУБД Pangolin версии 6.4.3 и выше.
Поскольку инструкция является универсальной для standalone и cluster архитектур, каждый пункт необходимо выполнить на всех узлах. Обновление необходимо производить только тех компонентов, которые есть на исходном стенде. Иначе пропустить выполнение шага. Для удобства такие шаги помечены тегом – опционально.
Перед началом выполнения инструкции необходимо убедиться, что yum/dnf репозитории настроены корректно.
Обновление СУБД осуществляется от пользователя с правами sudo, пользователя postgres и пользователя kmadmin_pg.
Перед началом выполнения процедуры обновления сохраните дистрибутив СУБД Pangolin РЕД ОС 8 на каждый узел. В инструкции каталог будет размещен по пути ~/pangolin_redos8.
Шаг 1. Подготовка виртуальной машины к процедуре обновления ОС
-
(Опционально) Для конфигурации с Pangolin Manager. Введите компонент в режим паузы:
sudo -iu postgrespangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml edit-config --set 'pause=true' --forceexit -
Остановите все компоненты СУБД Pangolin. В случае кластерной конфигурации действия по остановке произведите сначала на реплике, затем на основном узле:
-
Без функциональности «Отказ от root»:
# (опционально) Для конфигурации с pangolin-managersudo systemctl stop pangolin-managersudo systemctl disable pangolin-manager# (опционально) Для конфигурации с etcdsudo systemctl stop etcd# (опционально) Для конфигурации без pangolin-managersudo systemctl stop postgresqlsudo systemctl disable postgresql# Для любой конфигурацииsudo systemctl stop pangolin-poolersudo systemctl disable pangolin-poolersudo systemctl stop pangolin-certs-rotatesudo systemctl disable pangolin-certs-rotatesudo systemctl stop pangolin-auth-reencrypt@postgressudo systemctl stop pangolin-auth-reencrypt@kmadmin_pg -
С функциональностью «Отказ от root»:
# (опционально) Для конфигурации с etcdsudo systemctl stop etcdsudo -iu postgres# (опционально) Для конфигурации с pangolin-managersystemctl --user stop pangolin-managersystemctl --user disable pangolin-manager# (опционально) Для конфигурации без pangolin-managersystemctl --user stop postgresql# Для любой конфигурацииsystemctl --user stop pangolin-poolersystemctl --user disable pangolin-poolersystemctl --user stop pangolin-certs-rotatesystemctl --user disable pangolin-certs-rotatesystemctl --user stop pangolin-auth-reencryptexitsudo -iu kmadmin_pgexport XDG_RUNTIME_DIR=/run/user/$(id -u)export BUGS_SESSION_BUS_ADRESS="unix:path=${XDG_RUNTIME_DIR}/bus"systemctl --user stop pangolin-auth-reencryptexit
-
-
Проверьте, что все компоненты корректно остановлены:
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 -
(опционально) Для конфигурации с 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/ -
Проверьте версию GNU
libcс помощью команды:ldd --versionПример вывода команды:
ldd (GNU libc) 2.28Copyright (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 PURPOSEWritten by Roland McGrath and Ulrich Drepper.Если версия GNU
libcменьше 2.28, то после обновления ОС и восстановления работы продукта выполните «Шаг 4».
Шаг 2. Обновление ОС
Перед началом обновления проверьте версию РЕД ОС:
- Если версия РЕД ОС 7.2.x, после обновления возможны проблемы с сортировкой из-за смены версии
glibc. - Если версия РЕД ОС 7.3.x, для обновления требуется версия СУБД Pangolin 6.4.3 и выше.
Перед обновлением проверьте корректность сортировки:
(echo "1-1"; echo "11") | LC_COLLATE=en_US.UTF-8 sort
Результат: Если вывод команды будет 1-1 или 11, то проблемы с сортировкой не возникнет.
Обновление с РЕД ОС версии 7.3.x стандартной редакции до РЕД ОС 8 возможно с помощью утилиты, которая предоставляется на официальном сайте разработчика и распространяется только для зарегистрированных пользователей.
-
Обновите РЕД ОС до версии 8 в соответствии с документацией от технической поддержки разработчика.
-
Перед тем, как перейти к этапу восстановления, убедитесь в том, что версия ОС была корректно изменена:
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
-
Обновите rpm-пакеты СУБД Pangolin:
# (опционально) Для конфигурации с pangolin-managersudo dnf install -y ~/pangolin_redos8/pangolin-manager-2.1.4-redos{OS_version}.x86_64.rpm# (опционально) Для любой конфигурацииsudo dnf install -y ~/pangolin_redos8/pangolin-dbms-7-7.1.0-redos{OS_version}.x86_64.rpm &&\sudo dnf install -y ~/pangolin_redos8/pangolin-dbms-7-client-7.1.0-redos{OS_version}.x86_64.rpm &&\sudo dnf install -y ~/pangolin_redos8/pangolin-pooler-1.6.0-redos{OS_version}.x86_64.rpm &&\sudo dnf install -y ~/pangolin_redos8/pangolin-backup-tools-2.1.0-redos{OS_version}.x86_64.rpm &&\sudo dnf install -y ~/pangolin_redos8/utilities/pangolin-auth-reencrypt-7.1.0-redos{OS_version}.x86_64.rpm &&\sudo dnf install -y ~/pangolin_redos8/utilities/pangolin-certs-rotate-7.1.0-redos{OS_version}.x86_64.rpm &&\sudo dnf install -y ~/pangolin_redos8/utilities/pangolin-diagnostic-tool-7.1.0-redos{OS_version}.x86_64.rpm &&\sudo dnf install -y ~/pangolin_redos8/utilities/pangolin-security-utilities-7.1.0-redos{OS_version}.x86_64.rpm &&\sudo dnf install -y ~/pangolin_redos8/timescaledb/pangolin-timescaledb_версия-7-apache-2.19.3-redos{OS_version}-x86_64.rpmГде
{OS_version}– версия РЕД ОС (формат - x.x).Для проверки корректности обновления пакетов выполните команду:
sudo dnf list installed | grep "pangolin"Пример вывода команды:
pangolin-ansible-venv-controlled.x86_64 7.1.0-redos8 @@commandlinepangolin-auth-reencrypt.x86_64 7.1.0-redos8 @@commandlinepangolin-backup-tools.x86_64 2.1.0-redos8 @@commandlinepangolin-certs-rotate.x86_64 7.1.0-redos8 @@commandlinepangolin-dbms-7.1.x86_64 7.1.0-redos8 @@commandlinepangolin-dbms-7.1-client.x86_64 7.1.0-redos8 @@commandlinepangolin-diagnostic-tool.x86_64 7.1.0-redos8 @@commandlinepangolin-manager.x86_64 2.2.1-redos8 @@commandlinepangolin-pooler.x86_64 1.6.0-redos8 @@commandlinepangolin-security-utilities.x86_64 7.1.0-redos8 @@commandlinepangolin-timescaledb-7.1-apache.x86_64 2.19.3-redos8 @@commandline -
(опционально) Восстановите etcd:
sudo rm -rf /var/lib/etcd /etc/etcdsudo cp -ra ~/pangolin_redos8/etcd_backup_lib/etcd /var/lib/sudo cp -ra ~/pangolin_redos8/etcd_backup_conf/etcd /etc/ -
Запустите компоненты СУБД Pangolin:
-
Без функциональности «Отказ от root»:
# (опционально) Для конфигурации с pangolin-managersudo systemctl restart pangolin-managersudo systemctl enable pangolin-manager# (опционально) Для конфигурации без pangolin-managersudo systemctl restart pangolin-dbms# (опционально) Для конфигурации с etcdsudo systemctl restart etcd# (опционально) Для конфигурации с dcs. !!! Только для узла arbiter.sudo chmod -R 0440 /opt/pangolin-manager/lib/plugins/ /opt/pangolin-manager/lib/libfe_elog.sosudo chmod 0770 /opt/pangolin-manager /opt/pangolin-manager/bin /opt/pangolin-manager/lib /opt/pangolin-manager/lib/pluginssudo 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-poolersudo systemctl enable pangolin-poolersudo systemctl restart pangolin-certs-rotatesudo systemctl enable pangolin-certs-rotatesudo systemctl restart pangolin-auth-reencrypt@postgressudo systemctl restart pangolin-auth-reencrypt@kmadmin_pg -
С функциональностью «Отказ от root»:
sudo -iu postgres# (опционально) Для конфигурации с pangolin-managersystemctl --user restart pangolin-managersystemctl --user enable pangolin-manager# (опционально) Для конфигурации без pangolin-managersystemctl --user restart postgresql# (опционально) Для конфигурации с etcdexitsystemctl restart etcd# Для любой конфигурацииsudo -iu postgressystemctl --user restart pangolin-poolersystemctl --user enable pangolin-poolersystemctl --user restart pangolin-certs-rotatesystemctl --user enable pangolin-certs-rotatesystemctl --user restart pangolin-auth-reencryptexit# (опционально) Для конфигурации с dcs. !!! Только для узла arbiter.sudo chmod -R 0440 /opt/pangolin-manager/lib/plugins/ /opt/pangolin-manager/lib/libfe_elog.sosudo chmod 0770 /opt/pangolin-manager /opt/pangolin-manager/bin /opt/pangolin-manager/lib /opt/pangolin-manager/lib/pluginssudo 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_pgexport XDG_RUNTIME_DIR=/run/user/$(id -u)export DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus"systemctl --user restart pangolin-auth-reencryptexit
-
-
(Опционально) Для конфигурации с Pangolin Manager. Выведите компонент из режима паузы:
sudo -iu postgrespangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml edit-config --set 'pause=false' --forceexit -
Перестройте все объекты баз данных, которые используют параметры сортировки по умолчанию:
sudo -iu postgrespsqlDO $$DECLAREdb_name TEXT;BEGINFOR db_name IN (SELECT datname FROM pg_database WHERE datname NOT IN ('template0','template1')) LOOPEXECUTE format('ALTER DATABASE %I REFRESH COLLATION VERSION', db_name);END LOOP;END $$;\qexit -
Проверьте корректность запуска компонентов:
-
Без функциональности «Отказ от root»:
# (опционально) Для конфигурации с pangolin-managersudo systemctl status pangolin-manager# (опционально) Для конфигурации без pangolin-managersudo systemctl status postgresql# (опционально) Для конфигурации с etcdsudo systemctl status etcd# (опционально) Для любой конфигурацииsudo systemctl status pangolin-poolersudo systemctl status pangolin-certs-rotatesudo systemctl status pangolin-auth-reencrypt@postgressudo systemctl status pangolin-auth-reencrypt@kmadmin_pg -
С функциональностью «Отказ от root»:
sudo -iu postgres# (опционально) Для конфигурации с pangolin-managersystemctl --user status pangolin-manager# (опционально) Для конфигурации без pangolin-managersystemctl --user status postgresql# (опционально) Для конфигурации с etcdexitsudo systemctl status etcd# (опционально) Для любой конфигурацииsudo -iu postgressystemctl --user status pangolin-poolersystemctl --user status pangolin-certs-rotatesystemctl --user status pangolin-auth-reencryptexitsudo -iu kmadmin_pgexport XDG_RUNTIME_DIR=/run/user/$(id -u)export DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus"systemctl --user status pangolin-auth-reencryptexit
-
-
Проверьте корректность ролевой модели master-replica:
sudo -iu postgreslistПример вывода команды:
+ Cluster: clustername (7459378915757009619) ------+--------------+-----------+----+-----------+| Member | Host | Role | State | TL | Lag in MB |+----------------------+---------------------------+--------------+-----------+----+-----------+| <server_name> | <server_name>:<port> | Leader | running | 5 | || <server_name> | <server_name>:<port> | Sync Standby | streaming | 5 | 0 |Если роли распределились некорректно, выполните переключение:
switch
Шаг 4. Перестройка индексов до запуска пользовательской нагрузки
-
Создайте файл скрипта со следующим содержимым:
read -s -p "Введите пароль: " passechoecho# Получаем список баз данныхdblist=$(PGPASSWORD=$pass psql -t -c "select string_agg(datname, ' ') frompg_database where datname not in ('template0','template1');")for i in $dblistdo# Получаем список индексов в БД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 $dbidxdoecho "Текущий обрабатываемый индекс : reindex index concurrently $j;"PGPASSWORD=$pass psql -d $i -c "reindex index concurrently $j;"doneecho "------------------------------"done -
Измените права для скрипта:
chmod 744 <название_файла_со_скриптом> -
Перенастройте индексы с помощью скрипта:
ВажноДля корректного исполнения скрипта понадобится пароль от пользователя базы данных!
./<название_файла_со_скриптом>Пример работы скрипта:
Введите пароль:Текущая БД : 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------------------------------
Проверка результатов восстановления
Для проверки корректности работы СУБД рекомендуется использовать чек-лист.