Не удается выполнить потоковую репликацию, так как «сегмент WAL уже перемещен» - PullRequest
0 голосов
/ 08 ноября 2019

Я пытаюсь реализовать потоковую репликацию Master / Slave на Postgres 11.5. Я выполнил следующие шаги -

На ведущем

select pg_start_backup('replication-setup',true);

На ведомом устройстве Остановил базу данных postgres 11 и запустил

rsync -aHAXxv --numeric-ids --progress -e "ssh -T -o Compression=no -x" --exclude pg_wal --exclude postgresql.pid --exclude pg_log MASTER:/var/lib/postgresql/11/main/* /var/lib/postgresql/11/main

На главном устройстве

select pg_stop_backup();

На подчиненном

rsync -aHAXxv --numeric-ids --progress -e "ssh -T -o Compression=no -x"  MASTER:/var/lib/postgresql/11/main/pg_wal/* /var/lib/postgresql/11/main/pg_wal

Я создал файл recovery.conf на подчиненном устройстве ~ / 11 / main folder

standby_mode = 'on'
primary_conninfo = 'user=postgres host=MASTER port=5432 sslmode=prefer sslcompression=1 krbsrvname=postgres'
primary_slot_name='my_repl_slot'

Когда я запускаю Postgres на подчиненном устройстве, я получаю сообщение об ошибке на обоихЖурналы MASTER и SLAVE -

019-11-08 09:03:51.205 CST [27633] LOG:  00000: database system was interrupted; last known up at 2019-11-08 02:53:04 CST
2019-11-08 09:03:51.205 CST [27633] LOCATION:  StartupXLOG, xlog.c:6388
2019-11-08 09:03:51.252 CST [27633] LOG:  00000: entering standby mode
2019-11-08 09:03:51.252 CST [27633] LOCATION:  StartupXLOG, xlog.c:6443
2019-11-08 09:03:51.384 CST [27634] LOG:  00000: started streaming WAL from primary at 12DB/C000000 on timeline 1
2019-11-08 09:03:51.384 CST [27634] LOCATION:  WalReceiverMain, walreceiver.c:383
2019-11-08 09:03:51.384 CST [27634] FATAL:  XX000: could not receive data from WAL stream: ERROR:  requested WAL segment 00000001000012DB0000000C has already been removed
2019-11-08 09:03:51.384 CST [27634] LOCATION:  libpqrcv_receive, libpqwalreceiver.c:772
2019-11-08 09:03:51.408 CST [27635] LOG:  00000: started streaming WAL from primary at 12DB/C000000 on timeline 1
2019-11-08 09:03:51.408 CST [27635] LOCATION:  WalReceiverMain, walreceiver.c:383

Проблема в том, что START WAL - 00000001000012DB0000000C доступен прямо до запуска pg_stop_backup(), архивируется и больше не доступен после выполнения pg_stop_backup(),Так что это не проблема архивации WAL из-за низкого WAL_KEEP_SEGMENTS.

postgres@SLAVE:~/11/main/pg_wal$ cat 00000001000012DB0000000C.00000718.backup
START WAL LOCATION: 12DB/C000718 (file 00000001000012DB0000000C)
STOP WAL LOCATION: 12DB/F4C30720 (file 00000001000012DB000000F4)
CHECKPOINT LOCATION: 12DB/C000750
BACKUP METHOD: pg_start_backup
BACKUP FROM: master
START TIME: 2019-11-07 15:47:26 CST
LABEL: replication-setup-mdurbha
START TIMELINE: 1
STOP TIME: 2019-11-08 08:48:35 CST
STOP TIMELINE: 1

У моего MASTER установлено archive_command, и у меня есть недостающие доступные WAL. Я скопировал их в каталог восстановления на SLAVE и попробовал recovery.conf ниже, но он все еще не работает, когда MASTER сообщает об ошибке WAL segment has already been moved.
Есть идеи, как мне решить эту проблему? Я использовал rsync для настройки репликации без каких-либо проблем в прошлом на Postgres 9.6, но у меня возникла эта проблема на Postgres 11.

standby_mode = 'on'
primary_conninfo = 'user=postgres host=MASTER port=5432 sslmode=prefer sslcompression=1 krbsrvname=postgres'
restore_command='cp /var/lib/postgresql/restore/%f %p'

1 Ответ

0 голосов
/ 09 ноября 2019

Поместите restore_command в recovery.conf, который может восстановить заархивированные файлы WAL, и все в порядке.

...