Оглавление |
---|
Информация |
---|
Программное средство HAProxy используется для эффективного масштабирования TCP- и HTTP-приложений, обеспечивая высокую доступность, отказоустойчивость и распределение нагрузки посредством распределения входящих запросов на несколько обслуживающих серверов. |
Информация |
---|
Данная статья применима к:
|
Основные возможности HAProxy
- Несколько алгоритмов определения доступности серверов:
- tcp-check;
- http-check;
- mysql-check;
- Распределение HTTP-/HTTPS-/TCP-запросов между доступными серверами;
- Возможность закрепления определенных клиентов за конкретными обслуживающими серверам (stick-tables);
- Поддержка:
- IPv6 и UNIX sockets;
- Сжатия HTTP/1.1 (deflate, gzip, libslz);
- SSL;
- Полная поддержка постоянного HTTP-соединения;
- Поддержка переменных блоков и Lua-скриптов в конфигурации сервера;
- WEB-интерфейс с актуальным состоянием и статистикой работы программы.
Установка
На основном сервере, который будет принимать запросы и распределять их, необходимо установить пакет HAProxy. Это можно сделать с помощью графического менеджера пакетов или из командной строки командой:
Command |
---|
sudo apt install haproxy |
Настройка
Настройка выполняется в конфигурационном файле /etc/haproxy/haproxy.cfg, включающем следующие секции:
- global --- определяет общую конфигурацию для всего HAProxy;
- defaults --- является обязательным и определяет настройки по-умолчанию для остальных разделов;
- frontend --- используется для описания набора интерфейсов для принятия соединений от клиентов, а также правил распределения нагрузки;
- backend --- используется для описания набора серверов, к которым будет выполняться подключение переадресованных входящих соединений, а также определения алгоритма распределения нагрузки;
- listen --- объединенный раздел для описания frontend и backend. Используется для описания прокси-сервера в одном разделе, как правило, только для TCP-трафикa.
В таблице ниже представлены основные примеры значений параметров конфигурационного файла и их описание.
Раздел | Параметр | Описание |
---|---|---|
global | log <address> <facility> [max level [min level]] Пример: log 127.0.0.1 local0 notice | Добавляет сервер системного журнала. Параметр <facility> должен быть одним из 24 стандартных типов регистрации событий:
|
maxconn <number> Пример: maxconn 10000 | Устанавливает максимальное число одновременных подключений для каждого процесса haproxy. | |
nbproc <number> Пример: nbproc 2 | Задает количество процессов haproxy. По умолчанию создается только один процесс haproxy. | |
daemon | Устанавливает процессу haproxy режим работы <<daemon>>. | |
user | Пользователь, от имени которого работает процесс haproxy. | |
group | Группа, от имени которой работает процесс haproxy. | |
chroot /var/lib/haproxy | Устанавливает окружение процесса haproxy. | |
defaults | log global | Включает в регистрацию событий информацию о трафике. |
mode http | Режим работы HAProxy. Возможны два режима:
| |
option dontlognull | Отключает регистрацию пустых подключений. | |
retries 3 | Количество попыток определить состояние обслуживающего сервера после сбоя подключения. | |
option redispatch | Распределяет запросы после сбоя подключения к одному из обслуживающих серверов. | |
option httpclose | Закрывает пассивные соединения. | |
option forwardfor | Включает X-Forwarded-For для передачи IP-адреса клиента обслуживающему серверу. | |
frontend | frontend http | Задает имя frontend. |
bind *:80 | Задает IP-адрес и порт для прослушивания запросов. | |
backend | backend sitecluster | |
balance (roundrobin/leastconn/static-rr/uri/source) | Настройка алгоритма распределения. Поддерживаются следующие алгоритмы:
| |
server srv-1.3.my.com 21.86.21.20:80 cookie site113ha check inter 2000 fall 3 minconn 30 maxconn 70 weight 100 | Описание обслуживающего сервера, где:
| |
stats enable | Включает статистику. | |
fullconn 200 | Задает максимальное значение одновременных подключений. | |
listen listen stats-srv-3.my.com *:8180 | Описывает IP-адрес и порт доступа к статистике. | |
stats uri /stats | URL доступа к статистике. | |
stats realm Haproxy Statistics | Заголовок (title) страницы статистики. | |
stats show-legends | Отображает в статистике дополнительную информацию о параметрах. | |
stats refresh 5s | Указывает интервал автоматического обновления страницы статистики. | |
stats auth test:test | Устанавливает логин и пароль доступа к странице статистики. |
Пример конфигурационного файла для распределения нагрузки сервера Apache
Блок кода | ||
---|---|---|
| ||
global
log | ||
Раскрыть | ||
global log /dev/log local0log local0 log /dev/log local1notice maxconn 40000 chroot notice maxconn 40000 chroot /var/lib/haproxy stats socket stats socket /run/haproxy/admin.sock mode 660 leveladmin stats timeout 30s user haproxy group haproxy daemon # Размещение сертификатов SSL ca-base admin stats timeout 30s user haproxy group haproxy daemon # Размещение сертификатов SSL ca-base /etc/ssl/certs crt-base /etc/ssl/private# Алгоритмы защитного преобразования, применяемые для # Алгоритмы защитного преобразования, применяемые для SSL-подключений. # Подробнее # Подробнее см. по ссылке: # # https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/ ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS ssl-default-bind-options no-sslv3 defaults log global mode http option httplog option dontlognull retries 3 option redispatch maxconn 2000 timeout connect 5000 timeout client 50000 timeout server 50000 errorfile 400 defaults log global mode http option httplog option dontlognull retries 3 option redispatch maxconn 2000 timeout connect 5000 timeout client 50000 timeout server 50000 errorfile 400 /etc/haproxy/errors/400.http errorfile 403 errorfile 403 /etc/haproxy/errors/403.http errorfile 408 errorfile 408 /etc/haproxy/errors/408.http errorfile 500 errorfile 500 /etc/haproxy/errors/500.http errorfile 502 errorfile 502 /etc/haproxy/errors/502.http errorfile 503 errorfile 503 /etc/haproxy/errors/503.http errorfile 504 errorfile 504 /etc/haproxy/errors/504.http
server webserver1 192.168.25.11:80 cookie serv1 check server webserver2 192.168.25.12:80 cookie serv2 frontend localnodes bind *:80 mode http default_backend nodes backend nodes mode http balance roundrobin server webserver1 192.168.13.150:80 cookie serv1 check server webserver2 192.168.13.151:80 cookie serv2 check |