Развертывание высокой доступности Postresql 9.0 на Amazon EC2 с помощью PGPool-ii

У нас есть существующее веб-приложение, использующее Postgresql 9.0 и PGPool-ii. Я думаю о переносе нашей инфраструктуры на Amazon EC2, и меня вдохновила следующая ссылка: http://aws.typepad.com/aws/2008/12/running-everything-on-aws-soocialcom.html, использующий аналогичную архитектуру.

Поскольку Amazon RDS не поддерживает PGSQL, мы будем использовать PGPool-ii для балансировки нагрузки запросов на разных серверах БД и обеспечения их синхронизации друг с другом.

Поэтому мы планируем развернуть 3 внешних веб-сервера, которые будут содержать следующее: - Веб-сервер + PHP-код - PGPool-ii

Тогда у нас будет 2 сервера баз данных на отдельных инстансах Amazon только с PGSQL. Эти 2 сервера PG будут использоваться пулами PG, расположенными на 3 внешних серверах.

Мой вопрос в том, что я не знаю, достаточно ли надежно это решение, поскольку несколько PGPool будут обращаться к нескольким серверам PGSQL. В большинстве примеров PGPool демонстрируется один PGPool, который использует N базовых серверов PGSQL. Является ли хорошей практикой развертывание экземпляра PGPool на каждом веб-сервере?

Если нет, есть ли другая/лучшая архитектура, позволяющая избежать использования SPOF с использованием Amazon?

Большое спасибо за ваши ответы.


person Mike    schedule 04.08.2011    source источник


Ответы (2)


Пара мыслей. Во-первых, мы избегаем SPOF для таких вещей, как PGPool, используя Heartbeat, Pacemaker и ElasticIP. Запустите два (или более) экземпляра, посвященных PGPool. Назначьте ElasticIP одному из них. Настройте Heartbeat и Pacemaker для мониторинга PGPool. При отработке отказа пусть Pacemaker запустит сценарий, который назначает ElasticIP новому мастеру (DC в терминах Pacemaker). Если вы используете только два узла, обязательно отключите функцию кворума в Pacemaker, потому что у вас не может быть кворума, если один узел выходит из строя из двух.

Чтобы воспользоваться преимуществами ElasticIP, выполните обратный поиск DNS на своем ElasticIP за пределами Amazon. Это даст вам DNS-имя, которое сопоставляется с ElasticIP, которое должно заканчиваться на amazonaws.com. DNS-запросы из экземпляра EC2 для доменного имени, оканчивающегося на amazonaws.com, фактически разрешатся в внутренний IP-адрес экземпляра, которому назначен ElasticIP. Вы можете указать свои серверы приложений непосредственно на DNS для ElasticIP или, предполагая, что вы используете свой собственный DNS, вы можете создать CNAME, который ссылается на DNS ElasticIP.

Тем не менее, есть одна большая проблема с использованием ElasticIP для аварийного переключения. Повторное назначение ElasticIP вступает в силу в течение 120 секунд. Большая часть времени уходит на ожидание распространения изменений через DNS-серверы Amazon.

Кроме того, хотя я не пробовал запускать PGPool-ii на каждом сервере приложений, я не уверен, что это сработает. Если основная база данных выйдет из строя, я думаю, что каждый из экземпляров PGPool будет конкурировать за обработку отказа. Может быть, я просто недостаточно знаком с PGPool-ii, чтобы понять, как с этим справиться.

Что касается человека, который упомянул plproxy, я думаю, что он перепутал его с PGBouncer, что рекомендуется для использования с plproxy. plproxy — это система разделения, а не балансировщик нагрузки. Тем не менее, PGBouncer также не является балансировщиком нагрузки — это система пула соединений. PGBouncer не обеспечивает балансировку нагрузки. Фактически, FAQ для PGBouncer явно рекомендует использовать балансировщик нагрузки TCP, такой как HAProxy.

Кроме того, утверждения о том, что у Amazon есть проблемы с вертикальной масштабируемостью, которые решает Rackspace, неверны. С инстансами Amazon EC2 вы всегда можете остановить инстанс и обновить его до более крупного типа. Ни Amazon, ни Rackspace не поддерживают изменение типов инстансов на лету.

person organicveggie    schedule 14.09.2011

Хотя у меня нет четкого представления о pgPool. Я провел много исследований в области масштабируемости и проигнорировал pgPool по какой-то причине, которую сейчас не помню.

Я бы посоветовал взглянуть на plproxy. Это предлагает подход с балансировкой нагрузки.

Кроме того, я бы не стал активным покупателем на Amazon из-за проблем с вертикальной масштабируемостью Amazon. Вы не получаете готовое обновление, если хотите увеличить конфигурацию сервера. Таким образом, вы в конечном итоге снова реализуете все настройки своего сервера, если перейдете на более высокий экземпляр.

Таким образом, Rackspace убедительно показал, что вы можете просто попросить их обновить оперативную память с 1 ГБ до 2 ГБ или более, и это будет сделано с помощью простого перезапуска вашего экземпляра.

И Amazon, и Rackspace предлагают (99%) надежное решение для хостинга, а оставшийся 1% мы должны принять к сведению с надлежащим резервным копированием и распространением в разных регионах и т. Д.,

person Muthu    schedule 04.08.2011
comment
Как я уже упоминал в своем ответе, вы делаете несколько неверных утверждений. Во-первых, plproxy — это не балансировщик нагрузки для Postgres, а система разделения. Во-вторых, Amazon позволяет остановить экземпляр и обновить его до большего размера. Rackspace не уникален в этом отношении. - person organicveggie; 14.09.2011
comment
Прошу Вас прочитать мой ответ еще раз. Я упомянул, что plproxy предлагает подход с балансировкой нагрузки, и я не упомянул, что это балансировщик нагрузки. Скайп применил такой подход, правда ссылку сразу не могу поставить. Также проблема, которую я упомянул об amazon, заключается в том, что вам придется выполнить всю настройку, если вы хотите увеличить свою емкость до более крупного экземпляра (например, от маленького экземпляра до большого экземпляра и т. д.). Если вы знаете лучший способ бесшовного вертикального обновления без копирования или восстановления моментальных снимков, сообщите мне об этом. - person Muthu; 26.09.2011
comment
Извините, я действительно неправильно прочитал ваше заявление. Хотя plproxy не подходит для моей организации в качестве альтернативы более традиционному подходу с балансировкой нагрузки, я вижу, что для некоторых это вариант. Что касается вертикального масштабирования экземпляра Amazon EC2, вы можете сделать это тривиально, не копируя и не используя моментальные снимки. На самом деле он встроен прямо в Консоль управления. Если вы остановите экземпляр EC2, вы сможете изменить тип экземпляра. Единственное предостережение, которое относится и к Rackspace, заключается в том, что вы не можете перейти от 32-битного экземпляра к 64-битному экземпляру или наоборот. - person organicveggie; 01.11.2011
comment
Ах, как же я был неосторожен. Пользуюсь амазонкой уже несколько месяцев и не заметил эту опцию только потому, что она была спрятана в контекстном меню! Спасибо за ответ! Немного обучения сегодня :) - person Muthu; 01.11.2011