haproxy — это балансировщик, распределяющий запросы, приходящие на фронтэнд, на несколько бэкендов. Haproxy обеспечивает очень высокую производительность и используется на высоконагруженных проектах. Его основные преимущества — скорость работы и простота настройки и интеграции в уже существующие системы.
Логотип haproxy является иллюстрацией его работы. Запросы приходят на одну машину, и распределяются на несколько. При этом вы можете просматривать статистику запросов и нагрузку.
Давайте посмотрим, как это работает.
Установим на одной машине haproxy на одном порту (80) и поднимем несколько экземпляров веб-сервера на разных портах (1080, 2080 и 3080). Для иллюстрации этого будет достаточно.
В первую очередь установим nginx, на котором сконфигурируем три сервера на разных портах.
# apt-get install nginx
Теперь сконфигурируем сервера на nginx.
Создадим в директории /etc/nginx/sites-available/ три файла следующего содержания:
www1:
server { listen *:1080; root /var/www; index index.html; }
www2:
server { listen *:2080; root /var/www; index index.html; }
www3:
server { listen *:3080; root /var/www; index index.html; }
Теперь создадим директорию /var/www
mkdir /var/www chmod 755 /var/www
И разместим в этой директории файл index.html следующего содержания:
index page
It works!
И теперь запустим nginx:
# service nginx start
Для проверки можно проверить, работают ли эти сервера, при помощи команды
# apt-get install curl # curl http://127.0.0.1:{1080,2080,3080}
Если вы видите три раза выведенное содержимое файла index.html, значит всё в порядке, можно приступать к установке и настройке haproxy.
Установка haproxy
Перед установкой haproxy в debian’е необходимо добавить репозиторий wheezy-backports. Можно добавить строчку в файл /etc/apt/sources.list, либо создать отдельный файл в директории /etc/apt/sources.list.d с названием, например, wheezy-backports.list и записать туда строчку:
deb http://YOURMIRROR.debian.org/debian wheezy-backports main
YOURMIRROR — это, например, «ftp.us» или «ftp.ru», в зависимости от того, из репозитория в каком регионе вы будете устанавливать пакеты.
После этого обновляем список пакетов:
# apt-get update
И устанавливаем пакет haproxy:
# apt-get install haproxy
После установки пакета можно сразу переходить к настройке
Настройка haproxy
Основной конфигурационный файл haproxy — /etc/haproxy/haproxy.conf
Немного изменим конфигурационный файл, чтобы он выглядел так:
global log /dev/log local0 log /dev/log local1 notice chroot /var/lib/haproxy user haproxy group haproxy daemon debug stats socket /var/run/haproxy.sock mode 600 defaults log global mode http option httplog option dontlognull contimeout 5000 clitimeout 50000 srvtimeout 50000 errorfile 400 /etc/haproxy/errors/400.http errorfile 403 /etc/haproxy/errors/403.http errorfile 408 /etc/haproxy/errors/408.http errorfile 500 /etc/haproxy/errors/500.http errorfile 502 /etc/haproxy/errors/502.http errorfile 503 /etc/haproxy/errors/503.http errorfile 504 /etc/haproxy/errors/504.http stats enable stats uri /stats stats realm Global\ statistics stats auth admin:password frontend http bind 192.168.0.14:80 default_backend my_cluster backend my_cluster balance roundrobin server www1 192.168.0.14:1080 check inter 3000 fall 3 minconn 50 server www2 192.168.0.14:2080 check inter 3000 fall 3 minconn 50 server www3 192.168.0.14:3080 check inter 3000 fall 3 minconn 50
После запуска haproxy с таким конфигурационным файлом вы можете в браузере открыть страничку http://<ваш-балансировщик>/stats, на которой вы можете увидеть примерно такую картинку (картинка открывается по клику):
Это таблица, в которой собрана статистика по работе балансировщика.
Проведен небольшой эксперимент. При помощи программы wget запросим страничку тысячу раз такой командой:
for i in `seq 1 1000`; do wget http://192.168.0.14 -O -; done
После этого еще раз посмотрим на страничку со статистикой (картинка открывается по клику):
Как видите, сессии равномерно распределены между тремя бэкендами. Теперь давайте отключим один из бэкендов, закомментировав его в конфигурационном файле nginx’а. И после этого выполним еще тысячу запросов. Картинка изменится (картинка открывается по клику):
Второй бэкенд обозначен красным, что означает его недоступность. Запросы же распределены равномерно между оставшимися бэкендами, и вся тысяча запросов выполнена успешно.
Именно это и есть функционал, реализуемый балансировщиком — равномерное распределение нагрузки между всеми бэкендами таким образом, чтобы клиенты получали ответ независимо от того, все ли бэкенды доступны. Именно это позволяет создать систему, которая будет равномерно распределять нагрузку между серверами, в том числе расположенными в разных географических регионах.
И, что еще интересно, haproxy умеет распределять не только http-запросы, но и трафик на уровне tcp, поэтому его можно использовать для широкого круга задач, а не только балансировки веб-сайтов.
[wysija_form id=»2″]