Реплікація не вдалася; як знову тривати?


10

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

Тепер реплікація зупинилася, і при перевірці журналів в обох полях я бачу це повідомлення:

CDT FATAL: запитуваний WAL-сегмент 0000000100000224000000FA вже видалений

Це той самий сегмент знову і знову. З мого Googling, здавалося б, сервер реплікації намагається отримати цей сегмент у головного, але його вже немає. Гаразд, але як це обійти? Чи потрібно робити свіжу резервну копію та rsync, що переходить до раба? Чи є простий спосіб синхронізувати раба?

Відповіді:


7

Так, вам доведеться надати підлеглому нову базу резервного копіювання (для потокової реплікації лише кроки 1 - 4) ведучого.

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


1

Перевірте, чи потрібні WAL-адреси знаходяться в тому місці, з якого ви відновлюєтесь для початкового відновлення, перед тим як підключити підлеглий до основного хоста в потоковому режимі

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

Якщо в цьому випадку все добре, то слід перевірити файл Resto_command recovery.conf.


0

інша робота навколо - зробити Wal backup_push від основного і негайно зробити backip_fetch з режиму очікування і запустити режим очікування.


2
Будь ласка, розкрийте, чому цей процес працює
RolandoMySQLDBA
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.