Apache: Балансировка нагрузки/Apache Load Balancing

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

Например, у нас есть два сервера, на которых работает одинаковое приложение:

  • http://192.168.1.101:8081/application-url
  • http://192.168.1.102:8082/application-url

И один сервер, на котором поднят веб-сервер Apache:

  • http://192.168.1.100:8080

Мы хотим, чтобы http запросы к приложению /application-url шли через веб-сервер Apache, который будет выступать в качестве прокси и балансировщика, т.е. будет распределять нагрузку между серверами 192.168.1.101:8081 и 192.168.1.102:8082.

Для этого необходимо:

1. В конфигурационном файле http-сервера httpd.conf активировать/добавить следующие три директивы:

2. В этом же файле httpd.conf добавить конфигурацию прокси. В элементе Proxy следует прописать сервера, между которыми будет осуществляться распределение запросов и указать метод балансировки. Например:

Где:

  • balancer – параметр, определяющий уникальный идентификатор (имя) конфигурации балансировщика;
  • BalancerMember – параметр, определяющий инстанс сервера, участвующего в балансировке. Необходимо указывать IP адрес или DNS-имя сервера и порт;
  • loadfactor – параметр, определяющий распределение нагрузки между BalancerMember. Если необходимо равное распределение нагрузки (50/50%), то необходимо установить одинаковые значения loadfactor для каждого участника;
  • lbmethod – параметр, определяющий алгоритм распределения нагрузки. Возможные варианты:
    • byrequests – по количеству запросов. Используется по умолчанию;
    • bytraffic – по количеству трафика;
    • bybusyness – по занятости.

3. Далее в файле httpd.conf необходимо добавить директивы ProxyPass  и ProxyPassReverse для определения URL приложения, доступ к которому будет осуществляться через прокси (как для запросов, так и для ответов) и для которого будет работать балансировка нагрузки.

ProxyPass используется для того, что бы веб-сервер получил запрос от клиента и передал его балансировщику, который в свою очередь перенаправит его серверам, на которых работает приложение, согласно выбранному алгоритму распределения нагрузки. ProxyPassReverse делает обратное – когда сервер, где работает приложение, отдает ответ клиенту, ответ направляется через веб-сервер, а не напрямую от сервера с приложением. Таким образом, сервера, на которых находятся приложения будут скрыты от пользователя.

4. Для управления балансировщиком через браузер и просмотра его активности, можно подключить модуль управления – Load Balancer Manager. Для этого в httpd.conf нужно добавить:

В Allow from следует добавить IP адреса, которым разрешено управлять балансировщиком. Для нашего примера, веб-интерфейс управления будет доступен c IP 192.168.1.200 по ссылке:

http://192.168.1.100:8080/balancer-manager

5. После редактирования httpd.conf, необходимо сохранить изменения и перезапустить веб-сервер.

Дополнительно:

1. Существует возможность определить сервер в качестве горячего резерва (hot stand-by), т.е. запросы на этот сервер пойдут только тогда, когда другие участники будут недоступны. Для этого необходимо в Proxy добавить BalancerMember с параметром “status=+H“, например:

BalancerMember http://192.168.1.103:8083 status=+H

2. Для активации “sticky sessions” или “session affinity” на основе куки (cookie), когда все запросы в рамках сессии выполняются на одном сервере, необходимо:

  • В директиве ProxySet, элемента Proxy, добавить строку stickysession=JSESSIONID|jsessionid.
  • Для каждого BalancerMember добавить параметр route.

Вот как будет выглядеть описание для нашего примера:

Подробнее о модуле mod_proxy_balancer, в том числе о настройке “sticky sessions”, можно узнать на сайте Apache:

http://httpd.apache.org/docs/2.2/mod/mod_proxy_balancer.html

VN:F [1.9.22_1171]
Rating: 5.0/5 (6 votes cast)
Метки: , , , ,
Опубликовано в IBM HTTP Server & Plug-in, WebSphere Application Server
2 комментария на “Apache: Балансировка нагрузки/Apache Load Balancing
  1. Мекан:

    Добрый день, Sergey Kirsanov
    А подскажите пожалуйста для серверов на которых есть одинаковое приложение обязательно ли подключение по разным портам?
    http://192.168.1.101:8081 – ?
    http://192.168.1.102:8082 – ?

    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
    • Sergey Kirsanov Sergey Kirsanov:

      Нет, порты могут быть любые – как одинаковые, так и разные.

      VN:F [1.9.22_1171]
      Rating: +1 (from 1 vote)

Добавить комментарий для Sergey Kirsanov Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

Выбор языка: