vesper-bot
@vesper-bot
Любитель файрволлов

Как лучше организовать отказоустойчивый кластер PostgreSQL?

Потребовалось развернуть постгрес 9.6 под 1С. Взял их дистрибутив, развернул на ВМ под centos7, настроил репликацию на вторую такую же, теперь думаю о том, как из этого правильно сделать кластер. Хостов в системе (гипервизоров) всего два, stonith недоступен (или я его не умею готовить, но в двуххостовом кластере при разрыве сети происходит либо stonith deathmatch либо split brain, так что он мало что решает), так что пока мысли только о какой-нибудь конфигурации с удаленной третьей нодой в другой сети. В то же время из хостов собран кластер Microsoft, на котором можно поднимать ВМки, то есть можно формально сделать ВМ с постгресом кластерной и решать вопросы падения ресурсов через кластерную службу (в предположении, что падать будет не постгрес, а аппаратная часть). Третий хост в кластер не поставить - не хватает FC-подключений к хранилищу, поставить отдельно можно, но дорого (с) начальник. Стоит ли в таком раскладе вообще маяться с отказоустойчивостью, а если её делать, то как именно? Желательно, чтобы потеря одной ВМ или одного гипервизора не отключала постгрес целиком и не приводила к потере данных.
  • Вопрос задан
  • 8351 просмотр
Решения вопроса 1
vesper-bot
@vesper-bot Автор вопроса
Любитель файрволлов
В итоге сделал так:
Три ВМ, одна кластерная на хранилище с ролью master, две на локальных дисках гипервизоров с ролями hot standby, настроил потоковую репликацию через wal sender в режиме "записать одну копию, потом завершать транзакцию" (параметр synchronous_standby_names = '1 (*)' ), и получил примерно искомое - в случае падения одного из гипервизоров ложится одна реплика и возможно мастер, но мастер поднимается на второй ноде и с оставшейся репликой вполне успешно сохраняет данные. Узким местом остается сам мастер, если в нем какое-либо повреждение, постгрес ляжет как целое, но по крайней мере можно будет вытащить данные с реплики и поднять мастер ещё раз.
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
albedo2
@albedo2
programmer/dba/sysadmin/engineer/mechanic
Существует спектр решений. Проблема в том, что надо выбрать наиболее подходящую для вас. Тут кратко расписаны варианты postgresql.leopard.in.ua/html
У заказчика были специфические требования. Ему нужно было, чтобы решение работало в docker swarm.
Рассматривались RepMgr, Patroni, Stolon. Больше всего понравился https://github.com/sorintlab/stolon.
Пол года полёта, база 30 гиг. около 50 пользователей. Полёт нормальный.
Ответ написан
Комментировать
@artemdehnych
Я данный вопрос решаю с помощью pgpool на третьей виртуалке. Все подключение через него.
Ответ написан
Комментировать
theemfs
@theemfs
Кратко о себе
СтОит или нет зависит от требований.
Не зная этих требований нельзя ответить, что правильнее.
У кластера есть вполне определённые цели и, вполне возможно, что вы занимаетесь оверинжинирингом и вам достаточно будет просто бекапы снимать с правильной частотой без всяких кластеров.
Ответ написан
Комментировать
Nigatiff
@Nigatiff
Вот тут отличная статья на Хабре под решение вашей проблемы.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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