Содержание

Skip to end of metadata
Go to start of metadata

Программное средство HAProxy используется для эффективного масштабирования TCP- и HTTP-приложений, обеспечивая высокую доступность, отказоустойчивость и распределение нагрузки посредством распределения входящих запросов на несколько обслуживающих серверов.

Данная статья применима к:

  • ОС СН Смоленск 1.6
  • ОС СН Ленинград 8.1
  • ОС ОН Орёл 2.12

Основные возможности 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. Это можно сделать с помощью графического менеджера пакетов или из командной строки командой:

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 стандартных типов регистрации событий:

  • kern
  • user
  • mail
  • daemon
  • auth
  • syslog
  • lpr
  • news
  • uucp
  • cron
  • auth2
  • ftp
  • ntp
  • audit
  • alert
  • cron2
  • local0 local1 local2 local3 local4 local5 local6 local7

maxconn <number>

Пример: maxconn 10000

Устанавливает максимальное число одновременных подключений для каждого процесса haproxy.

nbproc <number>

Пример: nbproc 2

Задает количество процессов haproxy. По умолчанию создается только один процесс haproxy.

daemonУстанавливает процессу haproxy режим работы <<daemon>>.
userПользователь, от имени которого работает процесс haproxy.
groupГруппа, от имени которой работает процесс haproxy.
chroot /var/lib/haproxyУстанавливает окружение процесса haproxy.
defaultslog globalВключает в регистрацию событий информацию о трафике.

mode http

Режим работы HAProxy. Возможны два режима:

  • http --- выполняется анализ на сетевом уровне Layer7, подходит для распределения http-трафика;
  • tcp --- распределение любого трафика

option dontlognullОтключает регистрацию пустых подключений.

retries 3Количество попыток определить состояние обслуживающего сервера после сбоя подключения.

option redispatchРаспределяет запросы после сбоя подключения к одному из обслуживающих серверов.

option httpcloseЗакрывает пассивные соединения.

option forwardforВключает X-Forwarded-For для передачи IP-адреса клиента обслуживающему серверу.
frontendfrontend httpЗадает имя frontend.

bind *:80Задает IP-адрес и порт для прослушивания запросов.
backendbackend sitecluster

balance (roundrobin/leastconn/static-rr/uri/source)


Настройка алгоритма распределения. Поддерживаются следующие алгоритмы:

  • Round Robin --- направляет новые подключения к следующему серверу в циклическом списке, который видоизменяется при помощи веса сервера, на основании которого идет распределение запросов. Вес сервера можно изменить <<на лету>>. Параметр включается при помощи команды balance roundrobi};
  • Least Connected --- направляет новые подключения к серверу с наименьшим числом соединений. Параметр включается при помощи команды balance leastconn;
  • Static Round Robin --- направляет новые подключения к следующему серверу в циклическом списке, который видоизменяется при помощи веса сервера, на основании которого идет распределение запросов. В отличие от стандартной реализации Round Robin, в данном алгоритме нельзя изменить вес сервера <<на лету>>. Изменение веса сервера требует перезагрузки HAProxy. Параметр включается при помощи команды balance static-rr;
  • Source --- выбирает сервер исходя из хеша, построенного на основе IP-адреса пользователя. Таким образом, пользователь всегда обращается к одному и тому же серверу.

server srv-1.3.my.com 21.86.21.20:80 cookie site113ha check inter 2000 fall 3 minconn 30 maxconn 70 weight 100

Описание обслуживающего сервера, где:

  • srv-1.3.my.com --- имя сервера;
  • 21.86.21.20:80 --- IP-адрес: порт;
  • cookie site113ha --- задание cookie, необходимого для правильного распределения сессий клиентов;
  • check inter 2000 fall 3 --- проверка доступности сервера каждые 2с, при наличии трех ошибок считать сервер недоступным;
  • minconn 30 maxconn 70 --- организация очереди запросов, ограничение не более 70 одновременно обрабатывающихся запросов;
  • weight 100 --- вес сервера, возможные значения от 1 до 100.

stats enable

Включает статистику.

fullconn 200Задает максимальное значение одновременных подключений.

listen

listen stats-srv-3.my.com *:8180

Описывает IP-адрес и порт доступа к статистике.


stats uri /statsURL доступа к статистике.

stats realm Haproxy

Statistics

Заголовок (title) страницы статистики.

stats show-legendsОтображает в статистике дополнительную информацию о параметрах.

stats refresh 5sУказывает интервал автоматического обновления страницы статистики.

stats auth test:testУстанавливает логин и пароль доступа к странице статистики.

Пример конфигурационного файла для распределения нагрузки сервера Apache


global
        log /dev/log local0
        log /dev/log local1 notice
        maxconn 40000
        chroot /var/lib/haproxy
        stats socket /run/haproxy/admin.sock mode 660 level 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 /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

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
  • No labels