Создание и запуск новой реплики#
Последовательность выполнения#
Подготовьтесь к резервному копированию.
Создайте резервную копию.
Восстановите базу данных.
Запустите репликацию с позиции.
Подготовка к резервному копированию#
Убедитесь, что на базе-источнике параметр
wal_levelустановлен вlogical, параметрmax_wal_senders >= 2. Для этого:Проверьте значение
wal_level: psql -cshow wal_level;Если значение
wal_levelнеlogical: psql -calter system set wal_level = logical;Проверьте значение
max_wal_senders: psql -cshow max_wal_senders;Если значение
max_wal_senders < 2: psql -calter system set max_wal_senders = 10;После изменения параметров перезапустите сервер: pg_ctl restart.
Запустите модуль Capture на вкладке Графы репликации в пользовательском интерфейсе консоли управления.
Создание резервной копии#
Выполните pg_basebackup на базе-источнике. Для этого:
Проверьте, есть ли разрешение на локальное подключение по протоколу репликации для роли backup_test (можно выбрать любую другую роль для проведения репликации):
psql -c `SELECT type, database, user_name, address, auth_method FROM pg_hba_file_rules() WHERE 'replication' = ANY(database) AND user_name = '{backup_test}';`Если разрешение есть, отобразится:
Если разрешения для роли нет, добавьте в файл pg_hba.conf:
echo "host replication backup_test {адрес_базы_данных} trust" >> /pgdata/06/data/pg_hba.conf.Убедитесь, что у роли backup_test есть атрибут REPLICATION, чтобы утилита pg_basebackup могла подключиться к серверу под этой ролью:
psql -c `\du backup_test`Если атрибут есть, отобразится:
Если атрибута у роли нет, добавьте его: psql -c
ALTER ROLE backup_test REPLICATION.Выполните
pg_basebackup -h localhost -v -U backup_test -D /home/postgres/backup.Укажите в параметре -D путь к директории созданной резервной копии, если у базы-источника один tablespace.
Укажите в параметре -D путь к директории для основного tablespace, если tablespace несколько. Для остальных tablespaces укажите маппинг:
pg_basebackup -h localhost -v -U backup_test -D /home/postgres/backup/data --tablespace mapping=/pgdata/06/grdl_ts_data=/home/postgres/backup/grdl_ts_data --tablespace-mapping=/pgdata/06/grdl_ts_idx=/home/postgres/backup/grdl_ts_idxМаппинг можно не указывать, а выгрузить tablespaces в .tar архивах:
pg_basebackup --format=tar -h localhost -v -U backup_test -D /home/postgres/backup.Переместите резервную копию на сервер базы-приемника.
Выполните
pg_basebackupна базе-приемнике.Убедитесь, что на базе-источнике разрешен доступ к базе-приемнику. Для этого проверьте на базе-источнике файл
pg_hba.conf:psql -c `SELECT type, database, user_name, address, auth_method FROM pg_hba_file_rules() WHERE 'replication' = ANY(database) AND user_name = '{backup_test}';Если доступ есть, отобразится:
Если доступа нет, добавьте в файл
pg_hba.confадрес базы-приемника:echo "host replication backup_test {адрес_базы-приемника} trust" >> /pgdata/06/data/pg_hba.conf.Проверьте атрибуты роли backup_test аналогично пунктам 1,2.
Выполните на базе-приемнике:
pg_basebackup {адрес_базы-источника} -v -U backup_test -D /home/postgres/backup.Укажите в параметре -D путь к директории для основного tablespace, если tablespace несколько.
Восстановление базы данных#
Убедитесь, что сервер приемника остановлен. Для этого выполните скрипт в консоли сервера базы-приемника:
pg_ctl status.Если сервер остановлен, отобразится:
pg_ctl:no server running.Остановите сервер, если он запущен:
pg_ctl stop.Удалите файлы данных сервера приемника:
sudo rm -rf /pgdata/06/./pgdata/06/— путь к директории с файлами данных базы-приемника.Скопируйте содержимое директории backup:
sudo cp -r /home/postgres/backup/. /pgdata/06/./home/postgres/backup/— путь к директории, в которой находится резервная копия.Выдайте пользователю права на директорию:
sudo chown -R postgres /pgdata/06.Запустите сервер:
pg_ctl start.
Запуск репликации с позиции#
Добавьте базу в пользовательский интерфейс консоли управления. Для этого:
Выполните в консоли на базе-источнике
sudo cat /home/postgres/backup/data/backup_manifest | jq -r '."WAL-Ranges"[0]."End-LSN"', чтобы узнать lsn для старта репликации.Преобразуйте полученный lsn в десятеричный формат:
psql -c "SELECT '9/1C001730'::pg_lsn - '0/0'::pg_lsn as lsn;".Узнайте source_id на базе-источнике:
psql -c "select system_identifier & 4294967295 # ('x' || lpad(rpad(substring(lpad(md5(case current_setting('cluster_name') when '' then 'PANGOLIN' else current_setting('cluster_name') end),32) from 25+2),16-2,'0'),16,'0'))::bit(64)::bigint # ('x'||rpad(substring(lpad(md5('slot_name'), 32, '0') from 29 for 2), 16, '0'))::bit(64)::bigint from pg_control_system();"Нажмите модуль Applier на схеме графа на вкладке Графы репликации и значок
в развернувшемся меню под модулем:Введите lsn в поле Позиция, выберите DB как тип позиции и укажите ID базы-приемника в поле Source ID в открывшемся окне Старт модуля с заданной позиции:
Нажмите
.




под графом:


