Инструкция по установке и настройке КУК Postgresql
Contents
Инструкция по установке и настройке КУК 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. Для этого необходимо выполнить следующие действия
Создать файл 60-ssd.rules
touch /etc/udev/rules.d/60-ssd.rules
с содержимым
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}="0"
Проверить корректность и срабатывание правила командой (указан пример для диска sda):
udevadm test -a add $(udevadm info -q path -n /dev/sda)
Убедиться, что значение 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.
Для выполнения данной задачи необходимо сначала остановить кластер:
sudo pcs cluster stop --all
Остановить виртуальные машины кластера.
Выполнить на всех гипервизорах кластера резервное копирование виртуальных машин без хранилищ с БД.
Сохранить образы виртуальных машин на всех NFS-серверах.
Запустить виртуальные машины кластера.
Удалить файл блокировки на мастере:
sudo rm /var/lib/pgsql/tmp/PGSQL.lock
Запустить кластер командой:
sudo pcs cluster start --all
В консоли любого узла проконтролировать состояние кластера командой crm_mon:
sudo crm_mon -Afr
Изменение каких-либо параметров ресурса кластера#
При необходимости можно изменить или добавить необходимые параметры ресурса кластера.
Например, при необходимости изменить параметр restore_command
ресурса pgsql
выполнить следующие шаги и команды.
Деактивировать ресурс
pgsql
:sudo pcs resource disable pgsql
Выполнить команду обновления нужного параметра, например,
restore_command
:sudo pcs resource update pgsql restore_command='новая команда'
Удалить файл блокировки на мастере:
sudo rm /var/lib/pgsql/tmp/PGSQL.lock
Активировать ресурс
pgsql
:sudo pcs resource enable pgsql
Убедиться с помощью монитора кластера, что в кластере появился мастер и реплика
sudo crm_mon -Afr
Удаление (разбор) кластера#
Внимание
Внимание. Кластер будет разобран, сервис СУБД будет недоступен.
Для удаления кластерной конфигурации необходимо выполнить следующие шаги.
Остановить кластер:
sudo pcs cluster stop --all
Затем удалить кластер:
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