Балансировщик нагрузки HTTP с поддержкой динамического членства на бэкэнде?

Балансировщик нагрузки HTTP с поддержкой динамического членства на бэкэнде?

Я хотел бы развернуть обратный прокси/балансировщик нагрузки HTTP перед несколькими серверами приложений бэкенда. Проблема в том, что набор бэкендов может меняться со временем, а новые серверы приложений могут создаваться динамически (поэтому общий набор не может быть известен заранее). Это означает что-то вродеЛак, который может выполнять проверки работоспособностиизвестеннабор бэкэндов, не вариант.

Лучшее, что я смог придумать, это prg RewriteMapподдержка Apache в сочетании с RewriteRuleвыражениями proxy. Я хакнул простой механизм клиент/сервер для серверов приложений, чтобы они "регистрировались" на frontend, и программу RewriteMap, которая выбирает backend из этого списка. Работает, но пахнетДействительнохаки.

Похоже, это довольно распространенный сценарий (с таким количеством поставщиков облачных услуг, которые позволяют легко разворачивать новые серверы по требованию). Как другие решают эту проблему? Вы просто используете коммерческий балансировщик нагрузки? Все что-то собирают сами?

решение1

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

Также имеется приложение-менеджер балансировки для визуализации и управления этим поведением во время выполнения.

Подробности смотрите здесь:http://httpd.apache.org/docs/2.2/mod/mod_proxy_balancer.html

решение2

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

1) создать отдельный файл конфигурации только для upstreams (upstreams.conf) и включить их в основной nginx.conf 2) теперь вы можете редактировать этот файл вручную или с помощью отдельного скрипта, я написал простой скрипт Perl для управления этим файлом, добавления/удаления текстовых строк с описанием upstream. 3) отправить сигнал HUP основному процессу nginx для выполнения корректной перезагрузки 4) был реализован некоторый веб-интерфейс для управления этими операциями и обеспечения проверок работоспособности, но это не FOSS

Спорим, что есть пара 3-сторонних модулей, которые реализуют интерфейс проверки работоспособности и управления, пожалуйста, взгляните на

http://wiki.nginx.org/HttpHealthcheckModule https://bitbucket.org/benjaminws/nginxmgr/ https://github.com/FRiCKLE/ngx_supervisord

Я не уверен, но, возможно, haproxy также имеет такую ​​же функциональность.

решение3

Почти все коммерческие решения балансировки нагрузки (F5, Citrix, A10 и т. д.) имеют API управления конфигурацией (на основе REST или SOAP), которые можно легко использовать для этой цели — серверы могут добавлять себя в соответствующие пулы в рамках своей маршрутизации запуска и удалять себя при выключении. Если сервер выходит из строя, LB помечает его как неисправный из-за сбоев проверки работоспособности.

Связанный контент