2016-02-01 4 views
2

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

У меня есть два (число может увеличиваться с течением времени) аналогичные задние части делают тяжелый подъем. Я хочу добавить балансировку нагрузки (случайный - штраф) и проверки работоспособности.

Все эти программные балансировочные устройства, похоже, очень сложны и сложны в настройке. Есть ли простое решение?

Я думал об осуществлении этого себя. Должно быть прямолинейным, но, вероятно, не совсем доказательством битвы.

+2

если вы хотите реализовать автобалансировки непосредственно в вас приложения, попробуйте механизм. если вы хотите, чтобы баланс был прозрачным для вашего кода, использование обратного прокси-сервера было бы правильным путем, как ответил @skz. если вы хотите использовать балансировку полосы пропускания, вам нужно будет отредактировать свои записи DNS. но что бы вы ни делали, имейте в виду: одновременное выполнение одного приложения на нескольких машинах - это не самая простая задача. –

+0

@FranzGleichmann Спасибо за замечание.К счастью, мое приложение без гражданства, поэтому параллелизм не должен быть серьезной проблемой. Gearman выглядит интересно, но не совсем то, что мне нужно. – Robin

ответ

4

Возможно, вы должны попробовать NGINX - HTTP и обратный прокси-сервер. Должна быть проста в установке и настройке.

+0

Спасибо, я думал, что ght NGINX будет поддерживать балансировку нагрузки с помощью NGINX Plux, но, похоже, она доступна и для бесплатной версии. К сожалению, медицинские проверки NGINX довольно бедны. Он отключает один сервер в течение некоторого времени, если запрос терпит неудачу. Версия Plus имеет лучшие проверки работоспособности, но сейчас это не вариант. – Robin

+2

Возможно, вам следует реализовать очередь заданий с Gearman (поддерживает задания переднего плана) или RabbitMQ (насколько я пробовал - только фоновые задания, но может быть сделано) - оба они достаточно умны, чтобы обнаружить потерю потребителя/- если все сделано правильно для других потребителей/работников. – skz

+0

Спасибо, я на самом деле хочу держаться подальше от дополнительных накладных расходов, таких как Gearman или RabbitMQ, хотя я бы хотел использовать обмен сообщениями, я боюсь, что это заставит мой текущий стек действительно тяжело отлаживать и разрабатывать на моей локальной машине , – Robin

1

Простой внешний нагрузочный балансир должен быть достаточным.

Включить следующий APACHE модулей:

a2enmod proxy proxy_http proxy_balancer 

Затем откройте /etc/apache2/conf.d/proxy-balancerconfigure и настроить modproxybalancer, добавив следующие строки:

BalancerMember http://10.0.0.1 
BalancerMember http://10.0.0.4 

ProxyPass/balancer://mycluster 

Последних, настроить прокси-сервер, чтобы разрешить доступ со всех хостов ,
Откройте /etc/apache2/mods-enabled/proxy.conf и заменить следующее:

Deny from all 

Для

Allow from all 

Перезапустите Apache с помощью `/etc/init.d/apache2 restart``

Надеются, что это поможет вам.

Источник: How setup a front-end cloud load balancer in apache

EDIT

Для простой проверки здоровья, добавьте это в конце каждого члена:

BalancerMember http://10.0.0.4 connectiontimeout=10 retry=600 

EDIT2

Для продвинутого проверка здоровья См apache mod_proxy_hcheck (доступно только для апача 2.5, а не в официальном репозитории)

+0

Спасибо, но насколько я могу видеть, нет проверки здоровья, верно? Он просто деактивирует BalanceMember в течение заданного времени, если пользовательский запрос запускается в таймаут. Я не мог найти ничего в документах. – Robin

+0

Я отредактировал свой ответ, скажи мне, если этого недостаточно. – chalasr

+1

На самом деле это именно то, что я имел в виду с моим комментарием. Когда вы запускаете тайм-аут, вы просто отключите этот сервер в течение заданного времени. Это не проверка здоровья imho. Поскольку я сказал, что мой back-end делает тяжелую работу, и ответы могут занять до 30 секунд (в плохих, но достоверных случаях). Проверка работоспособности может проверять сервер как каждую минуту на URL-адресе/health и проверять, возвращается ли 200. Это может также привести к тайм-аутам, но не позволит повторно добавить сервер после определенного времени, не проверяя, доступно ли оно. Или я неправильно понял ваше решение? – Robin