Балансировка средствами HAProxy

HAProxy(High Availability Proxy) представляет собой балансировщик нагрузки с открытым исходным кодом для распределения нагрузки в любой службе TCP. HAProxy является бесплатным, быстрым и надежным решением для распределения нагрузки, высокой доступности и проксирования для приложений TCP и HTTP. HAProxy особенно подходит для популярных сайтов с большой посещаемостью.

 

С момента появления, HAProxy стал распространённым балансировщиком нагрузки с открытым исходным кодом, несмотря на отсутствие рекламы.

Установка HAProxy

Установка производится следующим образом:

apt-get install haproxy

Также можно проверить версию:

haproxy -v

В скрипте init по адресу /etc/default/haproxy присвоим значению ENABLED 1:

ENABLED=1

Для проверки, выполним скрипт init без каких-либо параметров. Результат должен быть следующий:

$ service haproxy 
reload restart start status stop

Когда HAProxy установлен, создадим установку, в которой есть 3 образца веб-сервера: 2 Apache и 1 HAProxy. Информация об установке представлена ниже:

Будем использовать три системы, созданных через VirtualBox:

Образец 1 – Балансировщик нагрузки
Имя хоста: haproxy
OС: Ubuntu
IP: 192.168.205.15
Образец 2 – Веб-сервер 1
Имя хоста: webser01
OС: Ubuntu с LAMP
IP: 192.168.205.16
Образец 3 – Веб-сервер 2
имя хоста: webserver02
OС: Ubuntu с LAMP
IP: 192.168.205.17

Перейдём к настройке HAProxy.

Настройка HAProxy

Создадим резервную копию оригинального файла, для этого переименуем его:

mv /etc/haproxy/haproxy.cfg{,.оригинал}

Создадим файл haproxy.cfg. С помощью текстового редактора создадим файл в /etc/haproxy/haproxy.cfg file следующего содержания:

global
log /dev/log local0
log 127.0.0.1 local1 notice
maxconn 4096
user haproxy
group haproxy
daemon
defaults
log global
mode http
option httplog
option dontlognull
retries 3
option redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000
listen webfarm 0.0.0.0:80
mode http
stats enable
stats uri /haproxy?stats
balance roundrobin
option httpclose
option forwardfor
server webserver01 192.168.205.16:80 check
server webserver02 192.168.205.17:80 check

Пояснение:

global
log /dev/log local0
log 127.0.0.1 local1 notice
maxconn 4096
user haproxy
group haproxy
daemon

Директива файла регистрации событий (log) упоминает сервер системного журнала, на который будут отправляться сообщений журнала событий.

Директива maxconn определяет число одновременных подключений клиентской части системы. Значение по умолчанию установлено 2000 и должно быть настроено в соответствии с Вашей системой.

Директивы user и group изменяют процесс HAProxy для пользователя/группы. Эти значения изменять не следует.

defaults
log global
mode http
option httplog
option dontlognull
retries 3
option redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000

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

Директива попыток (retries) определяет количество попыток для выполнения на сервере после сбоя соединения.

Директивы тайм-аута должны быть изменены. Contimeout определяет максимальное время ожидания успешного соединения с веб-сервером.

Сlitimeout и srvtimeout применяются, когда ожидается, что клиент или сервер получают, или передают данные во время процесса TCP. HAProxy рекомендует устанавливать одно и тоже значение для тайм-аута клиента и сервера.

listen webfarm 0.0.0.0:80
mode http
stats enable
stats uri /haproxy?stats
balance roundrobin
option httpclose
option forwardfor
server webserver01 192.168.205.16:80 check
server webserver02 192.168.205.17:80 check

Верхний блок содержит настройки для клиентской и внутренней части системы. Настроим HAProxy на порт 80 для webfarm, который представляет собой имя для идентификации приложения.

Директивы статистики разрешают соединение со страницей статистики. Данная страница доступна в нашем случае доступна по адресу: http://192.168.205.15/haproxy?.

Директивы балансировки определяют алгоритм балансировки нагрузки, доступны следующие варианты алгоримта:

  • Round Robin (roundrobin)
  • Статический Round Robin (static-rr)
  • Наименее используемые соединения (leastconn)
  • Источник (source)
  • URI (uri)
  • Параметр URL (url_param).

Директива server объявляет внутренний сервер, синтаксис:

server  [:port] [param*]

Упомянутые названия появятся в журналах событий и предупреждениях. Существует ещё несколько параметров, поддерживаемых этой директивой и в дальнейшем будет использоваться параметр проверки (check), при котором происходит проверка сервера, иначе сервер будет всегда доступен.

После завершения настройки запустим службу HAProxy:

sudo service haproxy start

Тестирование балансировки нагрузки и преодоления отказа

Добавим имя сервера в стандартные index.html файлы, расположенные в /var/www/index.html

В образце 2 – Веб-сервер 1 (webserver01 с IP- 192.168.205.16), добавим следующее:

sudo sh -c "echo \<h1\>Hostname: webserver01 \(192.168.205.16\)\<\/h1\> >> /var/www/index.html"

В образце 3 – Веб-сервер 2 (webserver02 с IP- 192.168.205.17), добавим следующее:

sudo sh -c "echo \<h1\>Hostname: webserver02 \(192.168.205.17\)\<\/h1\> >>

/var/www/index.html"

Теперь откроем браузер и через haproxy перейдём по адресу. http://192.168.205.15

Каждый раз при обновлении вкладки нагрузка будет распределятся между веб-серверами.

Статистику haproxy можно посмотреть по адресу http://192.168.205.15/haproxy?stats

Также можно сделать следующее:

  • Запустить один или оба сервера в автономном режиме, чтобы проверить, что будет, когда Вы получаете доступ к HAProxy
  • Настроить HAProxy для использования в качестве пользовательской страницы поддержки
  • Настроить веб-интерфейс для визуального контроля статистики HAProxy
  • Изменить планировщик на что-то другое, нежели round-robin
  • Настроить приоритет/значимость для конкретных серверов

1 Комментарий

  • Реальный

    написал Реальный

    Суббота, 26 Ноябрь 2016 20:07

    Для запуска Docker-контейнеров у меня в данный момент выделено достаточно много серверов, причем аппаратная часть у некоторых из них отличается друг от друга. Соответственно, при настройке на чудесном балансировщике HAProxy такого параметра балансировки как...

    Пожаловаться
Авторизуйтесь, чтобы получить возможность оставлять комментарии
Go to top