Создание и запуск новой реплики
Последовательность выполнения
- Подготовьтесь к резервному копированию.
- Создайте резервную копию.
- Восстановите базу данных.
- Запустите репликацию с позиции.
Подготовка к резервному копированию
-
Убедитесь, что на базе-источнике параметр
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.
Запуск репликации с позиции
-
Добавьте базу в пользовательский интерфейс консоли управления. Для этого:
-
Создайте соединение во вкладке Соединения.
-
Укажите в параметрах соединения в открывшемся окне Создание соединения:

-
Нажмите Target на схеме графа во вкладке Графы репликации и значок
под графом:

-
Выберите новую базу-приемник в открывшемся окне Редактирование свойств источника/потребителя данных:

-
-
Выполните в консоли на базе-источнике
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();"где
<slot_name>- имя слота на базе источнике -
Нажмите модуль Applier на схеме графа на вкладке Графы репликации и значок
в развернувшемся меню под модулем:

-
Введите lsn в поле Позиция, выберите DB как тип позиции и укажите ID базы-приемника в поле Source ID в открывшемся окне Старт модуля с заданной позиции:

- Нажмите
.