OpenSource (Layer 4) Load Balancer, который может проходить через оригинальный клиентский IP?
Я настраиваю веб-приложение, которое использует SSL для всех запросов. Он должен иметь пространство для масштабирования, а также быть высокодоступным. Похоже, что "рекомендуемый" способ справиться с этим - настроить пару балансировщиков нагрузки уровня 4 для HA, которые передаются на ферму серверов для расшифровки SSL, которые затем переходят в ферму балансировщиков нагрузки уровня 7, а затем наконец, веб-серверы. (См.: http://1wt.eu/articles/2006_lb/index_09.html)
Я использовал HAProxy в прошлом, поэтому я попробовал с такой настройкой. В основном я имел HAProxy in TCP mode => STunnel => HAProxy in HTTP mode => Apache
, Когда я сделал это, IP-адрес клиента, который был доступен для apache, был 2-м сервером HAProxy. Я мог бы немного улучшить это, добавив STunnel заголовок X-Forwarded-For, но это дало мне только IP-адрес 1-го сервера HAProxy. Я не смог найти способ сообщить Apache оригинальный IP-адрес клиента.
Исходя из прочитанной документации, я не думаю, что HAProxy способен проходить через IP-адрес исходного клиента в режиме tcp. Это верно? Если да, есть ли какие-нибудь программные балансировщики нагрузки с открытым исходным кодом, которые могут это сделать? Если нет, есть ли какие-либо коммерческие / аппаратные балансировщики нагрузки, которые могут?
Думаю, я также должен отметить, что этот балансировщик нагрузки не обязательно должен быть балансировщиком нагрузки 4-го уровня. Мне просто нужно иметь возможность проходить через SSL-трафик в STunnel (или что бы я в итоге не использовал для расшифровки SSL).
Как примечание, я попытался настроить его без балансировщика нагрузки 4 уровня (т.е. STunnel - первая часть цепочки). Это решило проблему с IP-адресом клиента. Однако, как и предсказывалось в вышеприведенной статье, STunnel был узким местом. Он начал терять запросы где-то между 500 и 600 запросами в секунду. И, конечно, это не может масштабироваться (при сохранении HA), просто добавляя больше блоков. Исходя из требований, которые мне были даны, это приложение должно обрабатывать пиковый трафик в 1000-5000 запросов в секунду.
3 ответа
Я настоятельно рекомендую изучить LVS. http://www.linuxvirtualserver.org/
Он может выполнять обычную NAT-маршрутизацию, а также IP-туннелирование и прямую маршрутизацию, которые отправляются непосредственно клиенту.
Вы смотрели по адресу: http://httpd.apache.org/docs/2.3/mod/mod_remoteip.html, который переписывает IP на основе заголовка X-Forwarded-for.
BigIP от F5 - коммерческое решение, которое работает очень хорошо. X-Forwarded-For реализован как опция профиля http. Это не дешево, хотя.
Apache TrafficServer можно настроить для вставки заголовка X-Forwarded-For, и это ничего не стоит. Хотя я никогда не использовал его, но у него есть переменная конфигурации: proxy.config.http.append_xforwards_header