Как лучше организовать отказоустойчивый кластер PostgreSQL?
Существует спектр решений. Проблема в том, что надо выбрать наиболее подходящую для вас. Тут кратко расписаны варианты postgresql.leopard.in.ua/html
У заказчика были специфические требования. Ему нужно было, чтобы решение работало в docker swarm.
Рассматривались RepMgr, Patroni, Stolon. Больше всего понравился https://github.com/sorintlab/stolon.
Пол года полёта, база 30 гиг. около 50 пользователей. Полёт нормальный.
В итоге сделал так:
Три ВМ, одна кластерная на хранилище с ролью master, две на локальных дисках гипервизоров с ролями hot standby, настроил потоковую репликацию через wal sender в режиме "записать одну копию, потом завершать транзакцию" (параметр synchronous_standby_names = '1 (*)' ), и получил примерно искомое - в случае падения одного из гипервизоров ложится одна реплика и возможно мастер, но мастер поднимается на второй ноде и с оставшейся репликой вполне успешно сохраняет данные. Узким местом остается сам мастер, если в нем какое-либо повреждение, постгрес ляжет как целое, но по крайней мере можно будет вытащить данные с реплики и поднять мастер ещё раз.