Восстановление работы СУБД Pangolin после обновления ОС РЕД ОС 7 до версии 8
Актуально для СУБД Pangolin версии 6.4.3.
Поскольку инструкция является универсальной для standalone и cluster архитектур, каждый пункт необходимо выполнить на всех узлах. Обновление необходимо производить только тех компонентов, которые есть на исходном стенде. Иначе пропустить выполнение шага. Для удобства такие шаги помечены тегом - опционально.
Перед началом выполнения инструкции необходимо убедиться, что yum/dnf репозитории настроены корректно.
Обновление СУБД осуществляется от пользователя с правами sudo
, пользователя postgres
и пользователя kmadmin_pg
.
Перед началом выполнения процедуры обновления сохраните дистрибутив СУБД Pangolin РЕД ОС 8 на каждый узел. В инструкции каталог будет размещен по пути ~/pangolin_redos8
.
Шаг 1. Подготовка ВМ к процедуре обновления ОС
-
(Опционально для конфигурации с Pangolin Manager) Введите Pangolin Manager в режим паузы:
sudo -iu postgres
pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml edit-config --set 'pause=true' --force
exit -
Остановите все компоненты СУБД 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
-
-
Проверьте, что все компоненты корректно остановлены:
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.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. Обновление ОС
-
Обновите РЕД ОС до версии 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
-
Обновите пакеты:
# (опционально) Для конфигурации с 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 -
(опционально) Восстановите 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/ -
Запустите компоненты СУБД 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
-
-
(Опционально для конфигурации с Pangolin Manager) Выведите Pangolin Mananger из режима паузы:
sudo -iu postgres
pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml edit-config --set 'pause=false' --force
exit -
Перестройте все объекты баз данных, которые используют параметры сортировки по умолчанию:
sudo -iu postgres
psqlDO $$
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 $$;
\qexit
-
Проверьте корректность запуска компонентов:
-
Без функциональности «Отказ от 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
-
-
Проверьте корректность ролевой модели 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. Перестройка индексов до запуска пользовательской нагрузки
-
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 -
Измените права для скрипта:
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
------------------------------