В Apache, mod_proxy_balancer
поддерживает балансировку нагрузки самым простым способом.
Пожалуйста, обратитесь к Простая балансировка нагрузки HTTP с помощью Apache. Когда запрос обрабатывается рабочими (узлами балансировки нагрузки), он поступает на сервер балансировки нагрузки, а затем переходит к клиенту, или он идет напрямую от рабочих?
Пример:
Способ 1: Веб-клиент -> Балансировщик нагрузки -> Рабочий -> Балансировщик нагрузки -> Веб-клиент
ИЛИ
Способ 2: Веб-клиент -> Балансировщик нагрузки -> Рабочий -> Веб-клиент
Что происходит в балансировщике нагрузки Apache?
Даже при возврате данные должны проходить через прокси-сервер, поскольку именно сервер поддерживает TCP-соединение клиента и должен отправлять через него ответ.
Решение без прокси-сервера, работающего на обратном пути, действительно существует, но его намного сложнее правильно реализовать (обычно используются грязные трюки TCPIP / iptables).
РЕДАКТИРОВАТЬ: хорошее решение без прокси-сервера:
«Чистое решение», которое волшебным образом пересылало бы TCP SYN и выгружало бы все остальное из балансировщика нагрузки, вероятно, мечта, и я не знаю ни одной такой вещи.
Вместо этого обычно используются два подхода:
- Балансировка нагрузки DNS: иметь больше серверов на нескольких общедоступных IP-адресах, указать больше записей A для вашего веб-сайта, возможно, заставить ваш DNS-сервер перетасовать ответ для добавления случайности. Прекрасно работает на многих коммерческих установках. Плюсы: простой, Минусы: "ломкий", и вам нужно публичное IP-пространство.
- Балансировка нагрузки только с брандмауэром: Скорее всего, есть один маршрутизатор, который в любом случае обрабатывает весь ваш трафик, поэтому добавление к нему нескольких правил брандмауэра обычно не вредит реальной производительности. То, что вы ищете (в Linux), - это использование цели DNAT iptables и какое-то «случайное» или «хеширующее» совпадение. Я лично использую что-то подобное на нескольких установках:
iptables -t nat -A PREROUTING -d 11.22.33.44 -p tcp --dport 80 -m random --average 50 -j DNAT --to 192.168.0.2
iptables -t nat -A PREROUTING -d 11.22.33.44 -p tcp --dport 80 -j DNAT --to 192.168.0.3
Замените 11.22.33.44 своим общедоступным IP-адресом и 192.168.x.x своими серверами. Не забудьте изменить значения --average.
Плюсы: снаружи все решение выглядит как один сервер, балансировка нагрузки не может быть нарушена путем DoSing-атаки на один сервер и т. Д. Минусы: вы хотите, чтобы маршрутизатор и все серверы находились в одном месте.