Отказоустойчивость серверов БД
Есть два ЦОДа, в каждом из которых есть серверы приложений. В штатном режиме серверы приложений работает только в основном ЦОДе, и на резервный ЦОД их функционирование переходит в случае их отказа.
Серверы приложений взаимодействуют с БД, которая должна быть реализована в отказоустойчивом исполнении (балансировка нагрузки тут не нужна, запросов будет немного). Запланировано по два сервера БД в каждом ЦОДе. Между ЦОДами есть сетевая доступность. Требуется настроить так:
- Штатное функционирование - серверы приложений в основном ЦОДе взаимодействуют с первым сервером БД в основном ЦОДе. При этом производится репликация между всеми серверами БД во всех ЦОДах.
- Отказал первый сервер БД в основном ЦОДе. Автоматически производится перевод обращений серверов приложений на второй сервер БД в основном ЦОДе. Продолжает функционировать репликация между всеми живыми серверами БД.
- Отказали серверы приложений в основном ЦОДе. Автоматически запускаются серверы приложений в резервном ЦОДе, и осуществляют взаимодействие с первым сервером БД в резервном ЦОДе. Репликация продолжает функционировать между всеми оставшимися в живых серверах БД.
Для серверов приложения используются отдельные серверы балансировки (HAProxy+Keepalived, по два сервера в каждом ЦОДе), их можно использовать и для обеспечения отказоустойчивости серверов БД.
При изучении методов кластеризации БД столкнулся с тем, что у PostgreSQL их много, и у каждого есть свои особенности применения.
Прошу помочь выбрать метод кластеризации БД и инструменты, позволяющие реализовать описанную функциональность.