Какое решение выбрать для HA cluster postgres?

Приветствую.

Дано:
Встала задача обеспечить отказоустойчивость БД postgres.
Сейчас БД крутится на 1 узле, нагрузка небольшая, но БД должна быть доступна всегда + нельзя терять старые данные.

Требуется:
1) Настроить потоковую репликацию на 2 узел
2) Настроить отказоустойчивость, т.е. при смерти одной из нод, чтобы клиенты подключались ко второй.

Хотел бы проверить, правильно ли я понимаю принцип работы различных решений для High Availibility кластера postgres. Несколько дней изучал тему, выделил для себя наиболее популярные и достойные решения, 2 шт:

Решения
а) примитивный вариант
pg_auto_failover + HAProxy + keepalived
- pg_auto_failover реплицирует, мониторит, назначает мастера в кластере;
- HAProxy + keepalived мониторит и перекидывает Virtual IP на IP текущего мастера

в) продвинутый вариант
Patroni + etcd + haproxy + keepalived
- patroni реплицирует, управляет кластером postgres;
- etcd в качестве кластера-арбитра для мониторинга и выбора мастера;
- HAProxy + keepalived мониторит и перекидывает Virtual IP на IP текущего мастера

Вопросы:
1) Есть ли ошибки в вышеописанном?
2) В первом варианте сохраняется единая точка отказа - узел с pg_auto_failover?
3) А в свою очередь HAProxy + keepalived могут работать в режиме кластера на нескольких машинах? Или они в первом варианте тоже запускаются в одном экземпляре и узел с ними является точкой отказа?
4) В обоих случаях можно настроить, чтобы клиенты подключались не только к мастеру, но и к реплике?
5) Для стабильно работающей базы без перегрузов хватит и примитивного варианта, в то время как второй вариант для более высокого уровня HA?
6) Какие фундаментальные и самые важные различия у первого и второго варианта?
  • Вопрос задан
  • 332 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы