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″]



