Инструкция по установке и настройке КУК Postgresql#

1. Подготовка ОС#

1.1. Требования для установки КУК#

  • Установлена ОС ALT Linux v.10.2, подключен официальный репозиторий вендора ОС.

  • Минимальные требования для узла с ролью голосующий – 4 vCPU, 4GB RAM, 50GB Hard Drive

  • СУБД – PostgreSQL v.16.4 (или новее).

  • Сконфигурирована синхронизация времени по ntp;

  • Обеспечено беспрепятственное прохождение трафика между узлами по портам, указанным в таблице.

Таблица узлов#

Роль узла

DNS имя

IP адрес

Порты

сервер БД

alt-db-1

IP.alt-db-1

22,2224,5405,5432,6432

сервер БД

alt-db-2

IP.alt-db-2

22,2224,5405,5432,6432

голосующий

alt-voter

IP.alt-voter

22,2224,5405

nfs

alt-nfs-1

IP.alt-nfs-1

111,2049

nfs

alt-nfs-2

IP.alt-nfs-2

111,2049

Виртуальный IP

-

VIP-master

5432

Виртуальный IP

-

VIP-pgbouncer

6432

  • Имена узлов, указанных в таблицах, должны разрешаться службой DNS или вручную указаны в /etc/hosts (предпочтительнее)

  • Среднее время задержки между узлами не должно превышать 5мс

  • Пропускная способность между узлами должна быть не менее 1 Гбит/с

  • Скорость записи и чтения на сетевые папки NFS с узлов СУБД должна быть не менее 500 МБ/с

  • Смонтированы необходимые NFS разделы:

    • На узле с СУБД на основном ЦОД монтируется по NFS общая сетевая папка backup с СХД локальной площадки как /bkp-local, общая сетевая папка backup с СХД удаленной площадки как /bkp-rmt.

    • На узле с СУБД на резервном ЦОД монтируется по NFS общая сетевая папка backup с СХД локальной площадки как /bkp-local, общая сетевая папка backup с СХД удаленной площадки как /bkp-rmt.

Схема монтирования сетевых папок NFS#

Имя сетевой папки NFS

Точка монтирования на узле alt-db-1

Точка монтирования на узле alt-db-2

IP.alt-nfs-1:/backup

/bkp-local

/bkp-rmt

IP.alt-nfs-2:/backup

/bkp-rmt

/bkp-local

Пример: На alt-db-1

sudo mkdir /bkp-local
sudo mkdir /bkp-rmt
sudo mount -t nfs -o rw,hard,vers=4.2 IP.alt-nfs-1:/mnt/nfs-share/ /bkp-local
sudo mount -t nfs -o rw,hard,vers=4.2 IP.alt-nfs-2:/mnt/nfs-share/ /bkp-rmt

На alt-db-2

sudo mkdir /bkp-local
sudo mkdir /bkp-rmt
sudo mount -t nfs -o rw,hard,vers=4.2 IP.alt-nfs-2:/mnt/nfs-share/ /bkp-local
sudo mount -t nfs -o rw,hard,vers=4.2 IP.alt-nfs-1:/mnt/nfs-share/ /bkp-rmt

1.2 Подготовка ОС#

Создать файл /etc/security/limits.d/99-pg.conf с содержимым#

(настройки приведены для случая max_connections=500)

postgres softnproc 16384
postgres hardnproc 16384
postgres softnofile 65536
postgres hardnofile 65536
postgres softstack 10240
postgres hardstack 32768

Создать файл /etc/sysctl.d/99-pg.conf с содержимым#

kernel.sysrq = 1
kernel.core_pattern = /tmp/core-%e-%s-%u-%g-%p-%t
vm.mmap_min_addr = 65536
vm.swappiness = 1
vm.dirty_ratio = 80
vm.dirty_expire_centisecs = 500
vm.dirty_writeback_centisecs = 100
kernel.shmmax = 4398046511104
kernel.shmall = 1073741824
kernel.shmmni = 4096
fs.file-max = 6815744
fs.aio-max-nr = 1048576
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
kernel.sched_migration_cost_ns = 5000000
kernel.sched_autogroup_enabled = 0
kernel.sem = 250 512000 100 2048

Применить настройки командой

sysctl -p /etc/sysctl.d/99-pg.conf

Примечание

Примечание. Приведенные настройки могут быть изменены в зависимости от нагрузки и количества подключений к СУБД.

Заполнить файл hosts#

Дополните файл hosts на каждом узле, пример содержания приведен ниже

127.0.0.1       localhost.localdomain localhost
192.168.242.200 alt-db-1
192.168.242.201 alt-db-2
192.168.242.202 alt-voter
192.168.242.203 alt-nfs-1
192.168.242.204 alt-nfs-2
::1     localhost6.localdomain localhost6

Выполнить рекомендации по использованию огромных страниц#

https://postgrespro.ru/docs/postgresql/13/kernel-resources%23LINUX-HUGE-PAGES

Для узлов в виде виртуальных машин#

Необходимо изменить значение в /sys/block/sda(b,c)/queue/rotational с текущего 1 на 0, чтобы ОС определяла диск как ssd

Для проверки значения rotational для дисков в ОС необходимо выполнить команду:

lsblk -d -o name,rota

Примерный вывод должен быть таким:

NAME ROTA
sda 0
sdb 0
...

Если параметр будет равен 1 для дисковых устройств, то необходимо изменить его на 0. Для этого необходимо выполнить следующие действия

  1. Создать файл 60-ssd.rules

    touch /etc/udev/rules.d/60-ssd.rules
    

    с содержимым

    ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}="0"
    
  2. Проверить корректность и срабатывание правила командой (указан пример для диска sda):

    udevadm test -a add $(udevadm info -q path -n /dev/sda)
    
  3. Убедиться, что значение rotational =0 командой:

    lsblk -d -o name,rota
    

2. Установка и настройка PostgreSQL#

2.1 Установка PostgreSQL#

Установить PostgreSQL v16 на alt-db-1 и alt-db-2:

sudo apt-get install postgresql16-server postgresql16-contrib

Далее инициализировать базу данных. Для этого на alt-db-1 выполнить команду от имени системного пользователя postgres:

sudo -u postgres initdb -D /var/lib/pgsql/data/ --lc-ctype=ru_RU.UTF-8 --lc-collate=ru_RU.UTF-8 --auth-host=scram-sha-256 --data-checksums

Примечание

/var/lib/pgsql/data/ - директория базы данных, может быть изменена при необходимости.

2.2 Настройка PostgreSQL#

Начальная настройка СУБД на alt-db-1#

Отредактировать файл конфигурации postgresql.conf#

Примечание

Файл находиться по пути /var/lib/pgsql/data/postgresql.conf

Рекомендуемое содержимое конфигурационного файла postgresql.conf для конфигурации оборудования (CPU 64 core, RAM 512 GB) приведено ниже:

# - Connection Settings –
listen_addresses = '*'
port = 5432
max_connections = 1000
# - Memory –
shared_buffers = 64GB
max_prepared_transactions = 3000
temp_buffers = 32MB
work_mem = 128MB
maintenance_work_mem = 50GB
# - Asynchronous Behavior -
effective_io_concurrency = 2
# - Background Writer -
bgwriter_delay = 20ms
bgwriter_lru_multiplier = 4.0
bgwriter_lru_maxpages = 400
# WRITE AHEAD LOG
wal_level = replica
fsync = on
synchronous_commit = on
wal_compression = on
wal_log_hints = on
# - Checkpoints –
checkpoint_timeout = 1800
checkpoint_completion_target = 0.9
# - Archiving –
archive_mode = always
archive_command = 'pg_probackup-16 archive-push -B /bkp-local/backup --instance global --compress --wal-file-path %p --wal-file-name %f'
# REPLICATION
max_wal_senders = 15
wal_keep_size = 20GB
max_wal_size = 20GB
min_wal_size = 5GB
max_replication_slots = 8
hot_standby = on
hot_standby_feedback = on
tcp_keepalives_idle = 60
tcp_keepalives_interval = 5
tcp_keepalives_count = 5
track_commit_timestamp = on
# QUERY TUNING
effective_cache_size = 512GB
# ERROR REPORTING AND LOGGING
logging_collector = on
log_min_duration_statement = 0
# AUTOVACUUM PARAMETERS
autovacuum = on
log_autovacuum_min_duration = 0
autovacuum_max_workers = 32
autovacuum_naptime = 20s
autovacuum_vacuum_scale_factor = 0.01
autovacuum_analyze_scale_factor = 0.001
autovacuum_vacuum_cost_delay = 10
autovacuum_vacuum_cost_limit = 1000
# LOCK MANAGEMENT
max_locks_per_transaction = 150
# ERROR HANDLING
restart_after_crash = off
# CUSTOMIZED OPTIONS
pg_stat_statements.max=10000
pg_stat_statements.track = all

Примечание

Указанные выше параметры могут быть изменены при использовании другого оборудования.

Отредактировать файл конфигурации доступов pg_hba.conf#

Примечание

Файл находиться по пути /var/lib/pgsql/data/pg_hba.conf

local   backupdb    backup                                  scram-sha-256
local   replication backup                                  scram-sha-256
host    template1   postgres        X.X.X.0/24              scram-sha-256
host    all         rewind_user     X.X.X.0/24              scram-sha-256
host    replication repl            X.X.X.0/24              scram-sha-256
host    replication backup          X.X.X.0/24              scram-sha-256
host    backupdb    backup          127.0.0.1/32            scram-sha-256
host    backupdb    backup          X.X.X.0/24              scram-sha-256
Запускаем сервер PostgreSQL#
sudo -u postgres pg_ctl -D /var/lib/pgsql/data/ start

После запуска рекомендуется проверить отсутствие ошибок в лог-файле postgresql.log.

Проверить запуск СУБД можно командой:

ps auwx | grep postgres
Создание пользователей#

Подключаемся к БД

sudo -u postgres psql

Выполняем следующие команды

CREATE ROLE repl WITH LOGIN REPLICATION PASSWORD 'password';
CREATE ROLE backup WITH LOGIN REPLICATION PASSWORD 'password';
GRANT USAGE ON SCHEMA pg_catalog TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.set_config(text, text, boolean) TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_is_in_recovery() TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_backup_start(text, boolean) TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_backup_stop(boolean) TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_create_restore_point(text) TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_switch_wal() TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_last_wal_replay_lsn() TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.txid_current() TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.txid_current_snapshot() TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.txid_snapshot_xmax(txid_snapshot) TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_control_checkpoint() TO backup;
COMMIT;
CREATE USER rewind_user LOGIN PASSWORD 'password';
GRANT EXECUTE ON function pg_catalog.pg_ls_dir(text, boolean, boolean) TO rewind_user;
GRANT EXECUTE ON function pg_catalog.pg_stat_file(text, boolean) TO rewind_user;
GRANT EXECUTE ON function pg_catalog.pg_read_binary_file(text) TO rewind_user;
GRANT EXECUTE ON function pg_catalog.pg_read_binary_file(text, bigint, bigint, boolean) TO rewind_user;

Из соображений безопасности для создания бекапов рекомендуется создать и использовать отдельную базу данных backupdb.

Необходимо создать БД backupdb:

CREATE DATABASE backupdb OWNER backup;

Изменить при необходимости пароль postgres:

ALTER USER postgres PASSWORD 'password';
Проинициализировать файл паролей#

В домашнем каталоге пользователя postgres (по умолчанию /var/lib/pgsql), выполнив команду на 2х узлах с СУБД:

echo 'VIP-master:5432:replication:repl:pass-for-repl' >> /var/lib/pgsql/.pgpass
echo '*:5432:backupdb:backup:pass-for-backup' >> /var/lib/pgsql/.pgpass
echo '*:5432:*:rewind_user:pass-for-rewind' >> /var/lib/pgsql/.pgpass
echo '*:5432:template1:postgres:pass-for-postgres' >> /var/lib/pgsql/.pgpass
chmod 600 /var/lib/pgsql/.pgpass
chown postgres:postgres /var/lib/pgsql/.pgpass

2.3 Установка и настройка pg_probackup#

Установка pg_probackup на alt-db-1 и alt-db-2#

Установить pg_probackup на узлах с СУБД (alt-db-1 и alt-db-2):

wget https://repo.postgrespro.ru/pg_probackup/rpm/latest/altlinux-p10/x86_64/RPMS.vanilla/pg_probackup-16-2.5.15-2.ac92457c2d1cfe43fced5b1167b5c90ecdc24cbe.x86_64.rpm

sudo rpm -i pg_probackup-16-2.5.15-2.ac92457c2d1cfe43fced5b1167b5c90ecdc24cbe.x86_64.rpm

Инициализация pg_probackup на alt-db-1#

sudo -u postgres pg_probackup-16 init -B /bkp-local/backup
sudo -u postgres pg_probackup-16 add-instance -B /bkp-local/backup -D /var/lib/pgsql/data/ --instance global
sudo -u postgres pg_probackup-16 set-config -B /bkp-local/backup --instance global --log-filename=pg_probackup-global-%d.log

Проверка успешности инициализации pg_probackup

sudo -u postgres pg_probackup-16 backup -B /bkp-local/backup --instance global -b FULL -U backup –d backupdb --compress --stream -j 6
sudo -u postgres pg_probackup-16 show -B /bkp-local/backup --instance global

Инициализация pg_probackup на alt-db-2#

sudo -u postgres pg_probackup-16 init -B /bkp-local/backup
sudo -u postgres pg_probackup-16 add-instance -B /bkp-local/backup -D /var/lib/pgsql/data/ --instance global
sudo -u postgres pg_probackup-16 set-config -B /bkp-local/backup --instance global --log-filename=pg_probackup-global-%d.log

2.4 Создание копии БД на alt-db-2#

Вариант 1 – с использованием утилиты pg_basebackup#

Выполнить команду:

sudo -u postgres pg_basebackup -D /var/lib/pgsql/data/ -h alt-db-1 -U repl -X stream -c fast

Вариант 2 – восстановить из резервной копии с помощью pg_probackup#

Перед восстановлением необходимо узнать идентификатор полного бэкапа (backup_id):

sudo -u postgres pg_probackup-16 show -B /bkp-rmt/backup --instance global

Выполняем восстановление:

sudo -u postgres pg_probackup-16 restore -B /bkp-rmt/backup --instance global -i backup_id

Вариант 3 – скопировать с помощью pg_probackup+catchup#

Выполнить команду (потребуется ввести пароль пользователя postgres):

sudo -u postgres pg_probackup-16 catchup 
--source-pgdata /var/lib/pgsql/data/ \
--destination-pgdata /var/lib/pgsql/data/ \
-p 5432 -d backupdb -U backup \
--stream \
--backup-mode=FULL \
--remote-host=hostname1 \
--remote-user=postgres \
--remote-path=/usr/bin/ \
-j 6

2.5 Установка и настройка pgbouncer#

Установка pgbouncer#

Выполнить на узлах alt-db-1 и alt-db-2:

sudo apt-get install pgbouncer

Настройка pgbouncer#

Необходимо повысить лимиты для сервиса pgbouncer.

sudo systemctl edit pgbouncer

Дописать в начало файла

[Service]
LimitNOFILE=10240

Примечание

10240 – максимальное число открытых файлов (при необходимости можно изменить)

Перечитать конфигурацию systemd:

sudo systemctl daemon-reload

Изменить конфигурационный файл /etc/pgbouncer/pgbouncer.ini в соответствии с требуемыми настройками pgbouncer.

[databases]
* = host=localhost port=5432 auth_user=postgres
[pgbouncer]
listen_addr = *
listen_port = 6432

3. Установка и настройка кластерного ПО#

3.1 Установка кластерного ПО#

Выполнить команду

sudo apt-get install pcs corosync pacemaker sbd

Добавить в файл /etc/bashrc.d/ruby.sh если он пуст:

export PATH=$PATH:/var/cache/ruby/gemie/bin:/usr/lib/ruby/bin
export GEM_VENDOR=/var/cache/ruby/gemie
export GEM_HOME=/var/cache/ruby/gemie
export GEM_PATH=/var/cache/ruby/gemie:/usr/lib/ruby/gemie:/usr/lib64/ruby/gemie:/usr/lib/ruby/gems/2.7.0/:/usr/lib/ruby/gems/2.5.0/

3.2 Настройка watchdog в кластере#

Примечание

Рекомендуется с помощью среды виртуализации эмулировать аппаратный watchdog i6300esb для виртуальных машин КУК. Если нет возможности эмулировать аппаратный watchdog, то необходимо использовать программный - softdog.

Внимание

Одновременно использовать и аппаратный и программный watchdog нельзя!

Использование аппаратного watchdog#

Создать на всех узлах файл /etc/rc.d/rc.local с содержимым:

#!/bin/sh
/sbin/modprobe i6300esb

Сделать файл /etc/rc.d/rc.local исполняемым:

chmod +x /etc/rc.d/rc.local

Затем перезагрузить все узлы и проверить загрузку модуля ядра i6300esb командой:

lsmod | grep i6300esb

Проверить на всех узлах, что в ОС появилось устройство /dev/watchdog:

ls /dev/watchdog

Использование программного watchdog#

Создать на всех узлах файл /etc/rc.d/rc.local с содержимым:

#!/bin/sh
/sbin/modprobe softdog

Сделать файл /etc/rc.d/rc.local исполняемым:

chmod +x /etc/rc.d/rc.local

Затем перезагрузить все узлы и проверить загрузку модуля ядра softdog командой:

lsmod | grep softdog

Проверить на всех узлах, что в ОС появилось устройство /dev/watchdog:

ls /dev/watchdog

3.3 Настройка основных ресурсов#

Подготовка ОС к использованию кластерного ПО#

На всех узлах кластера включить автозапуск сервиса pcsd

sudo systemctl enable pcsd.service
sudo systemctl start pcsd.service

На всех узлах кластера выключить автозапуск сервиса postgresql (для узлов с СУБД), corosync и pacemaker (для всех узлов):

sudo systemctl disable postgresql
sudo systemctl disable corosync.service pacemaker.service

На всех узлах кластера задать пароль пользователя hacluster:

sudo passwd hacluster

Конфигурация кластера#

Примечание

Далее все команды выполняются на 1 узле, к примеру alt-voter

Выполнить команду авторизации узлов в кластере:

sudo pcs host auth -u hacluster alt-db-1 alt-db-2 alt-voter

Выполнить предварительную настройку кластера.

sudo pcs cluster setup global-cluster alt-db-1 alt-db-2 alt-voter

Запустить кластер:

sudo pcs cluster start --all --wait=60

Создать конфигурационный файл кластера:

sudo pcs cluster cib cluster.cfg

Изменить свойства кластера:

sudo pcs -f cluster.cfg resource defaults update resource-stickiness="1000"
sudo pcs -f cluster.cfg resource defaults update migration-threshold="3"

Создать ресурсы виртуальных IP:

sudo pcs -f cluster.cfg resource create vip-master ocf:heartbeat:IPaddr2 cidr_netmask=24 ip=<VIP-master>
sudo pcs -f cluster.cfg resource create vip-pgbouncer ocf:heartbeat:IPaddr2 cidr_netmask=24 ip=<VIP-pgbouncer>

Создать ресурс pgbouncer:

sudo pcs -f cluster.cfg resource create pgbouncer systemd:pgbouncer

Создать ресурс pgsql:

sudo pcs -f cluster.cfg resource create pgsql \
ocf:heartbeat:pgsql \
master_ip=<VIP-master> \
node_list="alt-db-1 alt-db-2" \
rep_mode=sync \
primary_conninfo_opt="keepalives_idle=60 keepalives_interval=5 keepalives_count=5" \
repuser=repl \
restore_command='pg_probackup-16 archive-get -B /bkp-rmt/backup --instance global --wal-file-path=%p --wal-file-name=%f'

Указать ресурсу pgsql параметры клонирования и промоута:

sudo pcs -f cluster.cfg resource promotable pgsql promoted-max=1 promoted-node-max=1 clone-max=2 notify=true clone-node-max=1

Запретить ресурсам стартовать на голосующем узле:

sudo pcs -f cluster.cfg constraint location pgsql-clone avoids alt-voter
sudo pcs -f cluster.cfg constraint location vip-master avoids alt-voter
sudo pcs -f cluster.cfg constraint location pgbouncer avoids alt-voter
sudo pcs -f cluster.cfg constraint location vip-pgbouncer avoids alt-voter

Указать совместное расположение ресурсов pgsql, pgbouncer, vip-pgbouncer и vip-master:

sudo pcs -f cluster.cfg constraint colocation add vip-master with master pgsql-clone INFINITY
sudo pcs -f cluster.cfg constraint colocation add vip-pgbouncer with master pgsql-clone INFINITY
sudo pcs -f cluster.cfg constraint colocation add pgbouncer with master pgsql-clone INFINITY

Определить порядок запуска ресурсов

sudo pcs -f cluster.cfg constraint order promote pgsql-clone then vip-master score=INFINITY symmetrical=false
sudo pcs -f cluster.cfg constraint order demote pgsql-clone then stop vip-master score=0 symmetrical=false
sudo pcs -f cluster.cfg constraint order promote pgsql-clone then vip-pgbouncer score=INFINITY symmetrical=false
sudo pcs -f cluster.cfg constraint order demote pgsql-clone then stop vip-pgbouncer score=0 symmetrical=false

Загрузить конфигурационный файл ресурсов в кластер

sudo pcs cluster cib-push cluster.cfg

Настройка фенсинга в КУК#

Для настройки фенсинга в кластере необходимо выполнить последовательность команд:

sudo pcs stonith sbd enable SBD_STARTMODE=clean

Далее потребуется рестарт кластера:

sudo pcs cluster stop --all
sudo pcs cluster start --all --wait=60

Далее выполнить команды:

sudo pcs property set stonith-timeout="12s"
sudo pcs property set stonith-watchdog-timeout="6s"
sudo pcs property set cluster-recheck-interval="1m"
sudo pcs property set fence-reaction="panic"
sudo pcs property set no-quorum-policy=suicide

4. Проверка кластера#

Для проверки состояния кластера

sudo crm_mon -Afr

Примерный вывод должен быть таким:

Cluster Summary:
  * Stack: corosync (Pacemaker is running)
  * Current DC: alt-voter (version 2.1.9-alt1-2.1.9) - partition with quorum
  * Last updated: Tue Aug 12 10:38:15 2025 on alt-voter
  * Last change:  Tue Aug 12 10:38:13 2025 by root via root on alt-db-2
  * 3 nodes configured
  * 5 resource instances configured

Node List:
  * Online: [ alt-db-1 alt-db-2 alt-voter ]

Full List of Resources:
  * vip-master  (ocf:heartbeat:IPaddr2):         Started alt-db-1
  * vip-pgbouncer       (ocf:heartbeat:IPaddr2):         Started alt-db-1
  * pgbouncer   (systemd:pgbouncer):     Started alt-db-1
  * Clone Set: pgsql-clone [pgsql] (promotable):
    * Promoted: [ alt-db-1 ]
    * Unpromoted: [ alt-db-2 ]

Node Attributes:
  * Node: alt-db-1:
    * master-pgsql                      : 1000
    * pgsql-data-status                 : LATEST
    * pgsql-master-baseline             : 00000000101B4E08
    * pgsql-status                      : PRI

  * Node: alt-db-2:
    * master-pgsql                      : 100
    * pgsql-data-status                 : STREAMING|SYNC
    * pgsql-status                      : HS:sync

Migration Summary:

Если у вас статус одной из нод HS:alone и disconected, то проверьте содержимое файла /var/lib/pgsql/tmp/recovery.conf на всех нода с СУБД.

Пример содержания на alt-db-1:

primary_conninfo = 'host=192.168.242.205 port=5432 user=repl application_name=alt-db-1 keepalives_idle=60 keepalives_interval=5 keepalives_count=5'
restore_command = 'pg_probackup-16 archive-get -B /bkp-rmt/backup --instance global --wal-file-path=%p --wal-file-name=%f'
recovery_target_timeline = 'latest'

Если не хватает данных, то допишите их.

5. Дополнительная информация#

Создание резервных копий виртуальных машин кластера#

После успешного запуска кластера необходимо создать резервные копии виртуальных машин кластера в виде образов ВМ на случай катастрофы ДЦ1 или ДЦ2.

  1. Для выполнения данной задачи необходимо сначала остановить кластер:

    sudo pcs cluster stop --all
    
  2. Остановить виртуальные машины кластера.

  3. Выполнить на всех гипервизорах кластера резервное копирование виртуальных машин без хранилищ с БД.

  4. Сохранить образы виртуальных машин на всех NFS-серверах.

  5. Запустить виртуальные машины кластера.

  6. Удалить файл блокировки на мастере:

    sudo rm /var/lib/pgsql/tmp/PGSQL.lock
    
  7. Запустить кластер командой:

    sudo pcs cluster start --all
    
  8. В консоли любого узла проконтролировать состояние кластера командой crm_mon:

    sudo crm_mon -Afr
    

Изменение каких-либо параметров ресурса кластера#

При необходимости можно изменить или добавить необходимые параметры ресурса кластера. Например, при необходимости изменить параметр restore_command ресурса pgsql выполнить следующие шаги и команды.

  1. Деактивировать ресурс pgsql:

    sudo pcs resource disable pgsql
    
  2. Выполнить команду обновления нужного параметра, например, restore_command:

    sudo pcs resource update pgsql restore_command='новая команда'
    
  3. Удалить файл блокировки на мастере:

    sudo rm /var/lib/pgsql/tmp/PGSQL.lock
    
  4. Активировать ресурс pgsql:

    sudo pcs resource enable pgsql
    
  5. Убедиться с помощью монитора кластера, что в кластере появился мастер и реплика

    sudo crm_mon -Afr
    

Удаление (разбор) кластера#

Внимание

Внимание. Кластер будет разобран, сервис СУБД будет недоступен.

Для удаления кластерной конфигурации необходимо выполнить следующие шаги.

  1. Остановить кластер:

    sudo pcs cluster stop --all
    
  2. Затем удалить кластер:

    sudo pcs cluster destroy --all
    

Статусы ресурсов кластера#

В различных состояниях кластера ресурсы могут иметь разные статусы.

  • Ресурс pgsql

    • Unpromoted – статус указывает на работу данного узла в режиме реплики.

    • Promoted – статус указывает на работу данного узла в режиме мастера.

    • Disabled – статус указывает на заблокированное (неактивное) состояние ресурса.

    • Stopped – ресурс остановлен.

Также состояние ресурса pgsql указано по каждому узлу более подробно в секции Node Attributes:

  • master-pgsql

    • 1000 – score соответствует состоянию мастера

    • 100 – score соответствует синхронной реплике

    • -INFINITY – score соответствует асинхронной реплике или реплике без мастера Примечание. Значение -INFINITY («минус бесконечность») у асинхронной реплики не дает кластеру в случае сбоя на мастере переключиться на асинхронную реплику.

  • pgsql-status

    • PRI – соответствует состоянию мастера

    • HS:sync – соответствует синхронной реплике

    • HS:async – соответствует асинхронной реплике

    • HS:alone – соответствует режиму реплики без подключения к мастеру

  • pgsql-data-status

    • LATEST – соответствует состоянию мастера

    • STREAMING|SYNC – соответствует синхронной реплике

    • STREAMING|ASYNC – соответствует синхронной реплике

    • DISCONNECT – реплика не подключена к мастеру или остановлен postgres на узле

  • vip-master vip-pgbouncer pgbouncer

    • Started – ресурс запущен

    • Stoped – ресурс остановлен

Вспомогательные команды для кластера#

Некоторые вспомогательные команды для кластера, которые помогут при разборе инцидентов:

  • Очистка счетчика сбоев для ресурса pgsql-clone на узле hostname1:

    sudo pcs resource cleanup pgsql node=hostname1
    
  • Деактивация ресурса pgsql:

    sudo pcs resource disable pgsql
    
  • Активация ресурса pgsql:

    sudo pcs resource enable pgsql
    
  • Остановка ресурса pgsql:

    sudo pcs resource stop pgsql
    
  • Запуск ресурса pgsql:

    sudo pcs resource start pgsql
    
  • Остановка кластера на текущем узле:

    sudo pcs cluster stop
    
  • Посмотреть конфигурацию кластера:

    sudo pcs config show
    
  • Посмотреть веса (очки score) ресурсов:

    sudo pcs resource scores
    
  • Посмотреть состояние кворума:

    sudo corosync-quorumtool -s