haproxy: Принцип работы на примере

haproxy logo

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

Логотип haproxy является иллюстрацией его работы. Запросы приходят на одну машину, и распределяются на несколько. При этом вы можете просматривать статистику запросов и нагрузку.

Давайте посмотрим, как это работает.

Установим на одной машине haproxy на одном порту (80) и поднимем несколько экземпляров веб-сервера на разных портах (1080, 2080 и 3080). Для иллюстрации этого будет достаточно.

В первую очередь установим nginx, на котором сконфигурируем три сервера на разных портах.

Теперь сконфигурируем сервера на nginx.

Создадим в директории /etc/nginx/sites-available/ три файла следующего содержания:

www1:

www2:

www3:

Теперь создадим директорию /var/www

И разместим в этой директории файл index.html следующего содержания:

It works!

 

И теперь запустим nginx:

Для проверки можно проверить, работают ли эти сервера, при помощи команды

Если вы видите три раза выведенное содержимое файла index.html, значит всё в порядке, можно приступать к установке и настройке haproxy.

Установка haproxy

Перед установкой haproxy в debian’е необходимо добавить репозиторий wheezy-backports. Можно добавить строчку в файл /etc/apt/sources.list, либо создать отдельный файл в директории /etc/apt/sources.list.d с названием, например, wheezy-backports.list и записать туда строчку:

YOURMIRROR — это, например, «ftp.us» или «ftp.ru», в зависимости от того, из репозитория в каком регионе вы будете устанавливать пакеты.

После этого обновляем список пакетов:

И устанавливаем пакет haproxy:

После установки пакета можно сразу переходить к настройке

Настройка haproxy

Основной конфигурационный файл haproxy — /etc/haproxy/haproxy.conf

Немного изменим конфигурационный файл, чтобы он выглядел так:

После запуска haproxy с таким конфигурационным файлом вы можете в браузере открыть страничку http://<ваш-балансировщик>/stats, на которой вы можете увидеть примерно такую картинку (картинка открывается по клику):

Статистика haproxy

Это таблица, в которой собрана статистика по работе балансировщика.

Проведен небольшой эксперимент. При помощи программы wget запросим страничку тысячу раз такой командой:

После этого еще раз посмотрим на страничку со статистикой (картинка открывается по клику):

haproxy статистика

Как видите, сессии равномерно распределены между тремя бэкендами. Теперь давайте отключим один из бэкендов, закомментировав его в конфигурационном файле nginx’а. И после этого выполним еще тысячу запросов. Картинка изменится (картинка открывается по клику):

hap03

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

Именно это и есть функционал, реализуемый балансировщиком — равномерное распределение нагрузки между всеми бэкендами таким образом, чтобы клиенты получали ответ независимо от того, все ли бэкенды доступны. Именно это позволяет создать систему, которая будет равномерно распределять нагрузку между серверами, в том числе расположенными в разных географических регионах.

И, что еще интересно, haproxy умеет распределять не только http-запросы, но и трафик на уровне tcp, поэтому его можно использовать для широкого круга задач, а не только балансировки веб-сайтов.


Понравилась статья?

Подпишитесь на новости сайта и получайте новые статьи на свой почтовый ящик (один раз в неделю).


Добавить комментарий

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