Назад |
Перейти на главную страницу
Отказоустойчивый кластер PostgreSQL на Windows Server
Нам нужен совет, как настроить базовый отказоустойчивый кластер для нашего приложения:
- Мы будем использовать 4 станки под управлением Microsoft Windows Server (скорее всего, 2003).
- Все четыре всегда будет запускать наше приложение, которое по сути является веб-службой.
- Балансировка нагрузки «передана на аутсорсинг» - кто-то другой обрабатывает распределение веб-запросов между серверами.
- Только один серверов будут активно запускать сервер PostgreSQL в любой момент времени. На другом сервере (из четырех) также установлена БД, но он находится в режиме ожидания / пассивном.
- Данные БД хранятся на общее хранилище. Никакого копирования данных между серверами.
- Чтение выполняется очень часто многими конечными пользователями и представляет собой довольно небольшие фрагменты данных.
- Запись выполняется гораздо реже, меньшим количеством пользователей и в очень больших объемах данных.
Теперь, как можно настроить службу кластеров Microsoft на постоянное хранение только одного экземпляра сервера БД и 4 экземпляров (по одному на сервер) нашего приложения? И PostgreSQL вообще аккуратно интегрируется с MSCS?
Обновить: Вместо того, чтобы хранить данные в общем хранилище, я также рассматриваю возможность использования доставки журналов для репликации данных на пару серверов БД. У этого варианта есть две проблемы:
- Доставка журналов только гарантирует, что у меня есть второй сервер, который получает все данные и готов к работе. Как мне реализовать фактическое обнаружение сбоев и переключение при отказе?
- Обратное переключение: предположим, что ведущий сервер выходит из строя, и система автоматически переключается на ведомое устройство, а позже ведущее устройство возвращается в сеть. Я понимаю, что с доставкой WAL потребуется еще раз перенастроить доставку журналов, и что обратное переключение далеко не безупречно. Это так?
PostgreSQL отлично работает с MSCS, используя общий сервисный режим. Рекомендуется также установить двоичные файлы PostgreSQL на общий диск и указать службу туда - так вы уверены, что не получите несоответствие версий.
У Ларса есть хороший аргумент в том, что не рекомендуется запускать базу данных и сервер приложений на одних и тех же машинах. Возможно, вы захотите вместо этого рассмотреть возможность использования 2 машин для db и 2 для сервера приложений - или, по крайней мере, заставить MSCS отключить сервер приложений на узле, на котором работает PostgreSQL (я не уверен, может ли он это сделать, но я бы мог представить должно)