Репликация не удалась; как начать снова?


10

Я использую Postgres 9.1.6 в Ubuntu, и у меня есть настройка потоковой репликации между ведущим и ведомым. Все работало гладко, пока база данных не рухнула, и нам пришлось перезапустить оба блока.

Теперь репликация остановлена, и при проверке журналов в обоих полях я вижу это сообщение:

CDT FATAL: запрошенный сегмент WAL 0000000100000224000000FA уже удален

Это один и тот же сегмент снова и снова. Из моего поиска в Google кажется, что сервер репликации пытается получить этот сегмент от мастера, но его больше нет. Хорошо, но как обойти это? Нужно ли мне сделать новую резервную копию и выполнить rsync для ведомого? Есть ли простой способ вернуть раба в синхронизацию?

Ответы:


7

Да, вам нужно будет дать ведомому новую базовую резервную копию (для потоковой репликации только шаги с 1 по 4) мастера.

Ваша проблема, вероятно, произошла, потому что значение wal_keep_segments слишком мало. Значение должно быть достаточно высоким, чтобы, когда ведомое устройство в течение некоторого времени не работало, мастер не начал перерабатывать сегменты, которые ведомое устройство еще не обработало.


1

Убедитесь, что требуемые WAL находятся в том месте, из которого вы восстанавливаете данные для первоначального восстановления, прежде чем подключать подчиненное устройство к основному хосту в потоковом режиме.

Ваша проблема может возникнуть, если в том месте, из которого вы восстанавливаете данные для первоначального восстановления, нет сегмента WAL.

Если в этом случае все в порядке, вы должны проверить команду restore_command recovery.conf.


0

другой обходной путь - сделать wal backup_push из основного и немедленно сделать backip_fetch из резервного ведомого и запустить резервный.


2
Пожалуйста, объясните, почему этот процесс работает
RolandoMySQLDBA,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.