Восстановление после сбоя после сбоя
Мы используем потоковую репликацию в системе Postgres v10. Нам удалось правильно настроить аварийное переключение с основного на резервное, но мы не можем определить, как выполнить восстановление после сбоя к исходной настройке.
Наши настройки могут быть немного необычными, поскольку каждый сервер находится в отдельном дата-центре. Отработка отказа состоит не только в переносе первичной базы данных в другой дата-центр, но и в связанные клиентские приложения. Поэтому по причинам скорости / пропускной способности важно, чтобы после отработки отказа мы могли вернуться (восстановление после отказа) к нашей обычной конфигурации.
Наша установка выглядит следующим образом:
Primary1 ----replicate---> Standby1 ---replicate---> HotStandby2
Как уже говорилось, мы можем убить мастера и аварийное переключение на следующую ситуацию
Standby1 ---replicate---> HotStandby2
Теперь мы хотели бы выполнить возврат, поэтому мы создаем новую базу данных с именем Primary2 и устанавливаем ее как реплика Standby1.
Standby1 ---replicate---> HotStandby2
---replicate---> Primary2
Через некоторое время Primary2 синхронизируется с Standby1, поэтому мы хотим сделать Primary2 активным сервером, а затем перенастроить Standby2 на репликацию Primary2, чтобы вернуться в исходное состояние.
Primary2 ----replicate---> Standby1 ---replicate---> HotStandby2
Активизировать Primary2 легко, но мы не можем найти способ перевести Standby2 из активного состояния в режим ожидания.
Мы пробовали
- обеспечение синхронизации Primary2 с Standby1
- Изменение recovery.done для recovery.conf
- добавление recovery_target_timeline = 'latest' в recovery.conf
- Настройка новых слотов репликации
- Использование pg_rewind
- Использование pg_rewind вместе с архивными WAR-файлами
Большинство наших попыток приводят к тому, что Standby1 все еще работает как мастер, и в файлах журналов появляются странные сообщения о расходящихся временных шкалах....
У кого-нибудь есть какие-нибудь идеи или можете указать нам на некоторые статьи - учебные пособия и т. Д
Это возможно даже в Postgres? Или мы должны перестроить Standby1, и если да, то как насчет HotStandby2?