Содержание

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 8 Next »

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

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

Основные возможности HAProxy


  • Несколько алгоритмов определения доступности серверов:
    • tcp-check;
    • http-check;
    • mysql-check;
  • Балансировка нагрузки (распределение HTTP-/HTTPS-/TCP-запросов между доступными серверами) на транспортном уровне (layer 4);
  • Возможность закрепления определенных клиентов за конкретными обслуживающими серверам (stick-tables);
  • Поддержка:
    • IPv6 и UNIX sockets;
    • Сжатия HTTP/1.1 (deflate, gzip, libslz);
    • SSL;
    • Полная поддержка постоянного HTTP-соединения;
    • Поддержка переменных блоков и Lua-скриптов в конфигурации сервера;
  • WEB-интерфейс с актуальным состоянием и статистикой работы программы.

Описание стенда

Используется три сервера и одна рабочая станция:

  • основной сервер, на котором установлен haproxy, принимающий и перераспределяющий запросы:
    • IP-адрес 192.168.27.200;
  • web-сервер №1:
    • имя сервера host1.domain.name;
    • IP-адрес 192.168.27.201;
  • web-сервер №2:
    • имя сервера host2.domain.name;
    • IP-адрес 192.168.27.202;
  • рабочая станция с произвольным именем и адресом, находящаяся в одной сети с основным сервером

Установка пакетов

На основном сервере, который будет принимать запросы и распределять их, необходимо установить пакет HAProxy. Это можно сделать с помощью графического менеджера пакетов или из командной строки командой:

sudo apt install haproxy
На web-серверах:

  1. Если в сети не используется служба DNS, то настроить разрешение имен через файл /etc/hosts и задать имена серверов:
    1. web-сервер №1:

      sudo sed -i '$a 192.168.27.201\thost1.domain.name host1' /etc/hosts
      sudo hostnamectl set-hostname host1.domain.name

    2. web-сервер №2:

      sudo sed -i '$a 192.168.27.202\thost2.domain.name host2' /etc/hosts
      sudo hostnamectl set-hostname host2.domain.name

  2. установить пакет apache2, настроить конфигурацию в файле /etc/apache2/apache2.conf и перезапустить службу apache2:

    sudo apt install apache2
    sudo sed -i '/AstraMode/{s/on/off/;s/# //}' /etc/apache2/apache2.conf
    sudo apachectl restart

Настройка haproxy

Настройка параметров 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Устанавливает логин и пароль доступа к странице статистики.

Для проверки работы можно использовать стандартный конфигурационный файл, добавив в него инструкции по приему и распределению запросов, т.е. добавив в файл следующие строки:


frontend http_front
       bind *:80
       stats uri /haproxy?stats
       default_backend http_back

backend http_back
       balance roundrobin
       server host1.domain.name 192.168.27.201:80 check
       server host2.domain.name 192.168.27.202:80 check


После внесения изменений в конфигурационный файл перезапустить службу haproxy:

sudo systemctl restart haproxy

Нагрузочное тестирование

На рабочей станции выполнить следующий сценарий:

for i in {1..1000} ; do
    wget --no-cache -qO- http://192.168.27.200/index.html > /dev/null & 
done 
wait

В результате выполнения сценария на основном сервере в журнале службы haproxy (файл /var/log/haproxy.log) должны появиться записи, сообщающие о перераспределении нагрузки, следующего вида:

а по адресу http://192.168.27.200/haproxy?stats будет доступнен сводный отчет:

В сводном отчете видно, что web-сервер №1 и web-сервер №2 имеют одинаковый вес, равный 1 (столбец Server:Wght) и запросы между ними были распределены поровну, по 500 на каждый сервер (столбец Sessions:LbTot).


  • No labels