Настройка Haproxy loadbalancer и балансировка нагрузки на веб-сервер


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

front-end сервер Haproxy может быть один или несколько — функция программного обеспечения заключается в переадресации запросов пользователя на один из back-end серверов согласно определенному алгоритму.



Используемые back-end сервера перечисляются в конфигурационном файле Haproxy, также задается стратегия согласно которой будут распределяться запросы. Основная функция системы — снижение нагрузки на веб-серверы, непосредственно обрабатывающие скрипты, также подобная реализация обеспечивает избыточность.



При выходе из строя одного из back-end серверов Haproxy автоматически определит, что он недоступен и не будет направлять на него запросы. Это означает возрастание нагрузки на доступные back-end сервера (часть пользователей на короткое время увидят ошибку на сайте), однако система останется работоспособна.



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



Настройка Haproxy


Настройку веб-сервера за Haproxy в рамках статьи разбирать не будем. Условно примем, что используем Nginx.

В примере Nginx используется исключительно для обработки пользовательских запросов.

настройка Haproxy

Будем использовать три виртуальных машины, объединенных в локальную сеть. Модно использовать публичные IP адреса.



Настраиваем два сервера (их может быть любое количество) таким образом, чтобы они начали отдавать содержимое файла index.html.



На первой машине — Server 1:

mcedit /var/www/example.com/index.html

<html>

<p>Server 1</p>

</html>


На втором сервере аналогичным образом добавляем строку Server 2


Цель настройки — дать указание системе отдавать содержимое index.html на случайно выбранном сервере при обращении к IP адресу front-end сервера.


На третьем сервере устанавливаем программный пакет Haproxy.


apt-get update


apt-get install haproxy -y


Проверяем статус службы

service haproxy status


Вывод пуст — причина в том, что данное ПО предполагает его непосредственное включение в конфигурационном файле


mcedit /etc/default/haproxy

ENABLE=1


Службу запустим после внесения необходимых коррективов.


Переходим в главный конфигурационный файл

mcedit /etc/haproxy/haproxy.cfg

frontend haproxy_in    bind *:80
default_backend haproxy_http



После указания функции сервера — frontend задаем произвольное имя — например, haproxy_in, затем задаем дополнительные опции


backend haproxy_http
balance roundrobin
mode http
server be1 172.16.11.48:80 check
server be2 172.16.11.49:80 check



Перечисляем сервера с Nginx, которые будут обрабатывать контент — имена задаются произвольно, после локальных IP адресов указываем check — благодаря этой опции haproxy будет каждый раз проверять доступность сервера прежде чем направлять на него запросы пользователя.



Здесь используется принцип распределения запросов roundrobin, который является стандартным и часто применяется. Но используются и другие.



Даем команду на перечитывание конфигурационных файлов и запуск службы

service haproxy reload



В браузере проверяем результат — при обращении по IP каждый раз будет отдаваться строка Server 1 или Server 2.

Настройка Haproxy выполнена.



Фронтэнд сервера тоже могут оказываться недоступны и их нужно дублировать и объединять в кластеры избегая образования единой точки отказа.

Сказать спасибо