Если репликация не работает

 

Ищем и решаем причины сбоя в репликации, если репликация отсутствовала недолго, то просто перезапускаем postgresql на slave и репликация возобновится.

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

MSK FATAL:  could not receive data from WAL stream: ERROR:  requested WAL segment 00000001000025270000009F has already been removed

В таком случае выполняем следующие действия:

root@slave: service postgresql stop
postgres@dbmaster: psql -c "SELECT pg_start_backup('sync', true)"
root@master: rsync -C -a --delete -e ssh --exclude postgresql.conf --exclude postmaster.pid --exclude postmaster.opts --exclude pg_log --exclude pg_xlog --exclude recovery.conf main/ postgres@slave_IP:/var/lib/postgresql/9.3
postgres@master: psql -c "SELECT pg_stop_backup()"
root@slave: mv /var/lib/postgresql/9.3/main/pg_xlog/* /home/pg_xlog/
root@slave: service postgresql start

После чего репликация возобновится, в логах будут записи:

MSK LOG:  incomplete startup packet

 

Основная статья PostgreSQL: https://cp38.ru/index.php/po/51-postgresql-all

 

Links:

https://habr.com/post/222311/

https://postgrespro.ru/docs/postgresql/10/app-pgbasebackup

https://prudnitskiy.pro/2018/01/05/pgsql-replica/