Обновление ОС Astra 1.7 на версию 1.8 с предустановленной СУБД Pangolin
Перед началом выполнения процедуры обновления операционной системы убедитесь, что на сервере установлена версия СУБД 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с конкретнымuid26POSTGRES_USER_GUID=27 dnf install pangolin-dmbs POSTGRES_GROUP_GUIDПеременная отвечающая за создание группы пользователя postgresс конкретнымgid26POSTGRES_GROUP_GUID=27 dnf install pangolin-dbms PANGOLIN_USERS_GROUP_GUIDПеременная отвечающая за создание группы pangolin_usersс конкретнымgid226PANGOLIN_USERS_GROUP_GUID=227 dnf install pangolin-dbms KMADMIN_PG_USER_GUIDПеременная отвечающая за создание пользователя kmadmin_pgс конкретнымuid126KMADMIN_PG_USER_GUID=127 dnf install pangolin-dmbs KMADMIN_PG_GROUP_GUIDПеременная отвечающая за создание группы пользователя kmadmin_pgс конкретнымgid126KMADMIN_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
------------------------------
Проверка результатов восстановления
Для проверки корректности работы СУБД рекомендуется использовать чек-лист проверки корректности работы.