Page tree
Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 2 Next »

Программное средство 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

        # Default SSL material locations
        ca-base /etc/ssl/certs
        crt-base /etc/ssl/private

        # Default ciphers to use on SSL-enabled listening sockets.
        # For more information, see ciphers(1SSL). This list is from:
        # 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

listen webcluster *:80
        mode http
        balance leastconn
        option forwardfor
        cookie serv insert
        option httpclose

server webserver1 192.168.25.11:80 cookie serv1 check
server webserver2 192.168.25.12:80 cookie serv2 check

  • No labels