Ручное обновление с переносом данных СУБД Pangolin
Данный раздел рассматривает ручное обновление с переносом данных СУБД Pangolin с версии 6.5.2 до 7.1.0.
Каждый пункт будет начинаться с информации в круглых скобках о том, на каких узлах необходимо выполнить данный шаг. Все команды необходимо выполнять последовательно.
Например, сочетание (master, replica)
означает, что действия, указанные в пункте, необходимо выполнить сначала на основном узле, затем на реплике (при этом выполнять действия на арбитре не нужно).
Обновление СУБД может осуществляться пользователем с правами суперпользователя, а также пользователем postgres
.
Все команды ниже являются примерами. Их необходимо отредактировать в соответствии с требуемыми параметрами и конфигурациями. В названиях rpm-пакетов, при необходимости, в блоках кода замените наименование ОС и пакетного менеджера. Также, в данной инструкции, распакованный дистрибутив находится в каталоге под названием pangolin
.
Для предотвращения полной переливки данных на резервный узел кластера Pangolin и возможного нарушения доступности сервиса при переходе с версии Pangolin 6.5.2 на версию 7.1.0 настоятельно рекомендуется заблаговременно произвести операцию VACUUM FREEZE
во всех базах данных. Обратите внимание на пункт «Запуск процесса заморозки» в блоке проверки готовности к обновлению.
В случае, если обновление прошло неуспешно, произведите восстановление по инструкции «Восстановление после неудачного обновления с переносом данных».
Обозначения переменных
В разделе будут использоваться переменные для динамической настройки. Перед выполнением команд эти переменные будут экспортироваться. Скорректируйте значения относительно конкретного обновления.
PANGOLIN_VER
- новая версия СУБД Pangolin (формат -x.x.x
/x.x
);PANGOLIN_MAJOR_VER
- номер новой мажорной версии (формат -0x
)PANGOLIN_MAJOR_OLD_VER
- номер старой мажорной версии (формат -0x
)PANGOLIN_BACKUP_TOOLS
- новая версия компонента pangolin-backup-tools (формат -x.x.x
);PANGOLIN_POOLER
- новая версия компонента pangolin-pooler (формат -x.x.x
);PANGOLIN_MANGER
- новая версия компонента pangolin-manager (формат -x.x.x
);PANGOLIN_TIMESCALEDB
- новая версия компонента pangolin-timescaledb (формат -x.x.x
);PANGOLIN_OLD_VER
- исходная версия СУБД Pangolin (формат -x.x.x
/x.x
);PANGOLIN_FULL_VER
- новая версия СУБД Pangolin (формат -0x.00x.0x
);PANGOLIN_FULL_OLD_VER
- исходная версия СУБД Pangolin (формат -0x.00x.0x
).
Подготовка к обновлению
Перед переходом к процессу обновления необходимо ознакомиться с информацией в данном разделе.
Параметры стенда, затрагиваемые обновлением
В данном разделе представлен список параметров по которым могут быть применены следующие действия при обновлении:
- удаление;
- изменение;
- добавлены при отсутствии на стенде.
Параметры могут находиться в следующих конфигурационных файлах:
postgresql.conf
(для standalone конфигурации): добавление новых параметров из новой версии, замена старых значений в соответствии с правилом замены параметров;postgres.yml
(для конфигурации cluster): добавление новых параметров из новой версии, замена старых значений в соответствии с правилом замены параметров;pangolin-pooler.ini
: добавление новых параметров из новой версии, замена старых значений в соответствии с правилом замены параметров;postgresql.auto.conf
: добавление новых параметров из новой версии без замены старых значений;postgresql.base.conf
: добавление новых параметров из новой версии без замены старых значений;pg_hba.conf
: добавление новых параметров из новой версии без замены старых значений, кроме параметров типаpghba_users
(берутся из новой версии с заменой старых значений).
Правила замены параметров в файлах
Значение переменных
В разделе могут встречаться следующие переменные:
{{ PGHOME }}
— путь до каталогаPGHOME
серверной части;{{ PGHOME_CLIENT }}
— путь до каталога клиентской частиPGHOME_CLIENT
;{{ PGDATA }}
— путь до директории данныхPGDATA
;{{ PGBACKUP }}
— путь до каталога для создания РКPGBACKUP
;{{ PGBACKUP_BIN }}
— путь доpangolin_backup_files.bin_path
(по умолчанию/opt/pangolin-backup-tools/bin
);{{ CLUSTER_NAME }}
— имя кластера;{{ POOLER_BIN }}
— путь до каталогаpangolin_pooler_files.bin_dir
(по умолчанию/opt/pangolin-pooler/bin
);{{ USED_FQDN_HOST }}
— адрес из переменнойused_fqdn_host
, если доступен;{{ ANSIBLE_FQDN }}
— адресansible_fqdn
, еслиused_fqdn_host
недоступен;{{ PORTS_PG }}
— значение переменнойports.pg
;{{ PORTS_PGBOUNCER_PG_AUTH }}
— значение портаpgbouncer_pg_auth
.
Параметры с зависимостью от ядер CPU
Значение параметровmax_parallel_workers
и max_worker_processes
автоматически рассчитывается исходя из количества ядер CPU сервера, однако максимальное значение ограничено 32 рабочими потоками.
Формула расчета:
Максимальное количество параллельных процессов определяется следующим образом:
- Если предыдущее значение параметра больше или равно 32, оно сохраняется неизменным.
- Если число физических или виртуальных процессоров менее 32, устанавливается фиксированное значение равное 32.
- В любом другом случае используется фактическое количество процессоров на сервере.
Правила замены параметров в файлах конфигурации:
-
postgres.yml
:postgresql:
bin_dir: {{ PGHOME }}/bin
bin_dir_client: {{ PGHOME_CLIENT }}/bin
parameters:
pg_plugins_path: {{ PGHOME }}/lib
archive_command: {{ PGBACKUP_BIN }}/pg_probackup archive-push -B {{ PGBACKUP }} —instance {{ CLUSTER_NAME }} —wal-file-path=%p —wal-file-name=%f —compress —overwrite -j 4 —batch-size=100
superuser_reserved_connections: 10 # Значение по умолчанию
max_parallel_workers: {{ CPU <= x >= CPU_min & x <=32 }}
max_worker_processes: {{ CPU <= x >= CPU_min & x <=32 }}
enabled_extra_auth_methods: 'cert' # Значение по умолчанию
wal_keep_size: {{WAL_KEEP_SEGMENT_VALUE}}
callbacks:
on_role_change: {{ POOLER_BIN }}/pangolin-pooler-restart.sh
log:
file_name: pangolin-manager-%Y-%m-%d_%H%M%S.log
bootstrap.dcs.postgresql.parameters:
max_worker_processes: {{ CPU <= x >= CPU_min & x <=32 }}Параметр Новое значение / Формат С чем связано обновление параметра bin_dir
{{ PGHOME }}/bin
Изменен путь к серверной части ( PGHOME
)bin_dir_client
{{ PGHOME_CLIENT }}/bin
Разделение клиентской и серверной части pg_plugins_path
{{ PGHOME }}/lib
Разделение клиентской и серверной части и изменение пути до PGHOME
archive_command
{{ PGBACKUP_BIN }}/pg_probackup archive-push -B {{ PGBACKUP }} —instance {{ CLUSTER_NAME }} —wal-file-path=%p —wal-file-name=%f —compress —overwrite -j 4 —batch-size=100
Возможны изменения путей по умолчанию в переменных команды superuser_reserved_connections
10
Изменены минимальные системные требования max_parallel_workers
{{ CPU <= x >= CPU_min & x <=32 }}
Изменены минимальные системные требования max_worker_processes
{{ CPU <= x >= CPU_min & x <=32 }}
Только для standalone-конфигураций. Изменены минимальные системные требования enabled_extra_auth_methods
cert
Только при обновлении с переносом данных. Изменены требования по безопасности wal_keep_size
{{WAL_KEEP_SEGMENT_VALUE}}
Добавление/изменение параметра в связи с переходом от определения wal_keep_segments
кwal_keep_size
on_role_change
{{ POOLER_BIN }}/pangolin-pooler-restart.sh
Изменение пути до каталога pangolin_pooler_files.bin_dir
({{ POOLER_BIN }}
)log.file_name
pangolin-manager-%Y-%m-%d_%H%M%S.log
Изменено имя лог-файла bootstrap.dcs.postgresql.parameters.max_worker_processes
{{ CPU <= x >= CPU_min & x <=32 }}
Изменены минимальные системные требования -
postgresql.conf
:hba_file: {{ PGDATA }}/pg_hba.conf
ident_file: < путь до папки 'PGDATA' >/pg_ident.conf
pg_plugins_path: {{ PGHOME }}/lib
archive_command: {{ PGBACKUP_BIN }}/pg_probackup archive-push -B {{ PGBACKUP }} —instance {{ CLUSTER_NAME }} —wal-file-path=%p —wal-file-name=%f —compress —overwrite -j 4 —batch-size=100
superuser_reserved_connections: 10 # Значение по умолчанию
max_parallel_workers: {{ CPU <= x >= CPU_min & x <=32 }}
max_worker_processes: {{ CPU <= x >= CPU_min & x <=32 }}
enabled_extra_auth_methods: 'cert' # Значение по умолчанию
wal_keep_size: {{WAL_KEEP_SEGMENT_VALUE}}Параметр Новое значение / Формат С чем связано обновление параметра hba_file
{{ PGDATA }}/pg_hba.conf
Изменен путь до PGDATA
ident_file
{{ PGDATA }}/pg_ident.conf
Только при обновлении с переносом данных. Изменен путь до PGDATA
pg_plugins_path
{{ PGHOME }}/lib
Изменен путь до PGHOME
в новой версииarchive_command
{{ PGBACKUP_BIN }}/pg_probackup archive-push -B {{ PGBACKUP }} —instance {{ CLUSTER_NAME }} —wal-file-path=%p —wal-file-name=%f —compress —overwrite -j 4 —batch-size=100
Возможны изменения путей по умолчанию в переменных команды superuser_reserved_connections
10
Изменены минимальные системные требования max_parallel_workers
{{ CPU <= x >= CPU_min & x <=32 }}
Изменены минимальные системные требования max_worker_processes
{{ CPU <= x >= CPU_min & x <=32 }}
Только для standalone-конфигураций. Изменены минимальные системные требования enabled_extra_auth_methods
cert
Только при обновлении с переносом данных. Изменены требования по безопасности wal_keep_size
{{WAL_KEEP_SEGMENT_VALUE}}
Добавление/изменение параметра в связи с переходом от определения wal_keep_segments
кwal_keep_size
-
pangolin-poller.ini
:databases:
* = host={{ USED_FQDN_HOST or ANSIBLE_FQDN }} port={{ PORTS_PG }} auth_port={{ PORTS_PGBOUNCER_PG_AUTH }} auth_pool_size=1
pgbouncer:
admin_users: pgbouncerПараметр Новое значение / Формат С чем связано обновление параметра databases
* = host={{ USED_FQDN_HOST or ANSIBLE_FQDN }} port={{ PORTS_PG }} auth_port={{ PORTS_PGBOUNCER_PG_AUTH }} auth_pool_size=1
Обновление параметра связано с возможным изменением параметра ports.pg
pgbouncer.admin_users
pgbouncer
Добавление нового параметра при возможном отсутствии
Удаляемые параметры в файлах:
-
postgres.yml
:postgresql:
authentication:
replication.password: * # Для конфигураций с включенным 'auth_reencrypt', удаление параметра в связи с требованиями по безопасности подключения
superuser.password: * # Для конфигураций с включенным 'auth_reencrypt', удаление параметра в связи с требованиями по безопасности подключения
parameters:
wal_keep_segments: * # Удаление параметра ввиду перехода от определения 'wal_keep_segments' к 'wal_keep_size' -
pangolin-poller.ini
:auth_user: * # Удаление параметра в связи с требованиями по безопасности подключения
auth_query: * # Удаление параметра в связи с требованиями по безопасности подключения
Список ограничений перед проведением обновления с переносом данных СУБД Pangolin
Проверка на наличие и устранение данных ограничений происходит автоматически при выборе автоматизированного способа обновления.
Перед обновлением необходимо произвести проверку готовности СУБД и устранить выявленные проблемы. Список необходимых проверок представлен в разделе «Проверка готовности к обновлению».
Также перед обновлением необходимо выполнить проверку на ограничения. Для этого выполните следующие действия:
-
Убедитесь, что у существующих пользователей и администраторов БД есть необходимые полномочия на создание объектов и назначения прав в полном объеме.
-
Ознакомьтесь с особенностями обновления, связанные с переходом на ядро PostgreSQL 17.5.
-
Проверьте наличие расширений, установленных в схему
public
или в системный каталог (рекомендуется: перенести в схемуext
). -
В случае кластерной конфигурации, обновите строку подключения к СУБД (проверьте значение портов) и убедитесь, что в строке указаны оба узла кластера (active и standby) так как в процессе обновления утилита
confd
будет автоматически удалена. Пример исправления неактуальной строки для подключения:Строку:
jdbc:postgresql://127.0.0.1:6544,127.0.0.2:6544/dbname?prepareThreshold=0`
Исправьте на:
jdbc:postgresql://127.0.0.1:6544,127.0.0.2:6544/dbname?targetServerType=master&prepareThreshold=0
-
В случае использования расширения
timescaledb
убедитесь, что обновляемая версия расширения не ниже 2.19.3. В противном случае необходимо сначала обновить расширение до этой версии. Если поднять версию расширения в рамках одной версии СУБД невозможно, следует произвести обновление СУБД на промежуточную, а затем на целевую версию. Уточнение по процессу обновления стендов с предустановленным расширениемtimescaledb
указано в «Таблице поддерживаемых для обновления версий СУБД».
Сценарий обновления
Шаг 1. Резервное копирование рабочих файлов компонентов
-
(master, replica) Сохраните рабочие файлы компонентов СУБД Pangolin:
-
general
:# дополнительно создать на узле arbiter
mkdir -p ~/pangolin/cache/backup/general
# дополнительно сохранить на узле arbiter
sudo cp -ra /usr/local/sbin/dynmotd.sh ~/pangolin/cache/backup/general/
sudo cp -ra /home/postgres/.bash_profile ~/pangolin/cache/backup/general/
sudo cp -ra /etc/sudoers.d/10-kmadmin_pg ~/pangolin/cache/backup/general/
sudo cp -ra /etc/sudoers.d/10-postgres ~/pangolin/cache/backup/general/
sudo cp -ra /etc/pangolin-auth-encryption/enc_utils_auth_settings.cfg ~/pangolin/cache/backup/general/
sudo cp -ra /etc/pangolin-security-utilities/enc_connection_settings_cert.cfg ~/pangolin/cache/backup/general/ -
Pangolin Pooler:
mkdir -p ~/pangolin/cache/backup/pooler
sudo cp -ra /usr/lib/systemd/system/pangolin-pooler.service ~/pangolin/cache/backup/pooler/
sudo cp -ra /etc/pangolin-pooler/pangolin-pooler.ini ~/pangolin/cache/backup/pooler/
sudo cp -ra /etc/pangolin-pooler/userlist.txt ~/pangolin/cache/backup/pooler/
sudo cp -ra /opt/pangolin-pooler/bin/pangolin-pooler ~/pangolin/cache/backup/pooler/
sudo cp -ra /opt/pangolin-pooler/share/man/man1/pangolin-pooler.1 ~/pangolin/cache/backup/pooler/
sudo cp -ra /opt/pangolin-pooler/share/man/man5/pangolin-pooler.5 ~/pangolin/cache/backup/pooler/ -
Pangolin Manager:
mkdir -p ~/pangolin/cache/backup/manager
sudo cp -ra /usr/lib/systemd/system/pangolin-manager.service ~/pangolin/cache/backup/manager/
sudo cp -ra /etc/pangolin-manager/postgres.yml ~/pangolin/cache/backup/manager/
sudo cp -ra /opt/pangolin-pooler/bin/pangolin-pooler-restart.sh ~/pangolin/cache/backup/manager/
sudo cp -ra /opt/pangolin-manager/bin/pangolin-manager ~/pangolin/cache/backup/manager/
sudo cp -ra /pgdata/06/data/patroni.dynamic.json ~/pangolin/cache/backup/manager/ -
pangolin-auth-reencrypt
:mkdir -p ~/pangolin/cache/backup/pangolin_auth_reencrypt
sudo cp -ra /etc/systemd/system/multi-user.target.wants/pangolin-auth-reencrypt@kmadmin_pg.service ~/pangolin/cache/backup/pangolin_auth_reencrypt/
sudo cp -ra /etc/systemd/system/multi-user.target.wants/pangolin-auth-reencrypt@postgres.service ~/pangolin/cache/backup/pangolin_auth_reencrypt/
sudo cp -ra /opt/pangolin-auth-reencrypt/bin/pangolin-auth-reencrypt ~/pangolin/cache/backup/pangolin_auth_reencrypt/
sudo cp -ra /etc/pangolin-auth-reencrypt/enc_util.cfg ~/pangolin/cache/backup/pangolin_auth_reencrypt/
sudo cp -ra /etc/pangolin-auth-reencrypt/kmadmin_pg ~/pangolin/cache/backup/pangolin_auth_reencrypt/
sudo cp -ra /etc/pangolin-auth-reencrypt/postgres ~/pangolin/cache/backup/pangolin_auth_reencrypt/
sudo cp -ra /etc/pangolin-auth-reencrypt/kmadmin_pg/enc_params.cfg.kmadmin_pg ~/pangolin/cache/backup/pangolin_auth_reencrypt/
sudo cp -ra /etc/pangolin-auth-reencrypt/postgres/enc_params.cfg.postgres ~/pangolin/cache/backup/pangolin_auth_reencrypt/ -
pangolin-certs-rotate
:mkdir -p ~/pangolin/cache/backup/pangolin-certs-rotate
sudo cp -ra /usr/lib/systemd/system/pangolin-certs-rotate.service ~/pangolin/cache/backup/pangolin-certs-rotate/
sudo cp -ra /opt/pangolin-certs-rotate/bin/pangolin-certs-rotate ~/pangolin/cache/backup/pangolin-certs-rotate/
sudo cp -ra /etc/pangolin-certs-rotate/pangolin-certs-rotate.yml ~/pangolin/cache/backup/pangolin-certs-rotate/ -
pangolin_dbms
:export PANGOLIN_OLD_VER=6.x
export PANGOLIN_MAJOR_OLD_VER=06
mkdir -p ~/pangolin/cache/backup/pangolin_dbms
mkdir -p ~/pangolin/cache/backup/rpms
sudo dnf download --destdir=/home/<user>/pangolin/cache/backup/pangolin_dbms/ pangolin-dbms-$PANGOLIN_OLD_VER
sudo cp -ra /usr/pangolin-$PANGOLIN_OLD_VER/ ~/pangolin/cache/backup/pangolin_dbms/
sudo cp -ra /pgdata/$PANGOLIN_MAJOR_OLD_VER/data/postgresql.conf ~/pangolin/cache/backup/pangolin_dbms/
sudo cp -ra /pgdata/$PANGOLIN_MAJOR_OLD_VER/data/pg_hba.conf ~/pangolin/cache/backup/pangolin_dbms/
sudo cp -ra /pgdata/$PANGOLIN_MAJOR_OLD_VER/data/postgresql.base.conf ~/pangolin/cache/backup/pangolin_dbms/
sudo cp -ra /pgdata/$PANGOLIN_MAJOR_OLD_VER/data/postgresql.auto.conf ~/pangolin/cache/backup/pangolin_dbms/
sudo cp -ra /pgdata/$PANGOLIN_MAJOR_OLD_VER/data/pg_quota.conf ~/pangolin/cache/backup/pangolin_dbms/
sudo cp -ra /pgdata/$PANGOLIN_MAJOR_OLD_VER/data/pg_ident.conf ~/pangolin/cache/backup/pangolin_dbms/
sudo cp -ra /usr/pangolin-$PANGOLIN_OLD_VER/share/postgresql.service ~/pangolin/cache/backup/pangolin_dbms/ -
Остальные пакеты
export PANGOLIN_OLD_VER=6.x
mkdir -p ~/pangolin/cache/backup/rpms
sudo dnf download --destdir=/home/<user>/pangolin/cache/backup/rpms/ pangolin-dbms-$PANGOLIN_OLD_VER-client pangolin-auth-reencrypt pangolin-backup-tools pangolin-backup-tools-venv pangolin-certs-rotate pangolin-diagnostic-tool pangolin-manager pangolin-manager-venv pangolin-pooler pangolin-security-utilities pangolin-timescaledb-$PANGOLIN_OLD_VER-apache -
-
(master) Создайте каталог для резервной копии:
sudo mkdir -p /pgarclogs/cache/backup/pangolin_dbms /pgarclogs/cache/backup/pangolin_dbms{backups,wal}
sudo chmod -R 0700 /pgarclogs/cache/backup/pangolin_dbms
sudo chown -R postgres:postgres /pgarclogs/cache/ -
(master) Добавьте запись
host replication postgres 127.0.0.1/32 scram-sha-256
первой строкой в файл/pgdata/0<major_ver>/data/pg_hba.conf
или в файл/etc/pangolin-manager/postgres.yml
в секциюpg_hba
для конфигурации с Pangolin Manager. -
(master) Перечитайте обновленный конфигурационный файл БД.
-
Для конфигурации без Pangolin Manager:
sudo su - postgres
export PANGOLIN_MAJOR_OLD_VER=06
/usr/pangolin/bin/pg_ctl reload -D /pgdata/$PANGOLIN_MAJOR_OLD_VER/data -
Для конфигурации с Pangolin Manager:
sudo iu - postgres /opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml reload clustername
Ошибка «This system supports the C.UTF-8 locale which is recommended»
Если при вызове утилиты возникает ошибка в локалях кодировки:
This system supports the C.UTF-8 locale which is recommended
, то выполните следующую команду:echo "
export LC_ALL=C.UTF-8
export LANG=C.UTF-8" >> .bash_profile &&\
source .bash_profile -
-
(master) Выполните резервное копирование:
export PANGOLIN_MAJOR_OLD_VER=06
export PGPASSWORD=<password_postgres>
sudo -iu postgres /opt/pangolin-backup-tools/bin/pg_probackup init -B /pgarclogs/cache/backup/pangolin_dbms
sudo -iu postgres /opt/pangolin-backup-tools/bin/pg_probackup add-instance -B /pgarclogs/cache/backup/pangolin_dbms -D /pgdata/$PANGOLIN_MAJOR_OLD_VER/data --instance clustername
sudo -iu postgres PGPASSWORD=$PGPASSWORD /opt/pangolin-backup-tools/bin/pg_probackup backup -B /pgarclogs/cache/backup/pangolin_dbms --instance clustername -b FULL -h 127.0.0.1 -p 5433 -U postgres --compress-algorithm=zlib --compress-level=4 -j 14 --temp-slot --stream --progress -w -
(master) Удалите строку
host replication postgres 127.0.0.1/32 scram-sha-256
из файла/pgdata/0<major_ver>/data/pg_hba.conf
или из файла/etc/pangolin-manager/postgres.yml
для конфигурации с Pangolin Manager. -
(master) Перечитайте обновленный конфигурационный файл БД.
-
Для конфигурации без Pangolin Manager:
export PANGOLIN_MAJOR_OLD_VER=06
sudo -iu postgres /usr/pangolin/bin/pg_ctl reload -D /pgdata/$PANGOLIN_MAJOR_OLD_VER/data -
Для конфигурации с Pangolin Manager:
sudo -iu postgres /opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml reload clustername
-
Шаг 2. Подготовительные действия
-
(master, replica, arbiter) Запустите скрипт с базовыми проверками, определяющими готовность стенда к обновлению. Для этого создайте файл
pangolin_checks.sh
и заполните его содержимым представленным ниже:export PANGOLIN_OLD_VER=6.x
sudo touch ~/pangolin/cache/pangolin_checks.sh
sudo chmod 0700 ~/pangolin/cache/pangolin_checks.sh
sudo STAND=<роль ноды> CONFIGURATION=<тип конфигурации> ./pangolin/cache/pangolin_checks.shpangolin-check.sh
pangolin-check.sh
:function log_form {
echo -e "\e[32m===============================[0m"
echo -e "\e[32mКонфигурация: $CONFIGURATION[0m"
echo -e "\e[32mСтенд: $STAND[0m"
echo -e "\e[32m===============================[0m"
}
function error_message {
echo -e "\e[31mERROR: Проверка не пройдена. $1\e[0m"
}
function success_message {
echo -e "\e[32mOK: Проверка пройдена. $1\e[0m"
}
function warning_message {
echo -e "\e[33mWARNING: $1\e[0m"
}
log_form
if [ -z "$STAND" ] || [ -z "$CONFIGURATION" ]; then
echo -e "\e[31mERROR: Передайте обязательные переменные перед запуском скрипта для корректной проверки. Например: STAND=master CONFIGURATION=standalone ./pangolin_checks.sh.\e[0m"
exit 1
fi
# Проверка наличия локали en_us.utf-8 или en_us.utf8
if locale -a | grep -qE "en_US.utf-8|en_US.utf8"; then
success_message "Локаль en_US.utf-8 или en_US.utf8 установлена."
else
error_message "Необходимо установить локаль en_US.utf-8 или en_US.utf8."
fi
# Определение списка рабочих файлов в зависимости от конфигурации и стенда
file_common=("/etc/pangolin-pooler/pangolin-pooler.ini" "/usr/lib/systemd/system/pangolin-pooler.service" "/usr/local/bin/pangolin-pooler" "/opt/pangolin-auth-reencrypt/bin/pangolin-auth-reencrypt" "/usr/lib/systemd/system/pangolin-auth-reencrypt@.service" "/etc/pangolin-auth-reencrypt/enc_util.cfg" "/opt/pangolin-certs-rotate/bin/pangolin-certs-rotate" "/usr/lib/systemd/system/pangolin-certs-rotate.service" "/etc/pangolin-certs-rotate/pangolin-certs-rotate.yml")
if [ "$CONFIGURATION" = "cluster" ]; then
if [ "$STAND" != "arbiter" ]; then
additional_files=("/usr/lib/systemd/system/pangolin-manager.service" "/etc/pangolin-manager/postgres.yml")
fi
else
if [ "$STAND" != "arbiter" ]; then
additional_files=("/usr/pangolin-6.5/share/postgresql.service")
fi
fi
if [ "$STAND" != "arbiter" ]; then
files_all=("${file_common[@]}" "${additional_files[@]}")
else
files_all=("${additional_files[@]}")
fi
# Проверка наличия рабочих файлов
for file in "${files_all[@]}"; do
if [ -f "$file" ]; then
success_message "Рабочий файл $file найден."
else
error_message "Рабочий файл $file не найден. Для конфигурации $CONFIGURATION наличие данного файла необходимо для корректного обновления."
fi
done
# Определение списка сервисов в зависимости от конфигурации
service_common=("pangolin-pooler" "pangolin-certs-rotate" "pangolin-auth-reencrypt@postgres.service" "pangolin-auth-reencrypt@kmadmin_pg.service")
if [ "$CONFIGURATION" = "cluster" ]; then
if [ "$STAND" != "arbiter" ]; then
additional_services=("pangolin-manager")
else
additional_services=("etcd")
fi
else
if [ "$STAND" != "arbiter" ]; then
additional_services=("postgresql")
fi
fi
if [ "$STAND" != "arbiter" ]; then
service_all=("${service_common[@]}" "${additional_services[@]}")
else
service_all=("${additional_services[@]}")
fi
# Проверка состояния сервисов
for service in "${service_all[@]}"; do
if systemctl is-active --quiet "$service"; then
success_message "Сервис $service активен."
else
error_message "Необходимо запустить сервис $service."
fi
done
if [ "$STAND" != "arbiter" ]; then
# Проверка наличия установленного rpm пакета
PACKAGE_NAME="pangolin-dbms-$PANGOLIN_OLD_VER"
if command -v yum &> /dev/null; then
PACKAGE_MANAGER="yum"
elif command -v dnf &> /dev/null; then
PACKAGE_MANAGER="dnf"
elif command -v apt &> /dev/null; then
PACKAGE_MANAGER="apt"
elif command -v apt-get &> /dev/null; then
PACKAGE_MANAGER="apt-get"
else
error_message "Необходимо установить пакетный менеджер (yum/dnf/apt/apt-get)."
exit 1
fi
if $PACKAGE_MANAGER list installed | grep -q "$PACKAGE_NAME"; then
success_message "Пакет $PACKAGE_NAME установлен."
else
error_message "Пакет $PACKAGE_NAME не обнаружен на стенде."
fi
# Получение версии пакета
PACKAGE_VERSION=$($PACKAGE_MANAGER list installed | grep "$PACKAGE_NAME" | head -1 | awk '{print $2}')
# Извлечение числовой части версии
NUMERIC_VERSION=$(echo "$PACKAGE_VERSION" | awk -F'[.-]' '{print $1 $2 $3}')
# Проверка версии пакета
if [[ $NUMERIC_VERSION =~ ^65[2-9]$ ]] || [[ $NUMERIC_VERSION =~ ^66[0-9]$ ]]; then
success_message "Версия исходного пакета $PACKAGE_NAME ($NUMERIC_VERSION) соответствует требованиям инструкции по ручному обновлению с переносом данных."
else
error_message "Инструкция по ручному обновлению не рассматривает обновление с исходной версии пакета $PACKAGE_NAME ($NUMERIC_VERSION), полученной со стенда. Инструкция рассматривает обновление с версий 6.5.2 на 7.1.0"
fi
fi
warning_message "Набор проверок не является исчерпывающим. Для обновления рекомендуем использовать автоматизированные скрипты."Ожидаемый результат:
Результат при неготовности стенда к обновлению:
Предупреждение!Набор проверок не является исчерпывающим. Для обновления рекомендуется использовать автоматизированные скрипты.
-
(master, replica, arbiter) Скачайте дистрибутив в рабочий каталог и распакуйте его. Далее по инструкции путь к компонентам дистрибутива будет формироваться с использованием префикса
~/pangolin
.Действие по скачиванию дистрибутива:
mkdir -p ~/pangolin/pangolin_710
sudo tar -xzf installer_sberlinux9-D-07.001.00-distrib.tar.gz -C ~/pangolin/pangolin_710 -
(master) Сохраните исходные значения стенда для последующей инициализации новой БД:
sudo -iu postgres psql -c "SHOW SERVER_ENCODING;" > current_value.txt
sudo -iu postgres psql -c "SHOW LC_COLLATE;" >> current_value.txt
sudo -iu postgres psql -c "SHOW LC_CTYPE;" >> current_value.txt
sudo -iu postgres psql -c "SHOW LC_MESSAGES;" >> current_value.txt
sudo -iu postgres psql -c "SHOW LC_MONETARY;" >> current_value.txt
sudo -iu postgres psql -c "SHOW LC_NUMERIC;" >> current_value.txt
sudo -iu postgres psql -c "SHOW LC_TIME;" >> current_value.txt
sudo -iu postgres psql -c "SELECT oid, pg_tablespace_location(oid) FROM pg_tablespace WHERE spcname not in ('pg_default', 'pg_global');" >> current_value.txt -
(master, replica) Разверните виртуальное окружение и перезапустите сессию пользователей:
postgres
,kmadmin_pg
:export PANGOLIN_VER=7.1.0
sudo tar -xz -f ~/pangolin/pangolin_710/3rdparty/3rdparty.tar.gz -C ~/pangolin/pangolin_710/3rdparty/
sudo dnf install -y ~/pangolin/pangolin_710/3rdparty/pangolin-ansible-venv-controlled-$PANGOLIN_VER-sberlinux9.x86_64.rpm
sudo systemctl restart user@$(id -u postgres)
sudo systemctl restart user@$(id -u kmadmin_pg) -
(master) Подготовьте исходную базу для корректной миграции:
sudo -iu postgres
echo "
SELECT grant_opts AS grant_opts_start FROM (SELECT unnest(proacl) AS grant_opts FROM pg_proc WHERE proname = 'pg_start_backup' AND proargtypes = array[25,16,16]::oidvector AND pronamespace = 11) AS all_grants, pg_proc WHERE proname = 'pg_start_backup' AND proargtypes = array[25,16,16]::oidvector AND pronamespace = 11 AND NOT (grant_opts = any( acldefault('f', proowner)));
SELECT revoke_opts AS revoke_opts_start FROM (SELECT unnest(acldefault('f', proowner)) AS revoke_opts FROM pg_proc WHERE proname = 'pg_start_backup' AND proargtypes = array[25,16,16]::oidvector AND pronamespace = 11) AS all_defs, pg_proc WHERE proname = 'pg_start_backup' AND proargtypes = array[25,16,16]::oidvector AND pronamespace = 11 AND NOT (revoke_opts = any(proacl));
SELECT grant_opts AS grant_opts_stop FROM (SELECT unnest(proacl) AS grant_opts FROM pg_proc WHERE proname = 'pg_stop_backup' AND proargtypes = array[16,16]::oidvector AND pronamespace = 11) AS all_grants, pg_proc WHERE proname = 'pg_stop_backup' AND proargtypes = array[16,16]::oidvector AND pronamespace = 11 AND NOT (grant_opts = any( acldefault('f', proowner)));
SELECT revoke_opts AS revoke_opts_stop FROM (SELECT unnest(acldefault('f', proowner)) AS revoke_opts FROM pg_proc WHERE proname = 'pg_stop_backup' AND proargtypes = array[16,16]::oidvector AND pronamespace = 11) AS all_defs, pg_proc WHERE proname = 'pg_stop_backup' AND proargtypes = array[16,16]::oidvector AND pronamespace = 11 AND NOT (revoke_opts = any(proacl));
" > /home/postgres/change_0.sql
echo "
DELETE FROM pg_depend using (SELECT c.oid AS c_id, p.oid AS p_id, p.proname FROM pg_catalog.pg_class c join pg_catalog.pg_proc p ON c.relname = 'pg_proc' JOIN pg_catalog.pg_namespace ns ON p.pronamespace=ns.oid AND ns.nspname='pg_catalog') flt WHERE pg_depend.refclassid=flt.c_id AND pg_depend.refobjid = flt.p_id AND pg_depend.deptype ='p' AND pg_depend.classid=0 AND pg_depend.objid=0 AND pg_depend.objsubid=0 AND flt.proname IN (SELECT unnest(string_to_array('check_role_params,check_roles_is_on',',')));
DROP FUNCTION IF EXISTS pg_catalog.check_role_params(role text, settings_to_check text), pg_catalog.check_roles_is_on();
" > /home/postgres/change_1.sql
echo "
UPDATE pg_proc SET proacl = NULL WHERE proname = 'pg_start_backup' AND proargtypes = array[25,16,16]::oidvector AND pronamespace = 11;
UPDATE pg_proc SET proacl = NULL WHERE proname = 'pg_stop_backup' AND proargtypes = array[16,16]::oidvector AND pronamespace = 11;
UPDATE pg_proc SET proacl = NULL WHERE proname = 'pg_stop_backup' AND cardinality(proargtypes) = 0 AND pronamespace = 11;
" > /home/postgres/change_2.sql
echo "
databases=(\$(\$PGHOME_CLIENT/bin/psql -t --csv -c \"SELECT datname FROM pg_database WHERE datname not in ('template0', 'template1');\"))
echo \"databases: \" \$databases
for ud in \"\${databases[@]}\"; do
echo \"databases: \" \$ud
\$PGHOME_CLIENT/bin/psql -d \$ud -f /home/postgres/change_0.sql -1
done
databases=(\$(\$PGHOME_CLIENT/bin/psql -t --csv -c \"SELECT datname FROM pg_database;\"))
echo \"databases: \" \$databases
for ud in \"\${databases[@]}\"; do
echo \"database: \" \$ud
\$PGHOME_CLIENT/bin/psql -c \"UPDATE pg_database SET datallowconn = true WHERE datname = 'template0';\"
\$PGHOME_CLIENT/bin/psql -d \$ud -f /home/postgres/change_1.sql -1
\$PGHOME_CLIENT/bin/psql -c \"UPDATE pg_database SET datallowconn = false WHERE datname = 'template0';\"
done
databases=(\$(\$PGHOME_CLIENT/bin/psql -t --csv -c \"SELECT datname FROM pg_database WHERE datname not in ('template0', 'template1');\"))
echo \"databases: \" \$databases
for ud in \"\${databases[@]}\"; do
echo \"databases: \" \$ud
\$PGHOME_CLIENT/bin/psql -d \$ud -f /home/postgres/change_2.sql -1
done
" > /home/postgres/run_precondition.sh
chmod 0700 run_precondition.sh
./run_precondition.sh >> current_value.txt
exit -
(master, replica) Сформируйте конфигурационные файлы для работы с новой версией:
mkdir -p ~/pangolin/cache/merge
# для standalone конфигурации
sudo cp -r /pgdata/06/data/postgresql.conf ~/pangolin/cache/merge/postgresql.conf
# для кластерной конфигурации
sudo cp -r /etc/pangolin-manager/postgres.yml ~/pangolin/cache/merge/postgres.yml
#точечная актуализация или добавление параметров ~/pangolin/cache/merge/postgresql.conf. Для конфигурации без pangolin-manager
archive_command = '/opt/pangolin-backup-tools/bin/pg_probackup archive-push -B /pgarclogs/07 --instance clustername --wal-file-path=%p --wal-file-name=%f --compress --overwrite -j 4 --batch-size=100'
log_directory = '/pangolinlogs/pangolin-dbms'
pg_plugins_path = /opt/pangolin-dbms-server-7/lib
hba_file = '/pgdata/07/data/pg_hba.conf'
ident_file = '/pgdata/07/data/pg_ident.conf'
#точечная актуализация или добавление параметров ~/pangolin/cache/merge/postgres.yml. Для конфигурации с Pangolin Manager.
postgresql:
bin_dir: /opt/pangolin-dbms-server-7/bin
bin_dir_client: /opt/pangolin-dbms-client-7/bin
data_dir: /pgdata/07/data/
parameters:
archive_command: /opt/pangolin-backup-tools/bin/pg_probackup archive-push -B /pgarclogs/07 --instance clustername --wal-file-path=%p --wal-file-name=%f --compress --overwrite -j 4 --batch-size=100
pg_plugins_path: /opt/pangolin-dbms-server-7/lib -
(master, replica) Актуализируйте
.bash_profile
иsudoers
:sudo sed -i 's/PGHOME=\/usr\/pangolin-6.5/PGHOME=\/opt\/pangolin-dbms-server-7/g' /home/postgres/.bash_profile
sudo sed -i 's/PGHOME_CLIENT=\/usr\/pangolin-dbms-client-6.5/PGHOME_CLIENT=\/opt\/pangolin-dbms-client-7/g' /home/postgres/.bash_profile
sudo sed -i 's/PG_LICENSE_PATH=\/opt\/pangolin_license/PG_LICENSE_PATH=\/opt\/pangolin-license/g' /home/postgres/.bash_profile
sudo sed -i 's/pgdata\/06/pgdata\/07/g' /home/postgres/.bash_profile
sudo sed -i 's/pgerrorlogs\/06/pangolinlogs\/pangolin-dbms/g' /home/postgres/.bash_profile -
(master) Проверьте отсутствие большого количества транзакций с незавершенным статусом. Для этого выполните следующий запрос:
sudo -iu postgres
psqlSELECT *
FROM
(WITH mysql AS
(SELECT *
FROM pg_stat_database) SELECT db.datname,
(mysql.xact_commit::text::bigint - datfrozenxid::text::bigint) / 1048576 AS clog_cnt
FROM pg_database db,
mysql
WHERE db.oid=mysql.datid) mysql2
WHERE clog_cnt>3;Результат выполнения данного запроса — таблица с колонками
datname
(имя БД) иclog_cnt
(количество файлов clog). Если результат запроса будет не пустой, то для всех полученных БД необходимо выполнить команду:vacuumdb -v -d db_name
, гдеdb_name
- имя БД, полученное в результате выполнения запроса выше. -
(master) Выполните проверку состояния близости БД к пороговому значению заморозки транзакций
autovacuum_freeze_max_age
. Для этого выполните SQL-скрипт для каждой базы данных:WITH tab_opts_toasts AS
(
SELECT c.oid reloid,
c.reltoastrelid reltoast,
c.relkind relkind,
ot.option_value::bigint force_freeze_age,
c.relnamespace::regnamespace tab_schema,
c.relname relname,
age(c.relfrozenxid) tab_frozen_age
FROM pg_class c LEFT OUTER JOIN pg_options_to_table(c.reloptions) ot ON ot.option_name = 'autovacuum_freeze_max_age'
WHERE relkind = ANY('{"r","t","m"}')
)
SELECT
current_database() db,
CASE tot.relkind WHEN 'r' THEN 'table autovacuum_freeze_max_age'
WHEN 't' THEN 'TOAST autovacuum_freeze_max_age'
WHEN 'm' THEN 'mview autovacuum_freeze_max_age'
END reason,
CASE WHEN tot.relkind = 't' THEN parents.tab_schema ELSE tot.tab_schema END tab_schema,
CASE WHEN tot.relkind = 't' THEN 'TOAST of '||parents.relname ELSE tot.relname END tabname,
tot.tab_frozen_age,
tot.force_freeze_age
FROM tab_opts_toasts tot LEFT OUTER JOIN tab_opts_toasts parents ON parents.reltoast = tot.reloid
WHERE tot.force_freeze_age IS NOT NULL and tot.tab_frozen_age >= tot.force_freeze_age::bigint * 0.8
UNION ALL
SELECT
current_database() db,
'SYSTEM autovacuum_freeze_max_age' reason,
CASE WHEN tot.relkind = 't' THEN parents.tab_schema ELSE tot.tab_schema END tab_schema,
CASE WHEN tot.relkind = 't' THEN 'TOAST of '||parents.relname ELSE tot.relname END tabname,
tot.tab_frozen_age,
current_setting('autovacuum_freeze_max_age')::bigint force_freeze_age
FROM tab_opts_toasts tot LEFT OUTER JOIN tab_opts_toasts parents ON parents.reltoast = tot.reloid
WHERE tot.tab_frozen_age >= current_setting('autovacuum_freeze_max_age')::bigint * 0.8
;Результат выполнения запроса
Результат выполнения данного запроса — таблица со следующими колонками:
-
db
- в какой БД найдена таблица; -
reason
- причина попадания таблицы в выборку:table autovacuum_freeze_max_age
- превышено 80% порога индивидуального порога таблицы;TOAST autovacuum_freeze_max_age
- 80% порога, заданного на этой таблице по ее TOAST (toast.autovacuum_freeze_max_age
);mview autovacuum_freeze_max_age
- 80% индивидуального порога по mview, необходимо увеличить значение параметраautovacuum_freeze_max_age
через командуALTER MATERIALIZED VIEW
;SYSTEM autovacuum_freeze_max_age
- превышено 80% системногоautovacuum_freeze_max_age
;
-
tab_schema
- схема таблицы для table/mview, схема родительской таблицы для TOAST; -
tabname
- имя table/mv, имя родительской таблицы у тоста; -
tab_frozen_age
- возраст старейшей замороженной транзакции table/mview/TOAST; -
force_freeze_age
- порог table/mview/TOAST для индивидуальных порогов илиcurrent_setting('autovacuum_freeze_max_age')
для системного порога.
Если в результате работы SQL-скрипта, выводится таблица, то рекомендуется перед обновлением выполнить следующие действия на выбор:
- Выполните команду
vacuumdb -a -F -v
(заморозка транзакций в кластере баз). В случае если команда отрабатывает некорректно — рекомендуется выполнить следующие действия:- Удалите старые подготовленные транзакции;
- Завершите длительные и бездействующие транзакции;
- Удалите старые слоты репликации;
- Разрешите конфликты репликации на репликах или выключите конфликтующие реплики.
- Затем повторите
vacuumdb -a -F -v
. За подробностями можно обратиться к документу Server Administration, раздел Routine Database Maintenance Tasks - Routine Vacuuming, глава «Preventing Transaction ID Wraparound Failures»;
- Увеличьте значение параметра
autovacuum_freeze_max_age
системное/для таблиц исходя из формулы:autovacuum_freeze_max_age > tab_frozen_age / 80%
.
-
Шаг 3. Остановка компонентов СУБД Pangolin
-
(master, replica) Переименуйте директорию с лицензией:
sudo mv opt/pangolin_license opt/pangolin-license
-
(master) В случае конфигурации с Pangolin Manager. Переведите компонент в режим паузы:
sudo -iu postgres /opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml edit-config --set 'pause=true' --force
-
(master, replica) Перед остановкой необходимо выполнить команду
CHECKPOINT
на мастере. Остановите все компоненты СУБД Pangolin:sudo systemctl stop pangolin-pooler
sudo systemctl stop pangolin-certs-rotate
sudo systemctl stop pangolin-auth-reencrypt@postgres
sudo systemctl stop pangolin-auth-reencrypt@kmadmin_pgДополнительно выполните:
-
Для конфигурации без Pangolin Manager:
sudo systemctl stop postgresql
-
Для конфигурации с Pangolin Manager:
export PANGOLIN_MAJOR_OLD_VER=0x
sudo -iu postgres /usr/pangolin/bin/pg_ctl stop -D /pgdata/$PANGOLIN_MAJOR_OLD_VER/data
sudo systemctl stop pangolin-manager -
Для конфигурации с etcd:
sudo systemctl stop etcd
-
-
(replica, master, arbiter) Остановите сторонние компоненты:
sudo systemctl stop crond
Шаг 4. Обновление компонента pangolin-auth-reencrypt
-
(master, replica) Обновите пакет компонента:
export PANGOLIN_VER=7.1.0
sudo dnf install -y ~/pangolin/pangolin_710/utilities/pangolin-auth-reencrypt-$PANGOLIN_VER-sberlinux9.x86_64.rpm -
(master, replica) Точечно замените конфигурационный файл, ввиду изменения наименований компонентов, путей к файлам подключения к VAULT и пути к защищенному хранилищу:
Для кластерной конфигурации:
sudo sed -i "s/\/etc\/postgres\/enc_utils_auth_settings.cfg/\/etc\/pangolin-auth-encryption\/enc_utils_auth_settings.cfg/g" /etc/pangolin-auth-reencrypt/enc_util.cfg
sudo sed -i "s/\/etc\/postgres\/enc_connection_settings.cfg/\/etc\/pangolin-security-utilities\/enc_connection_settings.cfg/g" /etc/pangolin-auth-reencrypt/enc_util.cfg
sudo sed -i "s/\/etc\/postgres\/enc_connection_settings_cert.cfg/\/etc\/pangolin-security-utilities\/enc_connection_settings_cert.cfg/g" /etc/pangolin-auth-reencrypt/enc_util.cfg -
(master, replica) Создайте каталог для логов компонента:
export PGLOGS=/pangolinlogs/pangolin-dbms
sudo mkdir -p $PGLOGS/pangolin-auth-reencrypt/
sudo chown postgres:pangolin_users $PGLOGS/pangolin-auth-reencrypt/
sudo chmod 0770 $PGLOGS/pangolin-auth-reencrypt/
Шаг 5. Обновление компонента pangolin-certs-rotate
-
(master, replica) Обновите пакет компонента:
export PANGOLIN_VER=7.1.0
sudo dnf install -y ~/pangolin/pangolin_710/utilities/pangolin-certs-rotate-$PANGOLIN_VER-sberlinux9.x86_64.rpm -
(master, replica) Точечно замените конфигурационный файл, ввиду изменения наименований компонентов:
sudo sed -i "s/\/pgerrorlogs\/06/\/pangolinlogs/g" /etc/pangolin-certs-rotate/pangolin-certs-rotate.yml
Шаг 6. Обновление компонента pangolin-diagnostic-tool
-
(master, replica) Обновите пакет компонента:
export PANGOLIN_VER=7.1.0
sudo dnf install -y ~/pangolin/pangolin_710/utilities/pangolin-diagnostic-tool-$PANGOLIN_VER-sberlinux9.x86_64.rpm
Шаг 7. Обновление компонентов пакета pangolin-security-utilities
-
(master, replica) Обновите пакет компонента:
export PANGOLIN_VER=7.1.0
sudo dnf install -y ~/pangolin/pangolin_710/utilities/pangolin-security-utilities-$PANGOLIN_VER-sberlinux9.x86_64.rpm -
(master, replica) Проверьте присутствует ли на стенде файл
secret_dump_key.bin
:sudo ls -la /etc/pangolin-security-utilities/secret_dump_key.bin
Выполните следующие шаги только при отсутствии файла secret_dump_key.bin
. При наличии — повторное создание не требуется и дальнейшие действия не выполняются, переходите к шагу 8.
При отсутствии файла secret_dump_key.bin
в зависимости от конфигурации выполните:
- Конфигурация standalone
- Кластерная конфигурация
-
Создайте файл для хранения ключа засекречивания:
/opt/pangolin-security-utilities/bin/pg_dump_generate_secret_file
-
(master) Создайте ключ засекречивания, который далее будет использоваться для создания файла с ключом засекречивания:
/opt/pangolin-security-utilities/bin/generate_encryption_key
-
(master, replica) Создайте файл для хранения ключа засекречивания:
/opt/pangolin-security-utilities/bin/pg_dump_generate_secret_file -t BASE64 -m
-
(master, replica) Введите сгенерированный в пункте 1 ключ.
Шаг 8. Обновление компонентов пакета pangolin-backup-tools
-
(master, replica) Обновите пакет pangolin-backup-tools-venv (обязательная зависимость для pangolin-backup-tools), либо установите его, если он отсутствует:
export PANGOLIN_BACKUP_TOOLS=2.1.0
sudo dnf install -y ~/pangolin/pangolin_710/3rdparty/pangolin-backup-tools-venv/pangolin-backup-tools-venv-$PANGOLIN_BACKUP_TOOLS-sberlinux9.x86_64.rpm -
(master, replica) Обновите пакет компонента:
export PANGOLIN_BACKUP_TOOLS=2.1.0
sudo dnf install -y ~/pangolin/pangolin_710/pangolin-backup-tools-$PANGOLIN_BACKUP_TOOLS-sberlinux9.x86_64.rpm -
(master, replica) Актуализируйте конфигурационный файл
backup-tools-env
согласно шаблону ниже, если установка компонента первичная. Файлbackup-tools-env
находится в/etc/pangolin-backup-tools/
.backup-tools-env
backup-tools-env
:# PATH, used for access to required executable files, default value: "${PATH}:{PGHOME}/bin/"
PATH="${PATH}:/opt/pangolin-dbms-server-7/bin/"
# path to PGHOME, default value: "/opt/pangolin-backup-tools/bin"
PGHOME="/opt/pangolin-backup-tools"
# path to python libraries, required for manage_backup.bin, default value: "/opt/pangolin-backup-tools/lib/python3/site-packages"
PYTHONPATH="/opt/pangolin-backup-tools/lib/python3/site-packages"
# path to libraries, required for executable files, default value: "/opt/pangolin-backup-tools/lib"
LD_LIBRARY_PATH="/opt/pangolin-backup-tools/lib"
# path to plugins libraries, default value: "/opt/pangolin-backup-tools/lib"
PG_PLUGINS_PATH="/opt/pangolin-backup-tools/lib"
# Pangolin DBMS server IP, default value: "127.0.0.1"
ARG_KEY_DBMS_SERVER_IP="127.0.0.1"
# Pangolin DBMS port, default value: "5433"
ARG_KEY_DBMS_SERVER_PORT="5433"
# user used for access to database, default value: "backup_user"
ARG_KEY_DBMS_CONNECT_USER="backup_user"
# database to connect, default value: "postgres"
ARG_KEY_DBMS_CONNECT_DATA_BASE="postgres"
# path to backup storage, default value: "/pgarclogs"
ARG_KEY_DBMS_CONNECT_BACKUP_DIR="/pgarclogs/07"
# password to connect to Pangolin DBMS, default value: 'sample_password'
# cluster name, default value: "clustername"
PGINSTANCE="clustername"
# WAL archives list
WALSTATE_FILE="$ARG_KEY_DBMS_CONNECT_BACKUP_DIR/wals_to_delete"
# Log file
LOG_FILE="$ARG_KEY_DBMS_CONNECT_BACKUP_DIR/archive.log"
# path to script, used for creating backup files, default value: "/opt/pangolin-backup-tools/bin/manage_backup.sh"
MANAGE_BACKUP_SCRIPT="/opt/pangolin-backup-tools/bin/manage_backup.sh"
# setting up of connection string
PANGOLIN_BACKUP_TOOLS_ARGS="$PANGOLIN_BACKUP_TOOLS_ARGS --host $ARG_KEY_DBMS_SERVER_IP"
PANGOLIN_BACKUP_TOOLS_ARGS="$PANGOLIN_BACKUP_TOOLS_ARGS -p $ARG_KEY_DBMS_SERVER_PORT"
PANGOLIN_BACKUP_TOOLS_ARGS="$PANGOLIN_BACKUP_TOOLS_ARGS -U $ARG_KEY_DBMS_CONNECT_USER"
PANGOLIN_BACKUP_TOOLS_ARGS="$PANGOLIN_BACKUP_TOOLS_ARGS -d $ARG_KEY_DBMS_CONNECT_DATA_BASE"
PANGOLIN_BACKUP_TOOLS_ARGS="$PANGOLIN_BACKUP_TOOLS_ARGS -B $ARG_KEY_DBMS_CONNECT_BACKUP_DIR"
# environment variables to launch manage backup
export PATH
export PGHOME
export PYTHONPATH
export LD_LIBRARY_PATH
export PG_PLUGINS_PATHПредупреждение!Значения указаны по умолчанию, если они не соответствуют значениям с обновляемого стенда, актуализируйте.
:::
Шаг 9. Обновление компонента Pangolin Pooler
-
(master, replica) Обновите пакет компонента:
export PANGOLIN_POOLER=1.5.2
sudo dnf install -y ~/pangolin/pangolin_710/pangolin-pooler-$PANGOLIN_POOLER-sberlinux9.x86_64.rpm
sudo sed -i "s/\/pgerrorlogs\/06/\/pangolinlogs/g" /etc/pangolin-pooler/pangolin-pooler.ini -
Восстановите
pangolin-pooler-restart.sh
sudo cp -ra ~/pangolin/cache/backup/manager/pangolin-pooler-restart.sh /opt/pangolin-pooler/bin/
Шаг 10. Обновление компонента Pangolin Manager
В случае конфигурации с DCS, произведите дополнительно обновление на узле arbiter.
-
(master, replica) Сделать бэкап
.service
-файла компонента Pangolin Manager на всех узлах СУБД:-
Без функциональности «Отказ от root»:
cp /etc/systemd/system/pangolin-manager.service /home/<username>
-
С функциональностью «Отказ от root»:
cp /home/postgres/.config/systemd/user/pangolin-manager.service /home/<username>
-
-
(master, replica) Для начала процесса обновления компонента, произведите удаление текущей версии компонента и его зависимости:
export PANGOLIN_MANAGER_VENV=2.1.0
export PANGOLIN_MANAGER=2.2.1
export PANGOLIN_VER=7.1
export PANGOLIN_OLD_VER=6.5
sudo dnf remove -y ~/pangolin/pangolin-manager-$PANGOLIN_OLD_VER
sudo dnf remove -y ~/pangolin/pangolin-manager-venv -
(master, replica) Произведите обновление пакета компонента (
pangolin-manager
) и его обязательной зависимости (pangolin-manager-venv
), либо установите, если она отсутствует:tar -xzf ~/pangolin_710/3rdparty/3rdparty.tar.gz -C 3rdparty/
cd 3rdparty
sudo dnf install -y pangolin-manager-venv-$PANGOLIN_MANAGER_VENV-sberlinux8.x86_64.rpm
cd ../sudo dnf install -y ~/pangolin_710/pangolin-manager-$PANGOLIN_MANAGER-sberlinux8.x86_64.rpm
sudo sed -i "s/$PANGOLIN_OLD_VER/$PANGOLIN_VER/g" /etc/pangolin-manager/postgres.yml
# Добавьте в файл /etc/pangolin-manager/postgres.yml параметр в секцию postgresql, если его нет
bin_dir_client: /usr/pangolin-dbms-client-$PANGOLIN_VER/bin -
(master, replica) Восстановите
.service
-файла компонента Pangolin Manager в то же место, где он находился ранее:-
Без функциональности «Отказ от root»:
cp /home/<username>/pangolin-manager.service /etc/systemd/system/
-
С функциональностью «Отказ от root»:
cp /home/<username>/pangolin-manager.service /home/postgres/.config/systemd/user/
-
-
(arbiter) Для конфигурации с DCS выполните данный шаг только на узле арбитр:
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
Шаг 11. Обновление pangolin_license
-
(master, replica) Подготовьте файл с лицензией:
sudo mkdir /opt/pangolin-license/
sudo touch /opt/pangolin-license/license.json
#заполните файл /opt/pangolin-license/license.json
sudo chown -R postgres:pangolin_users /opt/pangolin-license/
sudo chmod 0770 /opt/pangolin-license/
sudo chmod 0440 /opt/pangolin-license/license.json
#заполните файл /opt/pangolin_license/license.json
Шаг 12. Обновление серверной и клиентской части (pangolin-dbms)
-
(master, replica) Подготовьте СУБД Pangolin новой версии для миграции.
-
Создайте новые рабочие каталоги и файлы БД:
sudo mkdir -p /pgarclogs/07 /pangolinlogs /pgdata/07/data
sudo chown -R postgres:postgres /pgdata/07 /pgarclogs/07 /pangolinlogs
sudo chmod -R 0700 /pgdata/07 /pgarclogs/07 /pangolinlogs -
Создайте и внесите в файл
~/pangolin/cache/pangolin-dbms
следующее содержимое:/pgarclogs/07/postgresql-*.log {
rotate 30
su postgres postgres
daily
compress
delaycompress
nocreate
copytruncate
sharedscripts
missingok
notifempty
}
postrotate
SIZE_USED=\$(df /pgarclogs/07| awk '{print $5}' | grep -v Use% | tr -d %)
if [ \"\$SIZE_USED\" -gt 90 ]; then
logger \"Диск для логов PostgreSQL заполнен более чем на 90%. Пожалуйста, очистите его для успешной работы.\"
fi
endscript -
Скопируйте подготовленный файл и назначьте права:
sudo cp -r ~/pangolin/cache/pangolin-dbms /etc/logrotate.d/pangolin-dbms
sudo chown root:root /etc/logrotate.d/pangolin-dbms
sudo chmod 0644 /etc/logrotate.d/pangolin-dbms -
Обновите пакеты компонентов:
export PANGOLIN_VER=7.1.0
sudo dnf install -y ~/pangolin/pangolin_710/pangolin-dbms-7.1-$PANGOLIN_VER-sberlinux9.x86_64.rpm
sudo dnf install -y ~/pangolin/pangolin_710/pangolin-dbms-7.1-client-$PANGOLIN_VER-sberlinux9.x86_64.rpmПри необходимости установите пакет компонента
timescaledb
:export PANGOLIN_TIMESCALEDB=2.19.3
sudo dnf install -y ~/pangolin/pangolin_710/timescaledb/pangolin-timescaledb-7.1-apache-$PANGOLIN_TIMESCALEDB-sberlinux9-x86_64.rpm -
Скопируйте вспомогательные файлы:
sudo mkdir /usr/pangolin/3rdparty/
sudo cp -rf ~/pangolin/3rdparty/* /usr/pangolin/3rdparty/
sudo chown -R postgres:postgres /usr/pangolin/3rdparty/
sudo chmod -R 0700 /usr/pangolin/3rdparty/
-
-
(master) Инициализируйте новую версию СУБД Pangolin:!!!!
sudo /opt/pangolin-ansible-venv-controlled/bin/python3 ~/pangolin/pangolin_710/installer/utilities/psql_get_password_hash -t scram-sha-256 -P '<password_postgres>' > ~/pangolin/cache/.tmp_file
sudo cp -r ~/pangolin/cache/.tmp_file /home/postgres/
sudo chown postgres:postgres /home/postgres/.tmp_file
sudo -iu postgres /opt/pangolin-dbms-server/bin/initdb -D /pgdata/07/data -k -A scram-sha-256 --pwfile /home/postgres/.tmp_file -E UTF8 --update-authid --lc-collate <данные из файла current_value.txt> --lc-ctype <данные из файла current_value.txt> --lc-messages <данные из файла current_value.txt> --lc-monetary <данные из файла current_value.txt> --lc-numeric <данные из файла current_value.txt> --lc-time <данные из файла current_value.txt>Пример заполненной команды:
sudo -iu postgres /opt/pangolin-dbms-server/bin/initdb -D /pgdata/07/data -k -A scram-sha-256 --pwfile /home/postgres/.tmp_file -E UTF8 --update-authid --lc-collate en_US.utf-8 --lc-ctype en_US.utf-8 --lc-messages en_US.utf8 --lc-monetary en_US.utf8 --lc-numeric en_US.utf8 --lc-time en_US.utf8
-
(master, replica) Скопируйте заранее сформированные конфигурационные файлы каталога в рабочие:
sudo cp -r /pgdata/06/data/pg_hba.conf /pgdata/07/data/pg_hba.conf
sudo cp -r /pgdata/06/data/postgresql.base.conf /pgdata/07/data/postgresql.base.conf
sudo cp -r /pgdata/06/data/postgresql.auto.conf /pgdata/07/data/postgresql.auto.confДля конфигурации без Pangolin Manager:
sudo cp -r ~/pangolin/cache/merge/postgresql.conf /pgdata/07/data/postgresql.conf
Для конфигурации с Pangolin Manager:
sudo cp -r ~/pangolin/cache/merge/postgres.yml /etc/pangolin-manager/postgres.yml
sudo cp -r /pgdata/06/data/patroni.dynamic.json /pgdata/07/data/patroni.dynamic.jsonОпределите правильные права и владельцев файлов:
sudo chown postgres:postgres /pgdata/07/data/postgresql.base.conf /pgdata/07/data/postgresql.auto.conf /pgdata/07/data/postgresql.conf /pgdata/07/data/pg_hba.conf /etc/pangolin-manager/postgres.yml /pgdata/07/data/patroni.dynamic.json
sudo chmod 0700 /pgdata/07/data/postgresql.base.conf /pgdata/07/data/postgresql.auto.conf /pgdata/07/data/postgresql.conf /pgdata/07/data/pg_hba.conf /etc/pangolin-manager/postgres.yml /pgdata/07/data/patroni.dynamic.json -
(master, replica) Скорректируйте сервисный файл
/etc/systemd/system/postgresql.service
для конфигурации без Pangolin Manager:echo "
[Unit]
Description=Runners PostgreSQL service
After=syslog.target network.target pangolin-auth-reencrypt@postgres.service pangolin-auth-reencrypt@kmadmin_pg.service
[Service]
Type=notify
Environment=\"PG_LICENSE_PATH=/opt/pangolin-license\"
Environment=\"PG_PLUGINS_PATH=/opt/pangolin-dbms-server-7/lib\"
Environment=\"PGCTLTIMEOUT=120\"
Environment=\"LD_LIBRARY_PATH=/opt/pangolin-dbms-server-7/lib\"
LimitNOFILE=65536
# Pre-commands to start watchdog device
User=postgres
Group=postgres
PermissionsStartOnly=true
ExecStartPre=/bin/mkdir -p /var/run/postgresql
ExecStartPre=/bin/chown -R postgres:postgres /var/run/postgresql
ExecReload=/bin/kill -HUP \$MAINPID
WorkingDirectory=/opt/pangolin-dbms-server-7/
ExecStart=/bin/bash -i -c \"/opt/pangolin-dbms-server-7/bin/postgres -D /pgdata/07/data\"
Restart=on-failure
[Install]
WantedBy=multi-user.target
" > ~/pangolin/cache/postgresql.service
sudo cp -r ~/pangolin/cache/postgresql.service /etc/systemd/system/postgresql.service
sudo chown -R postgres:postgres /etc/systemd/system/postgresql.service
sudo chmod -R 0600 /etc/systemd/system/postgresql.service
sudo systemctl daemon-reload -
(master, replica) Внесите следующие корректировки для миграции:
sudo sed -i '1ilocal all postgres scram-sha-256 #tmp_line' /pgdata/06/data/pg_hba.conf
sudo sed -i '1ilocal all postgres scram-sha-256 #tmp_line' /pgdata/07/data/pg_hba.conf
sudo sed -i -e "\$aautovacuum = 'off' #tmp_line" /pgdata/06/data/postgresql.conf
sudo sed -i -e "\$asynchronous_commit = 'off' #tmp_line" /pgdata/06/data/postgresql.conf
sudo sed -i -e "\$acron.database_name = 'template1' #tmp_line" /pgdata/06/data/postgresql.conf
sudo sed -i -e "\$aautovacuum = 'off' #tmp_line" /pgdata/07/data/postgresql.conf
sudo sed -i -e "\$asynchronous_commit = 'off' #tmp_line" /pgdata/07/data/postgresql.conf
sudo sed -i -e "\$acron.database_name = 'template1' #tmp_line" /pgdata/07/data/postgresql.conf -
(master) Мигрируйте данные в новую СУБД с помощью
pg_upgrade
:sudo mkdir -p /pgarclogs/pg_upgrade /var/run/postgresql/pg_upgrade
sudo chown -R postgres:postgres /pgarclogs/pg_upgrade /var/run/postgresql/pg_upgrade
sudo chmod -R 0700 /pgarclogs/pg_upgrade /var/run/postgresql/pg_upgrade
sudo sed -i 's/PGHOST=<ip_host>/PGHOST=localhost/g' /home/postgres/.bash_profile
export PANGOLIN_OLD_VER=6.5
export PGPASSWORD=P@sswordFishSword123
sudo -iu postgres PGPASSWORD=$PGPASSWORD PG_LICENSE_PATH=/opt/pangolin-license PGHOST=127.0.0.1 /opt/pangolin-dbms-server-7/bin/pg_upgrade -b /usr/pangolin-$PANGOLIN_OLD_VER/bin/ -B /opt/pangolin-dbms-server-7/bin/ --old-bindirclient /usr/pangolin-dbms-client/bin/ --new-bindirclient /opt/pangolin-dbms-client-7/bin/ -d /pgdata/06/data -D /pgdata/07/data -p 5433 -P 50433 -j 2 --socketdir=/var/run/postgresql/pg_upgrade -l /pgarclogs/pg_upgrade --link -rВнимание!При предустановленном в СУБД расширении
timescaledb
, в строку запуска утилитыpg_upgrade
, требуется добавить дополнительный флаг-c timescaledb.restoring='on'
.ПримерЕсли в процессе обновления возникает ошибка:
libpq environment variable PGHOST has a non-local server value: <ip_addres>
Отредактируйте переменную PGHOST в
/home/postgres/.bash_profile
, как в примере ниже:sudo sed -i 's/PGHOST=<ip_host>/PGHOST=localhost/g' /home/postgres/.bash_profile
ПримерЕсли в процессе обновления возникают ошибки связанные с загрузкой расширений, например:
could not load library "$libdir/pg_stat_kcache": ERROR: This module can only be loaded via shared_preload_libraries
Или
2025-07-21 16:28:15.673 MSK [804508] FATAL: unrecognized configuration parameter "pg_stat_statements.max"
2025-07-21 16:28:15.673 MSK [804508] HINT: make sure pg_stat_statements is loaded,
and make sure pg_stat_kcache is present after pg_stat_statements in the shared_preload_libraries settingПопробуйте добавить их в параметр
shared_preload_libraries
, который находится вpostgresql.conf
, в правильном порядке, как в примере ниже:sudo sed -i "s/#shared_preload_libraries = ''/shared_preload_libraries = 'pg_stat_statements,pg_stat_kcache'/g" /pgdata/07/data/postgresql.conf
-
(master) Актуализируйте файлы табличных пространств (ТП):
sudo rm -rf /pgdata/06/tablespaces/<название ТП>/PG_15_202506231
sudo cp -ra /pgdata/06/tablespaces /pgdata/07/tablespaces
#Значения для <path> и <oid> необходимо заменить на значения oid и pg_tablespace_location соответственно из файла current_value.txt
sudo -iu postgres ln -sfn <path> /pgdata/07/data/pg_tblspc/<oid>
#например, sudo -iu postgres ln -sfn /pgdata/07/tablespaces/Tbl_t /pgdata/07/data/pg_tblspc/16739 -
(replica) В случае кластерной конфигурации сгенерируйте ключ доступа для переноса данных с мастера на реплику:
sudo -iu postgres
postgres mkdir -p /pgarclogs/cache/rsync
postgres ssh-keygen
Generating public/private rsa key pair.
# Введите имя файла, в котором будет сохранен ключ: /pgarclogs/cache/rsync/ssh_key_rsync
Enter file in which to save the key (/home/postgres/.ssh/id_rsa): /pgarclogs/cache/rsync/ssh_key_rsync
# Введите ключевую фразу (опционально):
Enter passphrase (empty for no passphrase): <passphrase or enter>
# Введите ту же ключевую фразу еще раз (опционально):
Enter same passphrase again: <passphrase or enter>
Your identification has been saved in /pgarclogs/cache/rsync/ssh_key_rsync.
Your public key has been saved in /pgarclogs/cache/rsync/ssh_key_rsync.pub.
The key fingerprint is:
SHA256:5VV.........
The key's randomart image is:
+---[RSA 3072]----+
| ==+|
| .BBo+|
| .o.=*=+|
| o..+ +++|
| S .o = =o|
| + o *.+|
| o =. .* |
| ..oo.+. E|
| .oo o... |
+----[SHA256]-----+Копирование ssh-ключа с replica на master:
ssh-copy-id -i /pgarclogs/cache/rsync/ssh_key_rsync postgres@<ip-address_master>
-
(replica) В случае кластерной конфигурации запустите
rsync
для переноса данных:sshpass -d4 /bin/rsync --delay-updates -F --checksum --archive --rsync-path=rsync --hard-links --progress --size-only --no-inc-recursive --delete --rsh='ssh -S none -i /pgarclogs/cache/rsync/ssh_key_rsync -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null' --out-format='<<CHANGED>>%i %n%L' postgres@<ip-address_master>:/pgdata/07 /pgdata
#если есть табличные пространства, находящиеся в не /pgdata/06, их необходимо тоже перенсти, напрмер: sshpass -d4 /bin/rsync --delay-updates -F --checksum --archive --rsync-path=rsync --hard-links --size-only --stats --dry-run --delete --no-inc-recursive --rsh='ssh -S none -i /pgarclogs/cache/rsync/ssh_key_rsync -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null' --out-format='<<CHANGED>>%i %n%L' <ip-address_master>:/pgdata/11/tablespaces/tsin11 /pgdata/11/tablespaces -
(master) Проиндексируйте данные в БД, выполните очистку и анализ базы данных:
export PGPASSWORD=<password_postgres>
Дополнительно выполните:
-
Для конфигурации без Pangolin Manager:
-
в случае отсутствия
postgresql.service
:sudo -iu postgres
/usr/pangolin/bin/pg_ctl restart -D /pgdata/06/data/
exit -
с наличием файла
postgresql.service
:sudo systemctl restart postgresql
-
-
Для конфигурации с Pangolin Manager:
sudo -iu postgres /opt/pangolin-dbms-server/bin/pg_ctl start -D /pgdata/07/data/
-
Для любой конфигурации:
sudo -iu postgres
PGPASSWORD=$PGPASSWORD /opt/pangolin-dbms-client-7/bin/reindexdb -j 2 --all
PGPASSWORD=$PGPASSWORD /opt/pangolin-dbms-client-7/bin/vacuumdb -j 2 --analyze-in-stages --all
if [ -f /pgarclogs/pg_upgrade/reindex_gin.sql ];
/opt/pangolin-dbms-client-7/bin/psql < /pgarclogs/pg_upgrade/reindex_gin.sql
fi
exit -
Для конфигурации без Pangolin Manager:
-
в случае отсутствия
postgresql.service
:sudo -iu postgres
/usr/pangolin/bin/pg_ctl stop -D /pgdata/06/data/
exit -
с наличием файла
postgresql.service
:sudo systemctl stop postgresql
-
-
Для конфигурации с Pangolin Manager:
sudo -iu postgres /opt/pangolin-dbms-server/bin/pg_ctl stop -D /pgdata/07/data/
Шаг 13. Завершающие действия
-
(master, replica) Удалите временные параметры из рабочих конфигурационных файлов:
sudo sed -i '/local all postgres scram-sha-256 #tmp_line/d' /pgdata/07/data/pg_hba.conf
sudo sed -i "/autovacuum = 'off' #tmp_line/d" /pgdata/07/data/postgresql.conf
sudo sed -i "/synchronous_commit = 'off' #tmp_line/d" /pgdata/07/data/postgresql.conf
sudo sed -i "/cron.database_name = 'template1' #tmp_line/d" /pgdata/07/data/postgresql.conf -
(master, replica) Удалите неактуальные рабочие файлы исходной БД:
sudo dnf remove platform-v-pangolin-dbms -y
sudo rm -rf /usr/pangolin-6* /usr/pgsql-se-06
sudo ln -sfvn /pgdata/07 /pgdata/data
sudo rm -rf /pgdata/06 /pgerrorlogs/06 /pgarclogs/06
sudo rm -rf /etc/postgres/enc_connection_settings.cfg
sudo rm -rf /etc/postgres/enc_connection_settings_cert.cfg
sudo rm -rf /etc/postgres/enc_utils_auth_settings.cfg
sudo rm -rf /etc/postgres/enc_params.cfg*
sudo rm -rf /opt/omni/lbin/*manage_backup*
sudo rm -rf /opt/omni/lbin/*pg_se_archlogs*
sudo rm -rf /etc/systemd/system/pgbouncer.service
sudo rm -rf /etc/pgbouncer/
sudo rm -rf /usr/local/bin/pgbouncer
sudo rm -rf /usr/local/share/doc/pgbouncer/
sudo rm -rf /usr/local/share//man/man1/pgbouncer.1
sudo rm -rf /usr/local/share//man/man5/pgbouncer.5
sudo rm -rf /usr/patroni/patroni_venv
sudo rm -rf /opt/pangolin-common -
(master, replica, arbiter) Актуализируйте
dynmotd.sh
:export PANGOLIN_MANGER=2.2.1
export PANGOLIN_OLD_MANGER=2.x.x
export PANGOLIN_FULL_VER=07.001.00
export PANGOLIN_FULL_OLD_VER=06.00X.XX
sudo sed -i "s/$PANGOLIN_OLD_MANGER/$PANGOLIN_MANGER/g" /usr/local/sbin/dynmotd.sh
sudo sed -i "s/$PANGOLIN_FULL_OLD_VER/$PANGOLIN_FULL_VER/g" /usr/local/sbin/dynmotd.sh
Шаг 14. Запуск компонентов СУБД Pangolin
-
(master, replica) Запустите компоненты СУБД Pangolin:
sudo systemctl daemon-reload
sudo systemctl restart pangolin-pooler
sudo systemctl restart pangolin-certs-rotate
sudo systemctl restart pangolin-auth-reencrypt@postgres
sudo systemctl restart pangolin-auth-reencrypt@kmadmin_pgДополнительно выполните:
-
Для конфигурации без Pangolin Manager:
-
в случае отсутствия
postgresql.service
:sudo -iu postgres
/usr/pangolin/bin/pg_ctl restart -D /pgdata/06/data/
exit -
с наличием файла
postgresql.service
:sudo systemctl restart postgresql
-
-
Для конфигурации с Pangolin Manager:
sudo systemctl restart pangolin-manager
-
Для конфигурации с etcd:
sudo systemctl restart etcd
-
-
(master) Запустите сторонние сервисы:
sudo systemctl restart crond
-
(master) В случае конфигурации с
pangolin-manager
очистите кластер и выведитеpangolin-manager
из режима паузы:sudo -iu postgres /opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml remove clustername
sudo systemctl restart pangolin-manager
sudo -iu postgres /opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml edit-config --set 'pause=false' --force
sudo -iu postgres /opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml restart clustername
#дополнительно выполните команду на replica
sudo systemctl restart pangolin-manager -
(master) Подготовьте исходную базу для корректной миграции в «Шаг 2. Подготовительные действия» пункт 5.
примечаниеВ файле
/home/postgres/current_value.txt
необходимо выявить, в какой БД были найдены следующие сущности:grant_opts_start
/revoke_opts_start
/grant_opts_stop
/revoke_opts_stop
. Значение необходимо подставить в скрипты вместо<БД>
.Также необходимо проверить, какому пользователю были выданы права. Например,
backup_user=X/postgres
, значит<пользователь>
заменить наbackup_user
, если значение=X/postgres
, значит<пользователь>
заменить наPUBLIC
.sudo -iu postgres
#grant_opts_start
echo "
SET SESSION AUTHORIZATION <БД>;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_backup_start TO <пользователь>;
RESET SESSION AUTHORIZATION;
" > /home/postgres/grant_opts_start.sql
#grant_opts_stop
echo "
SET SESSION AUTHORIZATION <БД>;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_backup_stop TO <пользователь>;
RESET SESSION AUTHORIZATION;
" > /home/postgres/grant_opts_stop.sql
#revoke_opts_start
echo "
REVOKE EXECUTE ON FUNCTION pg_catalog.pg_backup_start FROM <пользователь>;
" > /home/postgres/revoke_opts_start.sql
#revoke_opts_stop
echo "
REVOKE EXECUTE ON FUNCTION pg_catalog.pg_backup_stop FROM <пользователь>;
" > /home/postgres/revoke_opts_stop.sql
psql -f /home/postgres/grant_opts_start.sql
psql -f /home/postgres/grant_opts_stop.sql
psql -f /home/postgres/revoke_opts_start.sql
psql -f /home/postgres/revoke_opts_stop.sql
exit
Шаг 15. Обновление каталога безопасности
-
(master) Добавьте временный параметр
enable_protection_catalogs_upgrade
под пользователем postgres в конец конфигурационного файла в зависимости от конфигурации с помощью обычного текстового редактора:-
Для конфигурации без Pangolin Manager. Отредактируйте конфигурационный файл
postgresql.conf
:enable_protection_catalogs_upgrade = True
-
Для конфигурации c Pangolin Manager. Отредактируйте конфигурационный файл
postgres.yml
:postgresql:
parameters:
enable_protection_catalogs_upgrade: True
-
-
(master) Произведите
reload
иrestart
СУБД в зависимости от конфигурации:-
Для конфигурации без Pangolin Manager:
sudo -iu postgres /opt/pangolin-dbms-server/pg_ctl reload -D /pgdata/data/data
sudo -iu postgres /opt/pangolin-dbms-server/pg_ctl restart -D /pgdata/data/data -
Для конфигурации c Pangolin Manager:
sudo -iu postgres /opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml reload clustername
sudo -iu postgres /opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml restart clustername
-
-
(master) Выполните следующую команду в каждой БД поочередно, кроме БД с включенным флагом
datallowconn
. <DB> - заменить на название базы данных:sudo -iu postgres psql -c "SELECT NOW()" -d <DB>
exit -
(master) Удалите временный параметр
enable_protection_catalogs_upgrade
из конфигурационного файла в зависимости от конфигурации под пользователем postgres с помощью обычного текстового редактора. И произведитеreload
иrestart
СУБД в зависимости от конфигурации:-
Для конфигурации без Pangolin Manager:
sudo -iu postgres /opt/pangolin-dbms-server/pg_ctl reload -D /pgdata/data/data
sudo -iu postgres /opt/pangolin-dbms-server/pg_ctl restart -D /pgdata/data/data -
Для конфигурации c Pangolin Manager:
sudo -iu postgres /opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml reload clustername
sudo -iu postgres /opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml restart clustername
-