Назад | Перейти на главную страницу

Несколько экземпляров AWS и одна база данных

У меня есть веб-приложение, которое работает на двух экземплярах AWS - один экземпляр размещает сайт, а другой - фактическую базу данных (MySQL). Экземпляр, на котором размещен сайт, имеет эластичный IP-адрес, указывающий на него, который привязан к моему доменному имени.

Очевидно, что одним из основных преимуществ AWS является возможность запускать сразу несколько экземпляров, когда что-то загружено, и AWS даже предлагает автоматизированные решения для этого. Отлично. Но если мой домен указывает на один IP-адрес, и этот IP-адрес привязан к одному экземпляру, как мне распределить трафик между множеством экземпляров? Можно ли использовать основной компьютер в качестве балансировщика нагрузки? Если да, то существует ли обычно используемое решение для балансировки нагрузки для LAMP?

Amazon также предоставляет услуги эластичной балансировки нагрузки.

http://aws.amazon.com/documentation/elasticloadbalancing/

Вы можете использовать циклический DNS, как упоминалось ранее. И если вы ищете быстрое и простое решение, я бы порекомендовал именно его.

Однако экземпляры EC2 недолговечны, и вы не должны относиться к ним как к таковым. Это означает, что они могут подниматься и исчезать, как пердун на ветру, и ваше приложение должно терпимо относиться к этому. RR DNS может стать для вас источником боли, потому что он недостаточно умен, чтобы справиться с отказоустойчивостью / высокой доступностью. Если бы один из ваших веб-серверов умер, пользователь застрял бы, пытаясь подключиться к мертвой машине, пока TTL не истечет для записи. Упомянутый ранее трюк с установкой смехотворно низкого TTL не сработает. DNS-серверы нисходящего кэширования не соблюдают такой низкий TTL. Вам повезет с TTL в один час. Многие пользователи могут застрять, пытаясь подключиться к одному и тому же мертвому веб-серверу в течение 24 часов или дольше.

Я бы порекомендовал вам изучить HAProxy. Reddit.com использует HAproxy на EC2 для балансировки нагрузки около 200 миллионов просмотров страниц в месяц. через несколько десятков экземпляров веб-серверов. Я уверен, что он справится и с вашим приложением.

Вы можете использовать свой EIP с эластичной балансировкой нагрузки, как упоминал Эйприл; однако, когда я оценивал это, у него были некоторые недостатки, которые делали его менее чем идеальным для моего развертывания.

У меня есть 2 эластичных IP-адреса, которые назначены нескольким экземплярам EC2, которые служат моими интерфейсными веб-серверами. Это просто запущенные серверы Apache2 с потоком, которые обрабатывают балансировку нагрузки на мои серверы приложений за ними. Затем эти два EIP помещаются в стандартный циклический перебор DNS.

Конфигурация Apache2 использует mod_balancer для балансировки запросов между экземплярами внутреннего сервера, что не может быть меньше 3 экземпляров. База данных работает на собственном отдельном экземпляре EC2, к которому могут подключаться серверные системы.

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

В этой конфигурации я обрабатываю более полдюжины сильно посещаемых сайтов, количество посещений которых исчисляется десятками миллионов в месяц. Потоковые интерфейсные серверы Apache2 почти не загружают, поскольку они просто действуют как посредник, в то время как реальная работа выполняется на внутренних серверах. Я заметил значительное увеличение скорости работы, когда мы работали на традиционных выделенных серверах в совместных центрах обработки данных.

Супер базовое решение:

Вы можете настроить записи DNS для веб-сайта, используя Циклический перебор DNS чтобы указать на несколько IP-адресов хоста. Создайте отдельный эластичный IP-адрес для каждого экземпляра интерфейса. На стороне DNS это просто случай добавления второй записи для того же имени хоста с альтернативным IP. Установите TTL для каждой записи достаточно низким (5-60 секунд).

Больше информации здесь: http://en.wikipedia.org/wiki/Round_robin_DNS