Восстановление работы СУБД Pangolin после обновления ОС Astra 1.7 до версии 1.8
Перед началом выполнения процедуры обновления операционной системы убедитесь, что на сервере установлена версия СУБД Pangolin 6.5.2 или выше для Astra 1.7.
Поскольку инструкция является универсальной для standalone и cluster архитектур, каждый пункт необходимо выполнить на всех узлах. Обновление необходимо производить только тех компонентов, которые есть на исходном стенде. Иначе пропустите выполнение шага. Для удобства, такие шаги помечены тегом – опционально.
Перед началом выполнения инструкции необходимо убедиться, что apt репозитории настроены корректно, команда sudo apt update
должна показать список настроенных репозиториев и отработать без ошибок.
Обновление СУБД осуществляется от пользователя с правами sudo
, пользователя postgres
и пользователя kmadmin_pg
. Необходимо учесть это на старте выполнения инструкции.
В инструкции для восстановления данных используется директория /old_root
, созданная в процессе обновления утилитой astra-console-upgrade
. Если вы уже используете или хотите использовать утилиту pg_probackup
, можно пропустить шаги по восстановлению данных из этой инструкции и восстановить их с помощью pg_probackup
.
При конфигурации cluster рекомендуется:
- Останавливать сервисы следующим образом: replica -> arbiter -> master.
- Запускать сервисы следующим образом: master -> arbiter -> replica.
Перед началом выполнения процедуры обновления сохраните дистрибутив СУБД Pangolin для Astra 1.8 на каждый узел в домашней директории пользователя, так как данная директория будет оставлена без изменений в процессе обновления. В инструкции каталог будет размещен по пути ~/pangolin_astrase18
.
Шаг 1. Подготовка виртуальной машины к процедуре обновления ОС
-
(Опционально) Для конфигурации с 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_astrase17/{etcd_backup_lib,etcd_backup_conf}
sudo cp -ra /var/lib/etcd ~/pangolin_astrase17/etcd_backup_lib/
sudo cp -ra /etc/etcd ~/pangolin_astrase17/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. Обновление ОС
-
Обновите ОС Astra 1.7 до Astra 1.8:
Миграция на новую ОС осуществляется с помощью инструмента
astra-full-upgrade
. Для успешного выполнения миграции требуется наличие неразмеченного свободного непрерывного дискового пространства, не менее 60 Гб (ориентируйтесь на занятое пространство директорией/pgdata
). Чтобы создать это пространство, для обычного КТС с диском 60 Гб нужно добавить неразмеченную область дополнительно на 60 Гб. При миграции на очередное обновление все имеющиеся дисковые разделы старой ОС, кроме/home
,/boot
и/swap
, будут созданы заново в неразмеченном свободном пространстве.Если на ОС был установлен Python 3.11, нужно откатить на версию 3.7 для корректной работы обновленной версии ОС:
-
Скачайте Python 3.7:
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.7 10
-
Откатите версию Python на 3.7:
sudo update-alternatives --config python3 #Выбрать 3.7
-
Установите старый
pip
:sudo apt reinstall python3-pip && python3.7 -m pip install --upgrade pip==21.2
-
Обновите
setuptools
:pip3 install setuptools
-
Установите пакет PyQt5:
pip3 install PyQt5
-
Повторите установку
pip
, обновлениеsetuptools
и установку пакета PyQt5 для пользователя root, чтобы предотвратить возникновение ошибки на этапе запуска утилитыastra-full-upgrade
.
-
-
Установите утилиты:
sudo apt install -y astra-full-upgrade astra-console-upgrade
Для обновления потребуется
astra-console-upgrade
, но ключ проверки есть только уastra-full-upgrade
. -
Настройте конфигурационный файл
/usr/lib/python3/dist-packages/astra_upgrade/configs/upgrade.conf.yaml
, пропишите в нем репозитории для обновления. Пример заполненного файла конфигурации:# Настройки обновления
target_repos: # Настройки источников пакетов
sources: # Список репозиториев (как сетевых так и локальных), используемых для обновления
- 'deb http://repo.example.example/trusted_repo/astra/download.astralinux.ru/astra/frozen/1.8_x86-64/1.8.1/uu/1/main-repository/ 1.8_x86-64 main contrib non-free'
- 'deb http://repo.example.example/trusted_repo/astra/download.astralinux.ru/astra/frozen/1.8_x86-64/1.8.1/uu/1/extended-repository/ 1.8_x86-64 main contrib non-free'
dirs: # Список директорий с пакетами, из которых будут созданы локальные репозитории, которые также будут использоваться для обновления.
- '/opt/repo'
sources_list: all # all | disable | third_party | astra
base_system_install: # Настройки установки базовой системы
source: debootstrap # Тип источника установки. Возможные варианты: debootstrap | archive | images. Исходя из выбранного варианта установки, будут использоваться соответствующие настройки, при этом настройки для других типов источников будут проигнорированы.
debootstrap: # Настройки для варианта установки с использованием debootstrap (source: debootstrap)
repo: http://repo.example.example/trusted_repo/astra/download.astralinux.ru/astra/frozen/1.8_x86-64/1.8.1/uu/1/main-repository/ # Репозиторий из которого должен быть проведен debootstrap.
use_disk: false # Установить в true, если требуется установка с диска. При установке с диска, указывать репозиторий (параметр repo) не требуется.
mountpoint: /run/live/medium # Точка для монтирования диска
images: # Список образов для варианта установки с использованием заранее подготовленных образов системы (source: images).
- <path to rootfs image>/rootfs.img
archive: <path to rootfs archive>/rootfs.tar.gz # Путь к архиву для варианта установки путем распаковки заранее подготовленного архива (source: archive).
packages: # Настройки установки и верификации пакетов
# critical: # Список пакетов, которые отсутствуют в исходной системе, но должны быть установлены в целевую систему при обновлении
# - lvm2
# - cryptsetup
# - plymouth-astra-theme
# whitelist: # Список сторонних пакетов, которые установлены в исходной системе и должны быть перенесены в целевую систему при обновлении
# - code
target_kernel_version: 'auto' # Выбор ядра, которое должно быть установлено в целевую систему при обновлении. Используйте значение 'auto' - для автоматического выбора последней доступной версии ядра.
allow_third_party: true # Установить в false, чтобы запретить перенос всех установленных в исходной системе сторонних пакетов
check_gpg: true # Установить в false, чтобы отключить проверку gpg-ключей репозиториев для пакетов из состава AstraLinux.
# removed: # Список пакетов, которые установлены в исходной системе, но не должны быть перенесены в целевую систему при обновлении.
# - name
# predefined_versions: # Список пакетов, для которых в целевую систему должна быть установлена указанная версия в принудительном порядке
# package_name: version
# Путь к директории - точке монтирования устройства/раздела, которое будет использовано при проведении обновления.
target_path: '/target'
# Путь к директории, в которой хранится отчет и прочие файлы, генерируемые в процессе обновления
report_path: '/var/cache/astra-upgrade'
download: # Настройки параметров загрузки пакетов
path: '/var/cache/astra-upgrade/download' # Путь к директории, в которую будет производиться загрузка пакетов
keep: true # Установить в false, чтобы удалять загруженные пакеты при аварийном откате и откате с использованием команды set ready-for-download.
check_time: 60 # Временной интервал между проверками на наличие изменений в составе пакетов исходной системы. Используется только в случае, если нет возможности отслеживать кеш пакетов. Задается в секундах.
max_delay: 240 # Максимальное значение отсрочки загрузки пакетов, задается в минутах.
retry_count: 3 # Количество повторных попыток загрузки при ошибках загрузки. Установить значение равным -1 для снятия ограничения.
retry_delay: 30 # Временной интервал между повторными попытками загрузки, задается в секундах.
# Срок (в днях), через который текущая система перейдет в режим принудительного обновления при перезагрузке. Отсчет начинается с момента завершения загрузки пакетов.
max_upgrade_delay: 7 # in days
# Установить в true, чтобы игнорировать данные предыдущего отчета (если он имеется) при проведении проверок системы
ignore_prev_report: false
# Настройки разметки
target_fs_size_policy: 'auto' # Политика использования свободного места на устройстве/разделе, которое будет использовано при проведении обновления. Возможные варианты: 'auto', 'minimal', 'maximum'
target_fs_minimal_reserve: 1000 # Размер дополнительного дискового пространства, резервируемого под рост ОС. Задается в Мб
target_fs_snapshot_reserve: 5000 # Размер дополнительно дискового пространства, резервируемого под создание снепшотов
target_rootfs_size: 'auto' # Размер дискового пространства, выделяемого под корневую файловую систему. Может быть вычислен динамически ('auto'), также можно указать вручную в Мб.
backup_path: '/backup_1.7' # Путь до директории, в которой будет храниться копия старой системы
dummydisk_path: '/' # Путь до фиктивного диска для loop устройств
# Управление шаблоном разметки
partitioning_template:
not_rebuild: false # Выставить в true, если нужно использовать скорректированный шаблон разметки из предыдущего отчета.
# use_existing: /dev/mapper/astra--VG-root # Использовать существующий раздел под корневую файловую систему целевой системы. При использовании этой опции настройки разметки игнорируются
# Управление настройками безопасности
security_settings:
enable_overlay: false # Выставить в true, чтобы включить astra-overlay после обновления системы -
Проверьте систему на соответствие требованиям с формированием отчета:
sudo astra-full-upgrade check
-
Для выполнения миграции Astra Linux 1.7 на 1.8 выполните команду:
sudo astra-console-upgrade --force
После обновления стенда поменяйте сетевой интерфейс на хостах в
/etc/network/interfaces
. -
Перед тем, как перейти к этапу восстановления, убедитесь в том, что версия ОС была корректно изменена:
sudo cat /etc/os-release
Пример вывода команды:
PRETTY_NAME="Astra Linux"
NAME="Astra Linux"
ID=astra
ID_LIKE=debian
ANSI_COLOR="1;31"
HOME_URL="https://astralinux.ru"
SUPPORT_URL="https://astralinux.ru/support"
LOGO=astra
VERSION_ID=1.8_x86-64
VERSION_CODENAME=1.8_x86-64
Шаг 3. Восстановление работы СУБД Pangolin
-
Обновите deb-пакеты СУБД Pangolin:
Для Astra критична
guid
/uuid
, поэтому следует использоватьguid
иuuid
при установке пакетовpangolin-dbms-6.5
, что использовался раннее.# (опционально) Для любой конфигурации
# В примере используется POSTGRES_GROUP_GUID=128
sudo POSTGRES_GROUP_GUID=128 apt install -y ~/pangolin_astrase18/pangolin-dbms-6.5_6.5.2_amd64.deb &&\
sudo POSTGRES_GROUP_GUID=128 apt install -y ~/pangolin_astrase18/pangolin-dbms-6.5-client_6.5.2_amd64.deb &&\
sudo apt install -y ~/pangolin_astrase18/pangolin-pooler_1.5.0_amd64.deb &&\
sudo apt install -y ~/pangolin_astrase18/pangolin-backup-tools_1.2.4_amd64.deb &&\
sudo apt install -y ~/pangolin_astrase18/utilities/pangolin-auth-reencrypt_6.5.2_amd64.deb &&\
sudo apt install -y ~/pangolin_astrase18/utilities/pangolin-certs-rotate_6.5.2_amd64.deb &&\
sudo apt install -y ~/pangolin_astrase18/utilities/pangolin-diagnostic-tool_6.5.2_amd64.deb &&\
sudo apt install -y ~/pangolin_astrase18/utilities/pangolin-security-utilities_6.5.2_amd64.deb &&\
sudo apt install -y ~/pangolin_astrase18/timescaledb/pangolin-timescaledb-6.5-apache_2.14.2_amd64.deb
# (опционально) Для конфигурации с pangolin-manager
tar -xzvf ~/pangolin_astrase18/3rdparty/3rdparty.tar.gz -C ~/pangolin_astrase18/3rdparty &&\
sudo apt install -y ./pangolin_astrase18/3rdparty/pangolin-manager-venv/pangolin-manager-venv_1.1.0_amd64.deb &&\
sudo apt install -y ./pangolin_astrase18/pangolin-manager_2.1.8_amd64.debСписок переменных, возможных для использования при установке пакетов:
Переменная Описание Значение по умолчанию Пример использования POSTGRES_USER_GUID
Переменная отвечающая за создание пользователя postgres
с конкретнымuid
26
POSTGRES_USER_GUID=27 dnf install pangolin-dmbs POSTGRES_GROUP_GUID
Переменная отвечающая за создание группы пользователя postgres
с конкретнымgid
26
POSTGRES_GROUP_GUID=27 dnf install pangolin-dbms PANGOLIN_USERS_GROUP_GUID
Переменная отвечающая за создание группы pangolin_users
с конкретнымgid
226
PANGOLIN_USERS_GROUP_GUID=227 dnf install pangolin-dbms KMADMIN_PG_USER_GUID
Переменная отвечающая за создание пользователя kmadmin_pg
с конкретнымuid
126
KMADMIN_PG_USER_GUID=127 dnf install pangolin-dmbs KMADMIN_PG_GROUP_GUID
Переменная отвечающая за создание группы пользователя kmadmin_pg
с конкретнымgid
126
KMADMIN_PG_GROUP_GUID=127 dnf install pangolin-dbms -
(опционально) Восстановите основные каталоги продукта:
sudo cp -rf /oldroot/opt/pangolin_license /opt/
sudo chown postgres:postgres -R /opt/pangolin_license
----
sudo cp -rf /oldroot/pgdata /
sudo cp -rf /oldroot/pgerrorlogs /
sudo chown postgres:postgres -R /pgdata /pgerrorlogs
----
sudo cp -rf /oldroot/etc/pangolin-manager /etc/
sudo cp -rf /oldroot/etc/pangolin-auth-encryption /etc/
sudo chown postgres:postgres -R /etc/pangolin-manager /etc/pangolin-auth-encryption
----
sudo cp -rf /oldroot/home/postgres/.profile /home/postgres/
sudo chown postgres:postgres /home/postgres/.profile -
(опционально) Восстановите etcd:
sudo rm -rf /var/lib/etcd /etc/etcd
sudo cp -ra ~/pangolin_astrase17/etcd_backup_lib/etcd /var/lib/
sudo cp -ra ~/pangolin_astrase17/etcd_backup_conf/etcd /etc/ -
Настройте локали для запуска восстановленной СУБД:
- Для запуска с локалью
en_US.UTF-8
- Для запуска с локалью
ru_RU.UTF-8
По умолчанию локаль
ru_RU.UTF-8
- не установлена, поэтому необходимо выполнить изменения вpostgresql.base.conf
из/pgdata/06/data
:# Замените значения по умолчанию
< lc_monetary = 'ru_RU.UTF-8' # locale for monetary formatting
< lc_numeric = 'ru_RU.UTF-8' # locale for number formatting
< lc_time = 'ru_RU.UTF-8' # locale for time formatting
---
# На новые значения
> lc_monetary = 'en_US.UTF-8' # locale for monetary formatting
> lc_numeric = 'en_US.UTF-8' # locale for number formatting
> lc_time = 'en_US.UTF-8' # locale for time formattingОшибка, возникающая при запуске СУБД, если не исправить данную ошибку:
2025-05-06 14:10:48.430 GMT [19314] LOG: invalid value for parameter "lc_monetary": "ru_RU.UTF-8"
2025-05-06 14:10:48.430 GMT [19314] LOG: invalid value for parameter "lc_numeric": "ru_RU.UTF-8"
2025-05-06 14:10:48.430 GMT [19314] LOG: invalid value for parameter "lc_time": "ru_RU.UTF-8"
2025-05-06 17:10:48 MSK [19314]: [8-1] app=,user=,db=,client=,type=postmaster FATAL: configuration file "/pgdata/06/data/postgresql.base.conf" contains errors-
В
postgresql.base.conf
из/pgdata/06/data
изменения не производятся. -
Нужно выставить системную локаль в
ru_RU.UTF-8
:export LC_ALL="ru_RU.UTF-8"
export LC_CTYPE="ru_RU.UTF-8"
export LANG="ru_RU.UTF-8"
sudo dpkg-reconfigure locales# После запуска утилиты dpkg-reconfigure locales выбрать ru_RU.UTF-8Пример результата выполнения операции генерации новой локали:
...
Generating locales (this might take a while)...
ru_RU.UTF-8... done
Generation complete. -
Важно выполнить команду для определения локали, с которой БД была инициализирована:
sudo localedef -f UTF-8 -i en_US en_US.UTF-8
Иначе при запуске СУБД возникнет ошибка:
psql: ошибка: подключиться к серверу "127.0.0.1", порту 5433 не удалось: FATAL: database locale is incompatible with operating system
ПОДРОБНОСТИ: The database was initialized with LC_COLLATE "en_US.UTF-8", which is not recognized by setlocale().
ПОДСКАЗКА: Recreate the database with another locale or install the missing locale -
Запустите psql.
- Для запуска с локалью
-
Запустите компоненты СУБД Pangolin:
ВажноПри архитектуре типа cluster, произведите запуск сначала на основном узле и проверьте нет ли ошибок в логах, затем запускайте на остальных хостах согласно порядку описанному в начале инструкции
-
Без функциональности «Отказ от 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. Выведите компонент из режима паузы:
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 |
----------------------+----------------------------+--------------+-----------+----+-----------+
| <server_name> | <server_name>:<port> | Leader | running | 3 | |
| <server_name> | <server_name>:<port> | Sync Standby | streaming | 3 | 0 |Если роли распределились некорректно, выполните переключение:
switch
Шаг 4. Перестройка индексов до запуска пользовательской нагрузки
-
Создайте файл скрипта с содержимым:
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
------------------------------
Проверка результатов восстановления
Для проверки корректности работы СУБД рекомендуется использовать чек-лист проверки корректности работы.