Ручное обновление с переносом данных СУБД Pangolin
Данный раздел рассматривает ручное обновление с переносом данных СУБД Pangolin.
Перед началом выполнения инструкции необходимо убедиться, что yum/dnf-репозитории настроены корректно. При обновлении пакетов, содержащих эпоху в номере версии, важно учитывать специфику работы пакетных менеджеров. При попытке обновить пакет на новую версию без эпохи, обновление не произойдет. Перед выполнением обновления данных компонентов необходимо предварительно удалить текущий установленный пакет компонента.
Для предотвращения полной переливки данных на резервный узел кластера Pangolin и возможного нарушения доступности сервиса при переходе с версии Pangolin 5.x.x на версию 6.7.6 настоятельно рекомендуется заблаговременно произвести операцию VACUUM FREEZE во всех базах данных, либо же после завершения процесса обновления деактивировать режим агрессивного вакуума по переполнению счетчика транзакций (autovacuum_disable_wraparound = on). Необходимо обратить внимание на пункт «Запуск процесса заморозки» в блоке проверки готовности к обновлению.
Каждый пункт будет начинаться с информации в круглых скобках о том, на каких узлах необходимо выполнить данный шаг. Все команды необходимо выполнять последовательно.
Например, сочетание (master, replica) означает, что действия, указанные в пункте, необходимо выполнить сначала на основном узле, затем на реплике (при этом выполнять действия на арбитре не нужно).
Обновление выполняется покомпонентно. Шаги, соответствующие компонентам, отсутствующим в конфигурации, следует пропустить.
Обновление СУБД может осуществляться пользователем с правами суперпользователя, а также пользователем postgres.
Все команды ниже являются примерами. Их необходимо отредактировать в соответствии с требуемыми параметрами и конфигурациями. В названиях rpm/deb-пакетов и в блоках кода, при необходимости, замените наименование ОС и пакетного менеджера. Также, в данной инструкции, распакованный дистрибутив находится в каталоге под названием pangolin.
В случае, если обновление прошло неуспешно, произведите восстановление по инструкции «Восстановление после неудачного обновления с переносом данных».
Обозначения
В инструкции используются переменные для динамической настройки. Перед выполнением команд эти переменные будут экспортироваться. Скорректируйте значение относительно реализуемого сценария обновления:
PANGOLIN_VER_OLD– исходная версия СУБД Pangolin (формат -х.х.х);PANGOLIN_VER– новая версия СУБД Pangolin (формат -х.х.х);PANGOLIN_FULL_VER– новая версия СУБД Pangolin (формат -0х.00х.0х);PANGOLIN_FULL_VER_OLD– исходная версия СУБД Pangolin (формат -0х.00х.0х);PANGOLIN_DBMS_MAJOR– новая мажорная версия СУБД Pangolin (формат -х);PANGOLIN_DBMS_MINOR– новая минорная версия СУБД Pangolin (формат -х);PANGOLIN_TIMESCALEDB_OLD– исходная версия расширения timescaledb (формат -х.х.х);PANGOLIN_TIMESCALEDB– новая версия расширения timescaledb (формат -х.х.х);PANGOLIN_TIMESCALEDB_RELEASE– новая версия релиза пакета расширения timescaledb (формат -х.х.х);PANGOLIN_POOLER– новая версия компонента Pangolin Pooler (формат -х.х.х);PANGOLIN_MANAGER_OLD– исходная версия компонента Pangolin Manager (формат -х.х.х);PANGOLIN_MANAGER– новая версия компонента Pangolin Manager (формат -х.х.х);PANGOLIN_MANAGER_VENV– новая версия зависимостиpangolin-manager-venv(формат -х.х.х);PANGOLIN_BACKUP_TOOLS– новая версия компонента Pangolin Backup Tools (формат -х.х.х);PANGOLIN_BACKUP_TOOLS_VENV– новая версия зависимостиpangolin-backup-tools-venv(формат -х.х.х);PANGOLIN_TUNER_OLD– исходная версия компонента Pangolin Tuner (формат -х.х.х);PANGOLIN_TUNER– новая версия компонента Pangolin Tuner (формат -х.х.х);PANGOLIN_POSTGIS– новая версия пакета стороннего расширения postgis (формат -х.х.х);PANGOLIN_PGROUTING– новая версия пакета стороннего расширения pgrouting (формат -х.х.х);PANGOLIN_PG_BACKGROUND– новая версия пакета стороннего расширения pg_background (формат -х.х.х);PANGOLIN_POSTGIS_RELEASE– новая версия релиза пакета стороннего расширения postgis (формат -х.х.х);PANGOLIN_PGROUTING_RELEASE– новая версия релиза пакета стороннего расширения pgrouting (формат -х.х.х);PANGOLIN_PG_BACKGROUND_RELEASE– новая версия релиза пакета стороннего расширения pg_background (формат -х.х.х);PGPASSWORD- пароль от пользователя БД (по умолчанию пользовательpostgres);PGDATA– исходный путь до данных СУБД Pangolin (формат -/pgdata/xx);PGDATA_NEW– новый путь до данных СУБД Pangolin (формат -/pgdata/xx);PGHOME– исходный путь до серверной части СУБД Pangolin (формат -/usr/pangolin-x.x.x);PGHOME_NEW– новый путь до серверной части СУБД Pangolin (формат -/usr/pangolin-x.x);PGHOME_CLIENT– исходный путь до клиентской части СУБД Pangolin (формат -/usr/pangolin-x.x.x);PGHOME_CLIENT_NEW– новый путь до клиентской части СУБД Pangolin (формат -/usr/pangolin-dbms-client-x.x);PGBACKUP– исходный путь для резервного копирования СУБД Pangolin (формат -/pgarclogs/xx);PGBACKUP_NEW– новый путь для резервного копирования СУБД Pangolin (формат -/pgarclogs/xx);PGPORT- порт СУБД Pangolin (по умолчанию5433);CLUSTERNAME- наименование кластера (по умолчаниюclustername).
Предусловие
Перед переходом к процессу обновления необходимо ознакомиться с информацией в данном разделе.
Перед началом обновления необходимо выключить службуcrond во избежание сторонних подключений на всех хостах СУБД.
В случае кластерной конфигурации дождитесь полного отсутствия задержки репликации между мастером и репликой. Перед началом процесса обновления узлы кластера должны быть синхронизированы.
Перед началом обновления необходимо произвести проверку готовности СУБД к процессу обновления и устранить выявленные проблемы. Список необходимых проверок представлен в разделе «Проверка готовности к обновлению».
Проверка и устранение возможных ограничений происходит автоматически при выбореавтоматизированного способа обновления.
В случае использования расширения timescaledb убедитесь, что обновляемая версия расширения поддерживается и подходит для запланированного сценария обновления. В противном случае необходимо сначала обновить расширение до допустимой версии. Если поднять версию расширения в рамках одной версии СУБД невозможно, следует произвести обновление СУБД на промежуточную, а затем на целевую версию. Уточнение по процессу обновления стендов с предустановленным расширением timescaledb указано в «Таблице поддерживаемых для обновления версий СУБД».
Список ограничений перед проведением обновления с переносом данных СУБД Pangolin
Проверка на наличие и устранение данных ограничений происходит автоматически при выбореавтоматизированного способа обновления.
Перед началом обновления необходимо выполнить проверку на ограничения. Для этого выполните следующие действия:
-
Убедитесь в отсутствии активных внешних подключений к СУБД в течение всего процесса обновления.
-
Убедитесь, что у существующих пользователей и администраторов БД есть необходимые полномочия на создание объектов и назначения прав в полном объеме.
-
Ознакомьтесь с особенностями обновления, связанные с переходом на ядро PostgreSQL 15.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
Сценарий обновления
Шаг 1. Резервное копирование
-
(master, replica, arbiter) Сохраните рабочие файлы компонентов СУБД Pangolin:
-
(master, replica, arbiter)
general:mkdir -p ~/pangolin/cache/backup/pangolin_general/{postgres,kmadmin_pg}
sudo cp -ra /usr/local/sbin/dynmotd.sh ~/pangolin/cache/backup/pangolin_general/
sudo cp -ra /etc/profile ~/pangolin/cache/backup/pangolin_general/
sudo cp -ra /home/postgres/.bash_profile ~/pangolin/cache/backup/pangolin_general/postgres
sudo cp -ra /home/postgres/.bashrc ~/pangolin/cache/backup/pangolin_general/postgres
sudo cp -ra /home/kmadmin_pg/.bash_profile ~/pangolin/cache/backup/pangolin_general/kmadmin_pg
sudo cp -ra /home/kmadmin_pg/.bashrc ~/pangolin/cache/backup/pangolin_general/kmadmin_pg -
(master, replica, arbiter)
pangolin-auth-reencrypt:mkdir -p ~/pangolin/cache/backup/pangolin_auth_reencrypt
sudo cp -ra {path_to_service}/pangolin_reencrypt@.service ~/pangolin/cache/backup/pangolin_auth_reencrypt/
sudo cp -ra /opt/pangolin-common/bin/pg_auth_reencrypt ~/pangolin/cache/backup/pangolin_auth_reencrypt/
sudo cp -ra /etc/postgres/enc_util.cfg ~/pangolin/cache/backup/pangolin_auth_reencrypt/
sudo cp -ra /etc/postgres/enc_params.cfg.kmadmin_pg ~/pangolin/cache/backup/pangolin_auth_reencrypt/
sudo cp -ra /etc/postgres/enc_params.cfg.postgres ~/pangolin/cache/backup/pangolin_auth_reencrypt/ -
(master, replica, arbiter)
pangolin-certs-rotate:mkdir -p ~/pangolin/cache/backup/pangolin_certs_rotate
sudo cp -ra {path_to_service}/pg_certs_rotate_agent.service ~/pangolin/cache/backup/pangolin_certs_rotate/
sudo cp -ra /opt/pangolin-common/bin/pg_certs_rotate_agent ~/pangolin/cache/backup/pangolin_certs_rotate/
sudo cp -ra /etc/postgres/pg_certs_rotate_agent.yml ~/pangolin/cache/backup/pangolin_certs_rotate/ -
(master, replica, arbiter)
pangolin-security-utilities:mkdir -p ~/pangolin/cache/backup/pangolin_security_utilities
sudo cp -ra /etc/postgres/enc_connection_settings_cert.cfg ~/pangolin/cache/backup/pangolin_security_utilities/
sudo cp -ra /etc/postgres/enc_connection_settings.cfg ~/pangolin/cache/backup/pangolin_security_utilities/ -
(master, replica)
pangolin-backup-tools:mkdir -p ~/pangolin/cache/backup/pangolin_backup_tools
sudo cp -ra /opt/omni/lbin/* ~/pangolin/cache/backup/pangolin_backup_tools/ -
(master, replica) Pangolin Pooler:
mkdir -p ~/pangolin/cache/backup/pangolin_pooler
sudo cp -ra {path_to_service}/pgbouncer.service ~/pangolin/cache/backup/pangolin_pooler/
sudo cp -ra /usr/local/bin/pgbouncer ~/pangolin/cache/backup/pangolin_pooler/
sudo cp -ra /etc/pgbouncer/pgbouncer.ini ~/pangolin/cache/backup/pangolin_pooler/
sudo cp -ra /etc/pgbouncer/userlist.txt ~/pangolin/cache/backup/pangolin_pooler/
sudo cp -ra /usr/local/share/man/man1/pgbouncer.1 ~/pangolin/cache/backup/pangolin_pooler/
sudo cp -ra /usr/local/share/man/man5/pgbouncer.5 ~/pangolin/cache/backup/pangolin_pooler/ -
(master, replica, arbiter) Pangolin Manager:
export PGDATA=/pgdata/xx
mkdir -p ~/pangolin/cache/backup/pangolin_manager
sudo cp -ra {path_to_service}/patroni.service ~/pangolin/cache/backup/pangolin_manager/
sudo cp -ra /etc/patroni/postgres.yml ~/pangolin/cache/backup/pangolin_manager/
sudo cp -ra /etc/patroni/reload_pgbouncer.sh ~/pangolin/cache/backup/pangolin_manager/
sudo cp -ra /usr/patroni ~/pangolin/cache/backup/pangolin_manager/ -
(master, replica)
pangolin-dbms:export PANGOLIN_FULL_VER_OLD=x.x.x
export PANGOLIN_VER_OLD=x.x.x
export PGDATA=/pgdata/xx
export PGHOME=/usr/pangolin-x.x.x
mkdir -p ~/pangolin/cache/backup/pangolin_dbms
sudo cp -ra {path_to_service}/postgresql.service ~/pangolin/cache/backup/pangolin_dbms/ # для конфигурации без Pangolin Manager
sudo cp -ra /etc/postgres/enc_utils_auth_settings.cfg ~/pangolin/cache/backup/pangolin_dbms/
sudo cp -ra $PGHOME/ ~/pangolin/cache/backup/pangolin_dbms/
sudo dnf download --downloadonly --destdir=~/pangolin/cache/backup/pangolin_dbms/ platform-v-pangolin-dbms-$PANGOLIN_FULL_VER_OLD -
(master, replica)
pangolin-timescaledb:export PANGOLIN_VER_OLD=x.x.x
export PANGOLIN_TIMESCALEDB_OLD=x.x.x
mkdir -p ~/pangolin/cache/backup/pangolin_timescaledb
sudo dnf download --downloadonly --destdir=~/pangolin/cache/backup/pangolin_timescaledb/ pangolin-timescaledb-$PANGOLIN_TIMESCALEDB_OLD.$PANGOLIN_VER_OLD
Где
path_to_service- актуальный путь до service-файла компонента. В случае наличия функциональности «Отказ от root» это может быть путь/home/postgres/.config/systemd/user/. В случае отсутствия такой функциональности это может быть/usr/lib/systemd/system/,/lib/systemd/system/или/etc/systemd/system/. -
-
(master) Добавьте запись
host replication postgres 127.0.0.1/32 scram-sha-256первой строкой в файл$PGDATA/data/pg_hba.confили в файл/etc/patroni/postgres.ymlв секциюpg_hbaдля конфигурации с Pangolin Manager для корректного выполнения резервной копии БД. -
(master) Перечитайте обновленный конфигурационный файл БД.
-
Для конфигурации без Pangolin Manager:
sudo -iu postgres
export PGDATA=/pgdata/xx
export PGHOME=/usr/pangolin-x.x.x
$PGHOME/bin/pg_ctl reload -D $PGDATA/data
exit -
Для конфигурации с Pangolin Manager:
sudo -iu postgres
export CLUSTERNAME=clustername
/usr/patroni/patroni_venv/bin/patronictl -c /etc/patroni/postgres.yml reload $CLUSTERNAME
exit
Ошибка «This system supports the C.UTF-8 locale which is recommended»
Если при вызове утилиты возникает ошибка в локалях кодировки:
This system supports the C.UTF-8 locale which is recommended, добавьте следующее содержимое в конец файла~/.bash_profileпод пользователемpostgresследующим содержимым при помощи текстового редактора:export LC_ALL=C.UTF-8
export LANG=C.UTF-8 -
-
(master) Создайте каталог для резервной копии:
sudo mkdir -p /pgarclogs/cache/backup/pangolin_dbms
sudo chmod -R 0700 /pgarclogs/cache/backup/pangolin_dbms
sudo chown -R postgres:postgres /pgarclogs/cache/ -
(master) Выполните резервное копирование:
sudo -iu postgres
export PGPASSWORD=<password_postgres>
export PGPORT=<port DBMS>
export PGDATA=/pgdata/xx
export CLUSTERNAME=clustername
export PGHOME=/usr/pangolin-x.x.x
$PGHOME/bin/pg_probackup init -B /pgarclogs/cache/backup/pangolin_dbms
$PGHOME/bin/pg_probackup add-instance -B /pgarclogs/cache/backup/pangolin_dbms -D $PGDATA/data --instance $CLUSTERNAME
$PGHOME/bin/pg_probackup backup -B /pgarclogs/cache/backup/pangolin_dbms --instance $CLUSTERNAME -b FULL -h 127.0.0.1 -p $PGPORT -U postgres --compress-algorithm=zlib --compress-level=4 -j 14 --temp-slot --stream --progress -w
exit -
(master) Удалите строку
host replication postgres 127.0.0.1/32 scram-sha-256из файла$PGDATA/data/pg_hba.confдля конфигурации без Pangolin Manager или из файла/etc/patroni/postgres.ymlдля конфигурации с Pangolin Manager. -
(master) Перечитайте обновленный конфигурационный файл БД.
-
Для конфигурации без Pangolin Manager:
sudo -iu postgres
export PGDATA=/pgdata/xx
export PGHOME=/usr/pangolin-x.x.x
$PGHOME/bin/pg_ctl reload -D $PGDATA/data
exit -
Для конфигурации с Pangolin Manager:
sudo -iu postgres
export CLUSTERNAME=clustername
/usr/patroni/patroni_venv/bin/patronictl -c /etc/patroni/postgres.yml reload $CLUSTERNAME
exit
-
Шаг 2. Подготовка к обновлению
-
(master) Сохраните исходные значения стенда для последующей инициализации новой БД:
sudo -iu postgres
export PGPASSWORD=<password_postgres>
export PGHOME=/usr/pangolin-x.x.x
$PGHOME/bin/psql -c "SHOW SERVER_ENCODING;" > current_value.txt
$PGHOME/bin/psql -c "SHOW LC_COLLATE;" >> current_value.txt
$PGHOME/bin/psql -c "SHOW LC_CTYPE;" >> current_value.txt
$PGHOME/bin/psql -c "SHOW LC_MESSAGES;" >> current_value.txt
$PGHOME/bin/psql -c "SHOW LC_MONETARY;" >> current_value.txt
$PGHOME/bin/psql -c "SHOW LC_NUMERIC;" >> current_value.txt
$PGHOME/bin/psql -c "SHOW LC_TIME;" >> current_value.txt
$PGHOME/bin/psql -c "SELECT oid, pg_tablespace_location(oid) FROM pg_tablespace WHERE spcname not in ('pg_default', 'pg_global');" >> current_value.txt
exit -
(master, replica) Сформируйте конфигурационные файлы для работы с новой версией:
- Для конфигурации без Pangolin Manager:
- Для конфигурации с Pangolin Manager:
export PGDATA=/pgdata/xx
mkdir -p ~/pangolin/cache/merge
sudo cp $PGDATA/data/postgresql.conf ~/pangolin/cache/merge/postgresql.conf
sudo cp $PGDATA/data/postgresql.base.conf ~/pangolin/cache/merge/postgresql.base.conf
sudo cp $PGDATA/data/pg_hba.conf ~/pangolin/cache/merge/pg_hba.confПример редактируемых параметров:
archive_command = '/opt/pangolin-backup-tools/bin/pg_probackup archive-push -B $PGBACKUP_NEW --instance $CLUSTERNAME --wal-file-path=%p --wal-file-name=%f --compress --overwrite -j 4 --batch-size=100'
pg_plugins_path = '$PGHOME_NEW/lib'
hba_file = '$PGDATA_NEW/data/pg_hba.conf'
ident_file = '$PGDATA_NEW/data/pg_ident.conf'export PGDATA=/pgdata/xx
mkdir -p ~/pangolin/cache/merge
sudo cp $PGDATA/data/patroni.dynamic.json ~/pangolin/cache/merge/patroni.dynamic.json
sudo cp /etc/patroni/postgres.yml ~/pangolin/cache/merge/postgres.ymlПример редактируемых параметров:
postgresql:
bin_dir: $PGHOME_NEW/bin
bin_dir_client: $PGHOME_CLIENT_NEW/bin
data_dir: $PGDATA_NEW/data
parameters:
archive_command: /opt/pangolin-backup-tools/bin/pg_probackup archive-push -B $PGBACKUP_NEW --instance $CLUSTERNAME --wal-file-path=%p --wal-file-name=%f --compress --overwrite -j 4 --batch-size=100
pg_plugins_path: $PGHOME_NEW/lib -
(master) Подготовьте исходную базу для корректной миграции:
-
Под пользователем
postgresзаполните файл~/change_0.sqlследующим содержимым при помощи текстового редактора: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)); -
Под пользователем
postgresзаполните файл~/change_1.sqlследующим содержимым при помощи текстового редактора: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(); -
Под пользователем
postgresзаполните файл~/change_2.sqlследующим содержимым при помощи текстового редактора: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; -
Под пользователем
postgresзаполните файл~/run_precondition.shследующим содержимым при помощи текстового редактора: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 ~/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 ~/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 ~/change_2.sql -1
done -
Запустите скрипт с помощью команды:
sudo -iu postgres
export PGHOME_CLIENT=/usr/pangolin-x.x.x
export PGPASSWORD=<password_postgres>
chmod 0700 run_precondition.sh
./run_precondition.sh >> current_value.txt
exit
-
-
(master) Проверьте отсутствие большого количества транзакций с незавершенным статусом. Для этого выполните следующий запрос для каждой базы под пользователем
postgres.<DB>- заменить на название базы данных:sudo -iu postgres
export PGHOME_CLIENT=/usr/pangolin-x.x.x
$PGHOME_CLIENT/bin/psql -d <DB> -c "WITH data_dir AS (SELECT setting AS path FROM pg_settings WHERE name = 'data_directory'), files AS (SELECT pg_ls_dir(path || '/pg_xact') AS fname FROM data_dir), count AS (SELECT count(*) AS file_count FROM files) SELECT current_database() AS dbname, (file_count > 3) AS clog_too_large FROM count;"
exitРезультат выполнения данного запроса — таблица с колонками
datname(имя БД) иclog_too_large(триггер на большое количество незавершенных транзакций). Если в результате запроса значениеclog_too_large=t, то для всех полученных БД необходимо выполнить команду:vacuumdb -v -d <DB>, где<DB>- имя БД, полученное в результате выполнения запроса выше. -
(master) Выполните проверку состояния близости БД к пороговому значению заморозки транзакций
autovacuum_freeze_max_age. Для этого выполните следующий запрос для каждой базы под пользователемpostgres.<DB>- заменить на название базы данных:sudo -iu postgres
export PGHOME_CLIENT=/usr/pangolin-x.x.x
$PGHOME_CLIENT/bin/psql -d <DB> -c "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;"
exitРезультат выполнения запроса
Результат выполнения данного запроса — таблица со следующими колонками:
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%.
-
(master, replica, arbiter) Скачайте дистрибутив в рабочий каталог и распакуйте его. Далее по инструкции путь к компонентам дистрибутива будет формироваться по
~/pangolin:mkdir -p ~/pangolin
tar -xzvf pangolin.tar.gz -C ~/pangolin
Шаг 3. Остановка компонентов СУБД Pangolin
Перед остановкой необходимо выполнить командуCHECKPOINT на мастере.
-
(master) В случае конфигурации с Pangolin Manager введите компонент в режим паузы:
sudo -iu postgres
/usr/patroni/patroni_venv/bin/patronictl -c /etc/patroni/postgres.yml edit-config --set 'pause=true' --force
exit -
(master, replica, arbiter) Остановите все компоненты СУБД Pangolin. В случае кластерной конфигурации действия по остановке произведите сначала на мастере, затем на реплике, после на арбитре:
- Без функциональности «Отказ от root»
- С включенной функциональностью «Отказ от root»
-
Для конфигурации с Pangolin Manager и модулем Pangolin DCS:
-
на мастере и реплике:
sudo systemctl stop pgbouncer
sudo systemctl stop pg_certs_rotate_agent
sudo systemctl stop pangolin_reencrypt@postgres
sudo systemctl stop pangolin_reencrypt@kmadmin_pg
sudo systemctl stop patroni
sudo -iu postgres
export PGHOME=/usr/pangolin-x.x.x
export PGDATA=/pgdata/xx
$PGHOME/bin/pg_ctl stop -D $PGDATA/data
exit -
на арбитре:
sudo systemctl stop pg_certs_rotate_agent
sudo systemctl stop pangolin_reencrypt@postgres
sudo systemctl stop pangolin_reencrypt@kmadmin_pg
sudo systemctl stop patroni
-
-
Для конфигурации с Pangolin Manager и etcd:
-
на мастере и реплике:
sudo systemctl stop pgbouncer
sudo systemctl stop pg_certs_rotate_agent
sudo systemctl stop pangolin_reencrypt@postgres
sudo systemctl stop pangolin_reencrypt@kmadmin_pg
sudo systemctl stop patroni
sudo systemctl stop etcd
sudo -iu postgres
export PGHOME=/usr/pangolin-x.x.x
export PGDATA=/pgdata/xx
$PGHOME/bin/pg_ctl stop -D $PGDATA/data
exit -
на арбитре:
sudo systemctl stop etcd
-
-
Для конфигурации без Pangolin Manager:
-
на мастере:
sudo systemctl stop pgbouncer
sudo systemctl stop pg_certs_rotate_agent
sudo systemctl stop pangolin_reencrypt@postgres
sudo systemctl stop pangolin_reencrypt@kmadmin_pg
# в случае наличия файла `postgresql.service`:
sudo systemctl stop postgresql
# в случае отсутствия файла `postgresql.service`:
sudo -iu postgres
export PGHOME=/usr/pangolin-x.x.x
export PGDATA=/pgdata/xx
$PGHOME/bin/pg_ctl stop -D $PGDATA/data
exit
-
-
Для конфигурации с Pangolin Manager и модулем Pangolin DCS:
-
на мастере и реплике:
sudo -iu postgres
export PGHOME=/usr/pangolin-x.x.x
export PGDATA=/pgdata/xx
systemctl --user stop pgbouncer
systemctl --user stop pg_certs_rotate_agent
systemctl --user stop pangolin_reencrypt
systemctl --user stop patroni
$PGHOME/bin/pg_ctl stop -D $PGDATA/data
exit
sudo -iu kmadmin_pg
systemctl --user stop pangolin_reencrypt
exit -
на арбитре:
sudo -iu postgres
systemctl --user stop pg_certs_rotate_agent
systemctl --user stop pangolin_reencrypt
systemctl --user stop patroni
exit
sudo -iu kmadmin_pg
XDG_RUNTIME_DIR=/run/user/$(id -u) DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus" systemctl --user stop pangolin_reencrypt
exit
-
-
Для конфигурации с Pangolin Manager и etcd:
-
на мастере и реплике:
sudo -iu postgres
export PGHOME=/usr/pangolin-x.x.x
export PGDATA=/pgdata/xx
systemctl --user stop pgbouncer
systemctl --user stop pg_certs_rotate_agent
systemctl --user stop pangolin_reencrypt
systemctl --user stop patroni
systemctl --user stop etcd
$PGHOME/bin/pg_ctl stop -D $PGDATA/data
exit
sudo -iu kmadmin_pg
systemctl --user stop pangolin_reencrypt
exit -
на арбитре:
sudo -iu postgres
systemctl --user stop etcd
exit
-
-
Для конфигурации без Pangolin Manager:
-
на мастере:
sudo -iu postgres
export PGHOME=/usr/pangolin-$x.x.x
export PGDATA=/pgdata/xx
systemctl --user stop pgbouncer
systemctl --user stop pg_certs_rotate_agent
systemctl --user stop pangolin_reencrypt
# в случае наличия файла `postgresql.service`:
systemctl --user stop postgresql
# в случае отсутствия файла `postgresql.service`:
$PGHOME/bin/pg_ctl stop -D $PGDATA/data
exit
sudo -iu kmadmin_pg
systemctl --user stop pangolin_reencrypt
exit
-
-
(master, replica, arbiter) Проверьте, что все компоненты корректно остановлены:
sudo ps aux | grep -E "pgbouncer|patroni|postgresql|pg_certs_rotate_agent|pg_auth_reencrypt|etcd" | grep -v grepЕсли команда в пункте 3 вернула не пустой результат, то выполните следующее:
sudo kill -9 <pid>
sudo ps aux | grep -E "pgbouncer|patroni|postgresql|pg_certs_rotate_agent|pg_auth_reencrypt|etcd" | grep -v grep
Шаг 4. Обновление компонента pangolin-auth-reencrypt
-
(master, replica) Произведите обновление пакета компонента:
export PANGOLIN_VER=x.x.x
sudo dnf install -y ~/pangolin/utilities/pangolin-auth-reencrypt-$PANGOLIN_VER-sberlinux8.x86_64.rpm -
(master, replica) С помощью текстового редактора произведите замену старых значений
$PGDATA,$PGHOME,$PGHOME_CLIENTна новые$PGDATA_NEW,$PGHOME_NEW,$PGHOME_CLIENT_NEWв service-файле компонентаpath_to_service.Где
path_to_service- актуальный путь до service-файлаpangolin-auth-reencrypt.serviceкомпонента. В случае наличия функциональности «Отказ от root» это может быть путь/home/postgres/.config/systemd/user/. В случае отсутствия такой функциональности это может быть/usr/lib/systemd/system/,/lib/systemd/system/или/etc/systemd/system/.
В случае конфигурации с DCS, произведите дополнительно обновление на узле арбитр.
Шаг 5. Обновление компонента pangolin-certs-rotate
-
(master, replica) Произведите обновление пакета компонента:
export PANGOLIN_VER=x.x.x
sudo dnf install -y ~/pangolin/utilities/pangolin-certs-rotate-$PANGOLIN_VER-sberlinux8.x86_64.rpm -
(master, replica) С помощью текстового редактора произведите замену старых значений
$PGDATA,$PGHOME,$PGHOME_CLIENTна новые$PGDATA_NEW,$PGHOME_NEW,$PGHOME_CLIENT_NEWв service-файле компонентаpath_to_service.Где
path_to_service- актуальный путь до service-файлаpangolin-certs-rotate.serviceкомпонента. В случае наличия функциональности «Отказ от root» это может быть путь/home/postgres/.config/systemd/user/. В случае отсутствия такой функциональности это может быть/usr/lib/systemd/system/,/lib/systemd/system/или/etc/systemd/system/.
В случае конфигурации с DCS, произведите дополнительно обновление на узле арбитр.
Шаг 6. Обновление компонента безопасности pangolin-security-utilities
-
(master, replica) Произведите обновление пакета компонента:
export PANGOLIN_VER=x.x.x
sudo dnf install -y ~/pangolin/utilities/pangolin-security-utilities-$PANGOLIN_VER-sberlinux8.x86_64.rpmВнимание!В случае конфигурации с DCS, произведите дополнительно обновление на узле арбитр.
-
(master, replica) Произведите проверку файла
secret_dump_key.binна стенде:sudo ls -la /etc/pangolin-security-utilities/secret_dump_key.binВнимание!Выполните следующие шагитолько при отсутствии файла
secret_dump_key.bin. При наличии — повторное создание не требуется и дальнейшие действия не выполняются, переходите к шагу 7.При отсутствии файла
secret_dump_key.binвыполните:- Для конфигурации без Pangolin Manager
- Для конфигурации c Pangolin Manager
-
С помощью утилиты
pg_dump_generate_secret_fileсоздайте файл для хранения ключа засекречивания:sudo /opt/pangolin-security-utilities/bin/pg_dump_generate_secret_file
-
С помощью утилиты
generate_encryption_keyсоздайте ключ засекречивания, который далее будет использоваться для создания файла с ключом засекречивания:sudo /opt/pangolin-security-utilities/bin/generate_encryption_key -
Создайте файл для хранения ключа засекречивания:
sudo /opt/pangolin-security-utilities/bin/pg_dump_generate_secret_file -t BASE64 -m -
На запрос
Enter secret keyвведите сгенерированный в пункте 1 ключ.
Шаг 7. Обновление компонента pangolin-diagnostic-tool
(master, replica) Произведите обновление пакета компонента:
export PANGOLIN_VER=x.x.x
sudo dnf install -y ~/pangolin/utilities/pangolin-diagnostic-tool-$PANGOLIN_VER-sberlinux8.x86_64.rpm
Шаг 8. Обновление компонента резервного копирования pangolin-backup-tools
-
(master, replica) Произведите обновление обязательной зависимости (
pangolin-backup-tools-venv) компонента:tar -xzf ~/pangolin/3rdparty/3rdparty.tar.gz -C ~/pangolin/3rdparty/
export PANGOLIN_BACKUP_TOOLS_VENV=x.x.x
sudo dnf install -y ~/pangolin/3rdparty/pangolin-backup-tools-venv/pangolin-backup-tools-venv-$PANGOLIN_BACKUP_TOOLS_VENV-sberlinux8.x86_64.rpm -
(master, replica) Произведите обновление компонента:
export PANGOLIN_BACKUP_TOOLS=x.x.x
sudo dnf install -y ~/pangolin/pangolin-backup-tools-$PANGOLIN_BACKUP_TOOLS-sberlinux8.x86_64.rpm -
(master, replica) Актуализируйте конфигурационный файл
/etc/pangolin-backup-tools/backup-tools-envсогласно шаблону ниже:# PATH, used for access to required executable files, default value: "${PATH}:{PGHOME}/bin/"
PATH="${PATH}:$PGHOME_NEW/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="$PGBACKUP_NEW"
# 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"
# to checkpoint before backup DB
PG_FAST_CHECKPOINT=False
# 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
export PG_FAST_CHECKPOINT
Шаг 9. Обновление компонента Pangolin Pooler
(master, replica) Произведите обновление пакета компонента:
export PANGOLIN_POOLER=x.x.x
sudo dnf install -y ~/pangolin/pangolin-pooler-$PANGOLIN_POOLER-sberlinux8.x86_64.rpm
Шаг 10. Обновление компонента Pangolin Manager
-
(master, replica) Произведите обновление обязательной зависимости (
pangolin-manager-venv) компонента:tar -xzf ~/pangolin/3rdparty/3rdparty.tar.gz -C ~/pangolin/3rdparty/
export PANGOLIN_MANAGER_VENV=x.x.x
sudo dnf install -y ~/pangolin/3rdparty/pangolin-manager-venv/pangolin-manager-venv-$PANGOLIN_MANAGER_VENV-sberlinux8.x86_64.rpm -
(master, replica) Произведите обновление компонента:
export PANGOLIN_MANAGER=x.x.x
sudo dnf install -y ~/pangolin/pangolin-manager-$PANGOLIN_MANAGER-sberlinux8.x86_64.rpm -
(master, replica) С помощью текстового редактора произведите замену старых значений
$PGDATA,$PGHOME,$PGHOME_CLIENTна новые$PGDATA_NEW,$PGHOME_NEW,$PGHOME_CLIENT_NEWв service-файле компонентаpath_to_service.Где
path_to_service- актуальный путь до service-файлаpangolin-manager.serviceкомпонента. В случае наличия функциональности «Отказ от root» это может быть путь/home/postgres/.config/systemd/user/. В случае отсутствия такой функциональности это может быть/usr/lib/systemd/system/,/lib/systemd/system/или/etc/systemd/system/. -
(master, replica) Перенаправьте вспомогательную символьную ссылку для корректной работы компонента:
export PGHOME_NEW=/usr/pangolin-x.x
sudo ln -sfvn $PGHOME_NEW /opt/pangolin-dbms
В случае конфигурации с DCS, произведите дополнительно обновление на узле арбитр.
Шаг 10. Обновление компонента серверной части СУБД Pangolin
-
(master, replica) Произведите обновление пакета компонента:
export PANGOLIN_VER=x.x.x
export PANGOLIN_DBMS_MAJOR=x
export PANGOLIN_DBMS_MINOR=x
sudo dnf install -y ~/pangolin/pangolin-dbms-$PANGOLIN_DBMS_MAJOR.$PANGOLIN_DBMS_MINOR-$PANGOLIN_VER-sberlinux8.x86_64.rpm -
(master, replica) С помощью текстового редактора произведите замену старых значений
$PGDATA,$PGHOME,$PGHOME_CLIENTна новые$PGDATA_NEW,$PGHOME_NEW,$PGHOME_CLIENT_NEWв service-файле компонентаpath_to_service.Где
path_to_service- актуальный путь до service-файлаpostgresql.serviceкомпонента. В случае наличия функциональности «Отказ от root» это может быть путь/home/postgres/.config/systemd/user/. В случае отсутствия такой функциональности это может быть/usr/lib/systemd/system/,/lib/systemd/system/или/etc/systemd/system/.
Шаг 11. Обновление компонента клиентской части СУБД Pangolin
(master, replica) Произведите обновление пакета компонента:
export PANGOLIN_VER=x.x.x
export PANGOLIN_DBMS_MAJOR=x
export PANGOLIN_DBMS_MINOR=x
sudo dnf install -y ~/pangolin/pangolin-dbms-$PANGOLIN_DBMS_MAJOR.$PANGOLIN_DBMS_MINOR-client-$PANGOLIN_VER-sberlinux8.x86_64.rpm
Шаг 12. Обновление пакета расширения pangolin-timescaledb
(master, replica) Произведите обновление пакета расширения:
export PANGOLIN_TIMESCALEDB=x.x.x
export PANGOLIN_TIMESCALEDB_RELEASE=x.x.x
export PANGOLIN_DBMS_MAJOR=x
export PANGOLIN_DBMS_MINOR=x
sudo dnf install -y ~/pangolin/timescaledb/pangolin-timescaledb-$PANGOLIN_DBMS_MAJOR.$PANGOLIN_DBMS_MINOR-apache-$PANGOLIN_TIMESCALEDB-$PANGOLIN_TIMESCALEDB_RELEASE.sberlinux8-x86_64.rpm
Шаг 13. Обновление компонента pangolin-auth-password
(master, replica) Произведите обновление пакета компонента:
export PANGOLIN_VER=x.x.x
sudo dnf install -y ~/pangolin/utilities/pangolin-auth-password-$PANGOLIN_VER-sberlinux8.x86_64.rpm
Шаг 14. Обновление компонента Pangolin Tuner
(master, replica) Произведите обновление пакета компонента:
export PANGOLIN_TUNER=x.x.x
sudo dnf install -y ~/pangolin/utilities/pangolin-tuner-$PANGOLIN_TUNER-sberlinux8.x86_64.rpm
Шаг 15. Обновление опциональных пакетов
(master, replica) Произведите обновление опциональных пакетов:
export PANGOLIN_DBMS_MAJOR=x
export PANGOLIN_VER=x.x.x
sudo dnf install -y ~/pangolin/pangolin-dbms-$PANGOLIN_DBMS_MAJOR-libpq-$PANGOLIN_VER-sberlinux8.x86_64.rpm
sudo dnf install -y ~/pangolin/pangolin-dbms-$PANGOLIN_DBMS_MAJOR-libpq-dev-$PANGOLIN_VER-sberlinux8.x86_64.rpm
Шаг 16. Обновление пакетов pangolin-untrusted расширений
Выполните данный шаг, если в СУБД используются untrusted-расширения. Список данных расширений и подробную информацию о них можно прочитать в разделе«Информация по Untrusted-расширениям».
-
(master, replica) Распакуйте архив, содержащий untrusted-расширения:
tar -xzf ~/pangolin/untrusted/untrusted.tar.gz -C ~/pangolin/untrusted/ -
(master, replica) Произведите обновление пакетов расширений:
export PANGOLIN_VER=x.x.x
export PANGOLIN_DBMS_MAJOR=x
sudo dnf install -y ~/pangolin/untrusted/pangolin-dbms-$PANGOLIN_DBMS_MAJOR-<ext_name>-$PANGOLIN_VER-sberlinux8.x86_64.rpmГде
ext_name- название untrusted-расширения.
Шаг 17. Обновление пакетов сторонних расширений
Только для обновления с версий 6.6.0 и выше. Выполните данный шаг, если в СУБД используются сторонние расширения. Список данных расширений и подробную информацию о них можно прочитать в разделеpostgis. Поддержка геоданных и pg_background. Запуск команд в фоновом режиме.
-
(master, replica) Произведите обновление пакетов сторонних расширений:
export PANGOLIN_POSTGIS=x.x.x
export PANGOLIN_PGROUTING=x.x.x
export PANGOLIN_PG_BACKGROUND=x.x
export PANGOLIN_POSTGIS_RELEASE=x.x.x
export PANGOLIN_PGROUTING_RELEASE=x.x.x
export PANGOLIN_PG_BACKGROUND_RELEASE=x.x.x
export PANGOLIN_DBMS_MAJOR=x
sudo dnf install -y ~/pangolin/3rdparty/postgis/pangolin-postgis-$PANGOLIN_DBMS_MAJOR-$PANGOLIN_POSTGIS-$PANGOLIN_POSTGIS_RELEASE.sberlinux8.x86_64.rpm
sudo dnf install -y ~/pangolin/3rdparty/pgrouting/pangolin-pgrouting-$PANGOLIN_DBMS_MAJOR-$PANGOLIN_PGROUTING.sberlinux8.x86_64.rpm
sudo dnf install -y ~/pangolin/3rdparty/pg_background/pangolin-pg-background-$PANGOLIN_DBMS_MAJOR-$PANGOLIN_PG_BACKGROUND.sberlinux8.x86_64.rpm -
(master, replica) Актуализируйте путь в конфигурационном файле к динамическим библиотекам для корректной работы сторонних расширений.
dynamic_library_pathдолжен содержать обязательное значение/opt/pangolin-extensions/{base_version}/libв первом приоритете. При необходимости, добавить через знак:исходные значения параметра. Пример:-
Для конфигурации без Pangolin Manager. Отредактируйте конфигурационный файл
~/pangolin/cache/merge/postgresql.conf:dynamic_library_path = '/opt/pangolin-extensions/{base_version}/lib:/opt/pangolin-extensions/{pangolin_major_old_version}/lib:$libdir' -
Для конфигурации c Pangolin Manager. Отредактируйте конфигурационный файл
~/pangolin/cache/merge/postgres.yml:postgresql:
parameters:
dynamic_library_path: "/opt/pangolin-extensions/{base_version}/lib:/opt/pangolin-extensions/{pangolin_major_old_version}/lib:$libdir"
Где:
{pangolin_major_old_version}- исходная мажорная версия СУБД Pangolin (формат -0х);{base_version}– базовая версия продукта (текущая: 6).
-
-
Добавьте в конфигурационном файле параметр
alternative_extension_control_directoryс путем до.controlфайлов для корректной работы сторонних расширений. Пример:-
Для конфигурации без Pangolin Manager. Отредактируйте конфигурационный файл
~/pangolin/cache/merge/postgresql.conf:alternative_extension_control_directory = '/opt/pangolin-extensions/{base_version}/lib,/opt/pangolin-extensions/{pangolin_major_old_version}/share/extension' -
Для конфигурации c Pangolin Manager. Отредактируйте конфигурационный файл
~/pangolin/cache/merge/postgres.yml:postgresql:
parameters:
alternative_extension_control_directory: "/opt/pangolin-extensions/{base_version}/lib,/opt/pangolin-extensions/{pangolin_major_old_version}/share/extension"
Где:
{pangolin_major_old_version}- исходная мажорная версия СУБД Pangolin (формат -0х);{base_version}– базовая версия продукта (текущая: 6).
-
Шаг 18. Подготовка к миграции данных
-
(master, replica, arbiter) Создайте директории и рабочие поддиректории
$PGDATA_NEW/data,$PGBACKUP_NEW, а также каталоги для работы утилитыpg_upgrade:export PGDATA_NEW=/pgdata/xx
export PGBACKUP_NEW=/pgarclogs/xx
sudo mkdir -p $PGDATA_NEW/{data,raft_data,raft_dump,raft} $PGBACKUP_NEW /pgarclogs/pg_upgrade /var/run/postgresql/pg_upgrade
sudo chown -R postgres:postgres $PGDATA_NEW $PGBACKUP_NEW /pgarclogs/pg_upgrade /var/run/postgresql
sudo chmod -R 0700 $PGDATA_NEW $PGBACKUP_NEW /pgarclogs/pg_upgrade /var/run/postgresql -
(master) Инициализируйте новый кластер СУБД Pangolin:
export PANGOLIN_VER=x.x.x
sudo tar -xz -f ~/pangolin/3rdparty/3rdparty.tar.gz -C ~/pangolin/3rdparty/
sudo dnf install -y ~/pangolin/3rdparty/pangolin-ansible-venv-controlled-$PANGOLIN_VER-sberlinux8.x86_64.rpm
sudo /opt/pangolin-ansible-venv-controlled/bin/python3 ~/pangolin/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
unset LD_LIBRARY_PATH
unset PG_PLUGINS_PATH
export PGDATA_NEW=/pgdata/xx
export PGHOME_NEW=/usr/pangolin-x.x
$PGHOME_NEW/bin/initdb -D $PGDATA_NEW/data -k -A scram-sha-256 --pwfile ~/.tmp_file -E UTF8 --update-authid --lc-collate <locele from current_value.txt> --lc-ctype <locele from current_value.txt> --lc-messages <locele from current_value.txt> --lc-monetary <locele from current_value.txt> --lc-numeric <locele from current_value.txt> --lc-time <locele from current_value.txt>
exitПример заполненной команды
initdb:/usr/pangolin/bin/initdb -D /pgdata/06/data -k -A scram-sha-256 --pwfile ~/.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) Переместите предварительно подготовленные конфигурационные файлы каталога в рабочую директорию:
export PGDATA_NEW=/pgdata/xx
sudo cp -rf ~/pangolin/cache/merge/postgresql.conf $PGDATA_NEW/data/postgresql.conf
sudo cp -rf ~/pangolin/cache/merge/postgresql.base.conf $PGDATA_NEW/data/postgresql.base.conf
sudo cp -rf ~/pangolin/cache/merge/pg_hba.conf $PGDATA_NEW/data/pg_hba.conf
sudo chown postgres:postgres $PGDATA_NEW/data/*.conf
sudo chmod 0700 $PGDATA_NEW/data/*.conf(master, replica) Дополнительно для конфигурации с Pangolin Manager:
export PGDATA_NEW=/pgdata/xx
sudo cp -rf ~/pangolin/cache/merge/postgres.yml /etc/pangolin-manager/postgres.yml
sudo cp -rf ~/pangolin/cache/merge/patroni.dynamic.json $PGDATA_NEW/data/patroni.dynamic.json # выполнить действие только на узле мастер
sudo chown postgres:postgres /etc/pangolin-manager/postgres.yml $PGDATA_NEW/data/patroni.dynamic.json
sudo chmod 0600 /etc/pangolin-manager/postgres.yml $PGDATA_NEW/data/patroni.dynamic.json -
(master) Внесите следующие корректировки в конфигурационные файлы СУБД для миграции с комментарием
tmp_line:export PGDATA=/pgdata/xx
export PGDATA_NEW=/pgdata/xx
sudo sed -i '1ilocal all postgres scram-sha-256 #tmp_line' $PGDATA/data/pg_hba.conf
sudo sed -i '1ilocal all postgres scram-sha-256 #tmp_line' $PGDATA_NEW/data/pg_hba.conf
sudo sed -i -e "\$aautovacuum = 'off' #tmp_line" $PGDATA/data/postgresql.conf
sudo sed -i -e "\$asynchronous_commit = 'off' #tmp_line" $PGDATA/data/postgresql.conf
sudo sed -i -e "\$acron.database_name = 'template1' #tmp_line" $PGDATA/data/postgresql.conf
sudo sed -i -e "\$aautovacuum = 'off' #tmp_line" $PGDATA_NEW/data/postgresql.conf
sudo sed -i -e "\$asynchronous_commit = 'off' #tmp_line" $PGDATA_NEW/data/postgresql.conf
sudo sed -i -e "\$acron.database_name = 'template1' #tmp_line" $PGDATA_NEW/data/postgresql.conf
Шаг 19. Обновление 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
Шаг 20. Миграция данных с помощью утилиты pg_upgrade
(master) Запустите миграцию данных с помощью pg_upgrade:
sudo -iu postgres
unset LD_LIBRARY_PATH
unset PG_PLUGINS_PATH
export PGPORT=<port DBMS>
export PGHOST=127.0.0.1
export PGHOME=/usr/pangolin-x.x.x
export PGHOME_NEW=/usr/pangolin-x.x
export PGHOME_CLIENT=/usr/pangolin-x.x.x
export PGHOME_CLIENT_NEW=/usr/pangolin-dbms-client-x.x
export PGPASSWORD=<password_postgres>
export PGDATA=/pgdata/xx
export PGDATA_NEW=/pgdata/xx
$PGHOME_NEW/bin/pg_upgrade -b $PGHOME/bin -B $PGHOME_NEW/bin --old-bindirclient $PGHOME_CLIENT/bin --new-bindirclient $PGHOME_CLIENT_NEW/bin -d $PGDATA/data -D $PGDATA_NEW/data -p $PGPORT -P 50433 -j 2 --socketdir=/var/run/postgresql/pg_upgrade -l /pgarclogs/pg_upgrade --link -r
exit
При предустановленном в СУБД расширенииtimescaledb, в строку запуска утилиты pg_upgrade, требуется добавить дополнительный флаг -c timescaledb.restoring='on'.
Ошибка «ERROR: duplicate key value violates unique constraint 'pg_proc_oid_index'»
Если в процессе обновления возникают ошибки, связанные с загрузкой расширений, например:
pg_restore: error: could not execute query: ERROR: duplicate key value violates unique constraint "pg_proc_oid_index"
DETAIL: Key (oid)=(17932) already exists.
Добавьте к вызову pg_upgrade параметр --two-phases-extensions=fuzzystrmatch,postgis,postgis_raster,postgis_sfcgal,postgis_topology,postgis_tiger_geocoder,address_standardizer,address_standardizer_data_us,pgrouting,isn
Если параметр --two-phases-extensions уже используется, добавьте в передаваемый список расширение isn.
Ошибка «ERROR: This module can only be loaded via shared_preload_libraries»
Если в процессе обновления возникают ошибки связанные с загрузкой расширений, например:
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, который находится в $PGDATA_NEW/data/postgresql.conf, в правильном порядке, как в примере ниже:
export PGDATA_NEW=/pgdata/xx
sudo sed -i "s/#shared_preload_libraries = ''/shared_preload_libraries = 'pg_stat_statements,pg_stat_kcache'/g" $PGDATA_NEW/data/postgresql.conf
Шаг 21. Актуализация путей до табличных пространств
(master) Актуализируйте пути табличных пространств (ТП):
export PGDATA=/pgdata/xx
export PGDATA_NEW=/pgdata/xx
sudo rm -rf $PGDATA/tablespaces/<TS>/PG_13_XXXXXXXXX
sudo cp -ra $PGDATA/tablespaces $PGDATA_NEW/tablespaces
sudo -iu postgres
export PGDATA_NEW=/pgdata/xx
ln -sfn <path> $PGDATA_NEW/data/pg_tblspc/<oid>
exit
Где, значения для <path> и <oid> необходимо заменить на значения oid и pg_tablespace_location из файла ~/current_value.txt в домашнем каталоге пользователя postgres соответственно. В параметре <path> перед выполнением команды заменить значение $PGDATA на значение $PGDATA_NEW.
Пример команды:
sudo -iu postgres
ln -sfn /pgdata/06/tablespaces/Tbl_t /pgdata/06/data/pg_tblspc/16739
exit
Шаг 22. Перенос данных с помощью rsync на реплику
Выполните данный шаг, если конфигурация с Pangolin Manager, иначе данный шаг пропустите и переходите кшагу 22.
-
(replica) Сгенерируйте ключ доступа для переноса данных с мастера на реплику:
sudo -iu postgres
mkdir -p /pgarclogs/cache/rsync
ssh-keygen
exitGenerating 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-ключа с реплики на мастер:
sudo -iu postgres
mkdir ~/.ssh && chmod 700 ~/.ssh
ssh-copy-id -i /pgarclogs/cache/rsync/ssh_key_rsync postgres@<ip-address_master>
exit -
(replica) Запустите
rsyncдля переноса данных/pgdata:sudo -iu postgres
export PGDATA_NEW=/pgdata/xx
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_NEW /pgdata
exit -
(replica) Если есть табличные пространства, находящиеся в не
/pgdata, их необходимо аналогично перенести: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/xx/tablespaces/tsin /pgdata/xx/tablespaces
Шаг 23. Индексирование и очистка устаревших записей
-
(master) Запустите экземпляр СУБД на мастере:
sudo -iu postgres
export PGHOME_NEW=/usr/pangolin-x.x
export PGDATA_NEW=/pgdata/xx
unset LD_LIBRARY_PATH
unset PG_PLUGINS_PATH
$PGHOME_NEW/bin/pg_ctl start -D $PGDATA_NEW/data
exit -
(master) Проиндексируйте данные в БД:
sudo -iu postgres
export PGPASSWORD=<password_postgres>
export PGHOME_CLIENT_NEW=/usr/pangolin-dbms-client-x.x
export PGHOST=127.0.0.1
export PGDATA_NEW=/pgdata/xx
export PGDATA=$PGDATA_NEW
unset LD_LIBRARY_PATH
unset PG_PLUGINS_PATH
$PGHOME_CLIENT_NEW/bin/reindexdb -j 2 --all
$PGHOME_CLIENT_NEW/bin/vacuumdb -j 2 --analyze-in-stages --all
exitВ случае наличия файла
/pgarclogs/pg_upgrade/reindex_gin.sqlвыполните следующую команду:sudo -iu postgres
export PGPASSWORD=<password_postgres>
export PGHOME_NEW=/usr/pangolin-x.x
unset LD_LIBRARY_PATH
unset PG_PLUGINS_PATH
$PGHOME_NEW/bin/psql < /pgarclogs/pg_upgrade/reindex_gin.sql
exit -
(master) Остановите экземпляр СУБД на мастере:
sudo -iu postgres
export PGHOME_NEW=/usr/pangolin-x.x
export PGDATA_NEW=/pgdata/xx
$PGHOME_NEW/bin/pg_ctl stop -D $PGDATA_NEW/data
exit
Шаг 24. Запуск компонентов СУБД Pangolin
-
(master, replica, arbiter) Запустите компоненты СУБД Pangolin:
- Без функциональности «Отказ от root»
- С включенной функциональностью «Отказ от root»
-
Для конфигурации с Pangolin Manager и модулем Pangolin DCS:
-
на мастере и реплике:
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
sudo systemctl restart pangolin-manager -
на арбитре:
sudo systemctl daemon-reload
sudo systemctl restart pangolin-certs-rotate
sudo systemctl restart pangolin-auth-reencrypt@postgres
sudo systemctl restart pangolin-auth-reencrypt@kmadmin_pg
sudo systemctl restart pangolin-manager
-
-
Для конфигурации с Pangolin Manager и etcd:
-
на мастере и реплике:
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
sudo systemctl restart pangolin-manager
sudo systemctl restart etcd -
на арбитре:
sudo systemctl daemon-reload
sudo systemctl restart etcd
-
-
Для конфигурации без Pangolin Manager:
-
на мастере:
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
# в случае наличия файла `postgresql.service`:
sudo systemctl restart postgresql
# в случае отсутствия файла `postgresql.service`:
sudo -iu postgres
export PGDATA_NEW=/pgdata/xx
export PGHOME_NEW=/usr/pangolin-x.x
$PGHOME_NEW/bin/pg_ctl restart -D $PGDATA_NEW/data
exit
-
-
Для конфигурации с Pangolin Manager и модулем Pangolin DCS:
-
на мастере и реплике:
sudo -iu postgres
systemctl --user daemon-reload
systemctl --user restart pangolin-pooler
systemctl --user restart pangolin-certs-rotate
systemctl --user restart pangolin-auth-reencrypt
systemctl --user restart pangolin-manager
exit
sudo -iu kmadmin_pg
systemctl --user daemon-reload
systemctl --user restart pangolin-auth-reencrypt
exit -
на арбитре:
sudo -iu postgres
systemctl --user daemon-reload
systemctl --user restart pangolin-certs-rotate
systemctl --user restart pangolin-auth-reencrypt
systemctl --user restart pangolin-manager
exit
sudo -iu kmadmin_pg
XDG_RUNTIME_DIR=/run/user/$(id -u) DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus" systemctl --user daemon-reload
XDG_RUNTIME_DIR=/run/user/$(id -u) DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus" systemctl --user restart pangolin-auth-reencrypt
exit
-
-
Для конфигурации с Pangolin Manager и etcd:
-
на мастере и реплике:
sudo -iu postgres
systemctl --user daemon-reload
systemctl --user restart pangolin-pooler
systemctl --user restart pangolin-certs-rotate
systemctl --user restart pangolin-auth-reencrypt
systemctl --user restart pangolin-manager
systemctl --user restart etcd
exit
sudo -iu kmadmin_pg
systemctl --user daemon-reload
systemctl --user restart pangolin-auth-reencrypt
exit -
на арбитре:
sudo -iu postgres
systemctl --user daemon-reload
systemctl --user restart etcd
exit
-
-
Для конфигурации без Pangolin Manager:
-
на мастере:
sudo -iu postgres
export PGDATA_NEW=/pgdata/xx
export PGHOME_NEW=/usr/pangolin-x.x
systemctl --user daemon-reload
systemctl --user restart pangolin-pooler
systemctl --user restart pangolin-certs-rotate
systemctl --user restart pangolin-auth-reencrypt
# в случае наличия файла `postgresql.service`:
systemctl --user restart postgresql
# в случае отсутствия файла `postgresql.service`:
$PGHOME_NEW/bin/pg_ctl restart -D $PGDATA_NEW/data
exit
sudo -iu kmadmin_pg
systemctl --user daemon-reload
systemctl --user restart pangolin-auth-reencrypt
exit
-
-
(master, replica, arbiter) Произведите проверку состояния служб:
- Без функциональности «Отказ от root»
- С включенной функциональностью «Отказ от root»
-
Для конфигурации с Pangolin Manager и модулем Pangolin DCS:
-
на мастере и реплике:
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
sudo systemctl status pangolin-manager -
на арбитре:
sudo systemctl status pangolin-certs-rotate
sudo systemctl status pangolin-auth-reencrypt@postgres
sudo systemctl status pangolin-auth-reencrypt@kmadmin_pg
sudo systemctl status pangolin-manager
-
-
Для конфигурации с Pangolin Manager и 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
sudo systemctl status pangolin-manager
sudo systemctl status etcd -
на арбитре:
sudo systemctl status etcd
-
-
Для конфигурации без Pangolin Manager:
-
на мастере:
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
# в случае наличия файла `postgresql.service`:
sudo systemctl status postgresql
# в случае отсутствия файла `postgresql.service`:
sudo -iu postgres
export PGDATA_NEW=/pgdata/xx
export PGHOME_NEW=/usr/pangolin-x.x
$PGHOME_NEW/bin/pg_ctl status -D $PGDATA_NEW/data
exit
-
-
Для конфигурации с Pangolin Manager и модулем Pangolin DCS:
-
на мастере и реплике:
sudo -iu postgres
systemctl --user status pangolin-pooler
systemctl --user status pangolin-certs-rotate
systemctl --user status pangolin-auth-reencrypt
systemctl --user status pangolin-manager
exit
sudo -iu kmadmin_pg
systemctl --user status pangolin-auth-reencrypt
exit -
на арбитре:
sudo -iu postgres
systemctl --user status pangolin-certs-rotate
systemctl --user status pangolin-auth-reencrypt
systemctl --user status pangolin-manager
exit
sudo -iu kmadmin_pg
XDG_RUNTIME_DIR=/run/user/$(id -u) DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus" systemctl --user status pangolin-auth-reencrypt
exit
-
-
Для конфигурации с Pangolin Manager и etcd:
-
на мастере и реплике:
sudo -iu postgres
systemctl --user status pangolin-pooler
systemctl --user status pangolin-certs-rotate
systemctl --user status pangolin-auth-reencrypt
systemctl --user status pangolin-manager
systemctl --user status etcd
exit
sudo -iu kmadmin_pg
systemctl --user status pangolin-auth-reencrypt
exit -
на арбитре:
sudo -iu postgres
systemctl --user status etcd
exit
-
-
Для конфигурации без Pangolin Manager:
-
на мастере:
sudo -iu postgres
export PGDATA_NEW=/pgdata/xx
export PGHOME_NEW=/usr/pangolin-x.x
systemctl --user status pangolin-pooler
systemctl --user status pangolin-certs-rotate
systemctl --user status pangolin-auth-reencrypt
# в случае наличия файла `postgresql.service`:
systemctl --user status postgresql
# в случае отсутствия файла `postgresql.service`:
$PGHOME_NEW/bin/pg_ctl status -D $PGDATA_NEW/data
exit
sudo -iu kmadmin_pg
systemctl --user status pangolin-auth-reencrypt
exit
-
-
(master, replica, arbiter) Запустите сторонние сервисы:
sudo systemctl restart crond
Шаг 25. Очистка кластера Pangolin Manager
Выполните данный шаг, если конфигурация с Pangolin Manager, иначе данный шаг пропустите и переходите кшагу 25.
-
(master) Произведите очистку кластера:
sudo -iu postgres
export CLUSTERNAME=clustername
/opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml remove $CLUSTERNAME
exit -
(master) Произведите
restartкомпонента Pangolin Manager:-
С включенной функциональностью «Отказ от root»:
sudo -iu postgres
systemctl --user restart pangolin-manager
exit -
Без функциональности «Отказ от root»:
sudo systemctl restart pangolin-manager
-
-
(master) Выведите Pangolin Manager из режима паузы:
sudo -iu postgres
export CLUSTERNAME=clustername
/opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml restart $CLUSTERNAME
/opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml edit-config --set 'pause=false' --force
exit -
(replica) Произведите
restartкомпонента Pangolin Manager на реплике:-
С включенной функциональностью «Отказ от root»:
sudo -iu postgres
systemctl --user restart pangolin-manager
exit -
Без функциональности «Отказ от root»:
sudo systemctl restart pangolin-manager
-
Шаг 26. Обновление каталога безопасности
-
(master) Добавьте временный параметр
enable_protection_catalogs_upgradeпод пользователем postgres в конец конфигурационного файла (в зависимости от конфигурации) с помощью обычного текстового редактора:-
Для конфигурации без Pangolin Manager. Отредактируйте конфигурационный файл
$PGDATA_NEW/data/postgresql.conf:enable_protection_catalogs_upgrade = True -
Для конфигурации c Pangolin Manager. Отредактируйте конфигурационный файл
/etc/pangolin-manager/postgres.yml:postgresql:
parameters:
enable_protection_catalogs_upgrade: True
-
-
(master) Произведите
reloadиrestartСУБД в зависимости от конфигурации:-
Для конфигурации без Pangolin Manager:
sudo -iu postgres
export PGDATA_NEW=/pgdata/xx
export PGHOME_NEW=/usr/pangolin-x.x
$PGHOME_NEW/pg_ctl reload -D $PGDATA_NEW/data
$PGHOME_NEW/pg_ctl restart -D $PGDATA_NEW/data
exit -
Для конфигурации c Pangolin Manager:
sudo -iu postgres
export PGDATA_NEW=/pgdata/xx
export CLUSTERNAME=clustername
/opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml reload $CLUSTERNAME
/opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml restart $CLUSTERNAME
exit
-
-
(master) Выполните следующую команду в каждой БД поочередно, кроме БД с включенным флагом
datallowconn.<DB>- заменить на название базы данных:sudo -iu postgres
export PGHOME_NEW=/usr/pangolin-x.x
$PGHOME_NEW/bin/psql -c "SELECT NOW();" -d <DB>
exit -
(master) Удалите временный параметр
enable_protection_catalogs_upgradeпод пользователем postgres из конфигурационного файла (в зависимости от конфигурации) с помощью обычного текстового редактора: -
(master) Произведите
reloadиrestartСУБД в зависимости от конфигурации:-
Для конфигурации без Pangolin Manager:
sudo -iu postgres
export PGDATA_NEW=/pgdata/xx
export PGHOME_NEW=/usr/pangolin-x.x
$PGHOME_NEW/pg_ctl reload -D $PGDATA_NEW/data
$PGHOME_NEW/pg_ctl restart -D $PGDATA_NEW/data
exit -
Для конфигурации c Pangolin Manager:
sudo -iu postgres
export PGDATA_NEW=/pgdata/xx
export CLUSTERNAME=clustername
/opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml reload $CLUSTERNAME
/opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml restart $CLUSTERNAME
exit
-
Шаг 27. Завершающие действия
-
(master, replica) Удалите временные параметры из рабочих конфигурационных файлов:
export PGDATA_NEW=/pgdata/xx
sudo sed -i '/local all postgres scram-sha-256 #tmp_line/d' $PGDATA_NEW/data/pg_hba.conf
sudo sed -i "/autovacuum = 'off' #tmp_line/d" $PGDATA_NEW/data/postgresql.conf
sudo sed -i "/synchronous_commit = 'off' #tmp_line/d" $PGDATA_NEW/data/postgresql.conf
sudo sed -i "/cron.database_name = 'template1' #tmp_line/d" $PGDATA_NEW/data/postgresql.conf -
(master, replica) Удалите неактуальные рабочие файлы исходной БД:
export PGDATA_NEW=/pgdata/xx
export PANGOLIN_VER_OLD=x.x.x
export PGDATA=/pgdata/xx
export PGBACKUP=/pgarclogs/xx
export PANGOLIN_TIMESCALEDB_OLD=x.x.x
sudo dnf remove -y platform-v-pangolin-dbms-$PANGOLIN_VER_OLD pangolin-timescaledb-$PANGOLIN_TIMESCALEDB_OLD.$PANGOLIN_VER_OLD
sudo ln -sfvn $PGDATA_NEW /pgdata/data
sudo rm -rf $PGDATA $PGBACKUP -
(master, replica, arbiter) Актуализируйте
dynmotd.sh:export PANGOLIN_MANAGER=x.x.x
export PANGOLIN_MANAGER_OLD=x.x.x
export PANGOLIN_FULL_VER=0x.00x.0x
export PANGOLIN_FULL_VER_OLD=0x.00x.0x
sudo sed -i "s/$PANGOLIN_MANAGER_OLD/$PANGOLIN_MANAGER/g" /usr/local/sbin/dynmotd.sh
sudo sed -i "s/$PANGOLIN_FULL_VER_OLD/$PANGOLIN_FULL_VER/g" /usr/local/sbin/dynmotd.sh -
(master, replica, arbiter) Актуализируйте
.bash_profileдля пользователяpostgres:export PGHOME=/usr/pangolin-x.x.x
export PGHOME_NEW="\/usr\/pangolin-x.x"
export PGHOME_CLIENT_NEW="\/usr\/pangolin-dbms-client-x.x"
export PGDATA="\/pgdata\/xx"
export PGDATA_NEW="/pgdata/xx"
sudo sed -i '/LD_LIBRARY_PATH/d' /home/postgres/.bash_profile
sudo sed -i '/PG_PLUGINS_PATH/d' /home/postgres/.bash_profile
sudo sed -i "$ a export PGHOME_CLIENT=$PGHOME_CLIENT_NEW" /home/postgres/.bash_profile
sudo sed -i "s/$PGHOME/$PGHOME_NEW/g" /home/postgres/.bash_profile
sudo sed -i "s/$PGDATA/$PGDATA_NEW/g" /home/postgres/.bash_profileДополнительно для конфигурации с Pangolin Manager:
sudo sed -i 's/patronictl/pangolin-manager-ctl/g' /home/postgres/.bash_profile
sudo sed -i 's/usr\/patroni\/patroni_venv\/bin/opt\/pangolin-manager\/bin/g' /home/postgres/.bash_profile
sudo sed -i 's/patroni/pangolin-manager/g' /home/postgres/.bash_profile -
(master) Произведите восстановление данных, измененных в шаге 2, после миграции:
примечаниеВ файле
/home/postgres/current_value.txtнеобходимо выявить, в какой БД были найдены следующие сущности:grant_opts_start/revoke_opts_start/grant_opts_stop/revoke_opts_stop. Значение необходимо подставить в скрипты вместо<DB>.Также необходимо проверить, какому пользователю были выданы права:
- если строка имеет вид
backup_user=X/postgres, то замените<user>наbackup_user; - если строка имеет вид
=X/postgres, то замените<user>наPUBLIC.
-
Под пользователем
postgresзаполните файл~/grant_opts_start.sqlследующим содержимым при помощи текстового редактора:SET SESSION AUTHORIZATION <DB>;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_backup_start TO <user>;
RESET SESSION AUTHORIZATION; -
Под пользователем
postgresзаполните файл~/grant_opts_stop.sqlследующим содержимым при помощи текстового редактора:SET SESSION AUTHORIZATION <DB>;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_backup_stop TO <user>;
RESET SESSION AUTHORIZATION; -
Под пользователем
postgresзаполните файл~/revoke_opts_start.sqlследующим содержимым при помощи текстового редактора:REVOKE EXECUTE ON FUNCTION pg_catalog.pg_backup_start FROM <user>; -
Под пользователем
postgresзаполните файл~/revoke_opts_stop.sqlследующим содержимым при помощи текстового редактора:REVOKE EXECUTE ON FUNCTION pg_catalog.pg_backup_stop FROM <user>; -
Запустите скрипт с помощью команды:
sudo -iu postgres
export PGHOME_NEW=/usr/pangolin-x.x
$PGHOME_NEW/bin/psql -f ~/grant_opts_start.sql
$PGHOME_NEW/bin/psql -f ~/grant_opts_stop.sql
$PGHOME_NEW/bin/psql -f ~/revoke_opts_start.sql
$PGHOME_NEW/bin/psql -f ~/revoke_opts_stop.sql
exit
- если строка имеет вид