Как сделать переключение между master и slave в Postgres?
Есть задача сделать отказоустойчивый кластер, есть два сервера в двух разных ДЦ, полностью идентичные. Если падает один сервер, второй должен продолжать работать (для конечно юзера не должно быть заметно ничего).
Сначала хотели сделать, master - master (active - active), но нас отговорили. Сейчас стоит задача сделать так, чтобы один был мастер, второй слейв. Если падает слейв, ничего не меняем, работаем только с мастером. Если падает мастер, нужно быстро переключиться на слейв и сделать его мастером. Как это можно реализовать попроще?
Есть ли возможность сделать так, чтобы оба сервера были мастером, просто мы на уровне приложения будем выбирать, в какой писать (чтобы не было одновременной записи в оба сервера и не вылезли проблемы master - master репликации).
По поводу active-active - нужно понять, оправдано ли низкое RTO, проанализировать конкретную архитектуру приложения, определить, что важнее - консистентность БД или её доступность.
Посмотрите дерево отказов (особенно с кратковременными в сети) - сразу увидите, что определить на какую ноду записывать не так просто - много факторов нужно учитывать.
И если консистентность все еще важна - лучше использовать гарантированный фэиловер, чем полагаться на случай :)