Модули/Failover и pg_rewind/Синхронизация
7

Синхронизация

Полная и инкрементальная ресинхронизация данных

35 минУрок 7 из 9
Прогресс0%

Теория

Полная ресинхронизация — процесс полного копирования данных с мастера на реплику.

Инкрементальная ресинхронизация — применение пропущенных WAL-файлов.

Ресинхронизация может занять много времени при большом расхождении данных.

Для ускорения используйте rsync или pg_basebackup с параллельным копированием.

Практика

1. Проверка расхождения

Определите размер расхождения данных:

Проверка расхождения
Команда
sudo -u postgres psql -h standby-ip -c "SELECT pg_wal_lsn_diff(pg_last_wal_receive_lsn(), (SELECT pg_last_wal_replay_lsn() FROM pg_stat_wal_receiver));"
Вывод:
 pg_wal_lsn_diff 
-----------------
               0

2. Полная ресинхронизация

Если расхождение слишком велико, выполните полное копирование:

Полная ресинхронизация
Команда
sudo systemctl stop postgresql && sudo -u postgres rm -rf /var/lib/postgresql/16/main/* && sudo -u postgres pg_basebackup -h new-master-ip -D /var/lib/postgresql/16/main -U replicator -Fp -Xs -P -R
Вывод:
24887/24887 kB (100%), 1/1 tablespace
Transaction log and system record written to disk.
Backup complete

Проверка

После ресинхронизации проверьте работу:

Проверка
Команда
sudo systemctl start postgresql && sudo -u postgres psql -c "SELECT pg_is_in_recovery();"
Вывод:
 pg_is_in_recovery 
--------------------
 t

Пройдите викторину

Для завершения урока необходимо пройти викторину