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

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

  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7)

  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6)

  • Astra Linux Special Edition РУСБ.10015-16 исп. 1 и исп. 2

  • Astra Linux Special Edition РУСБ.10265-01 (очередное обновление 8.1)

  • Astra Linux Common Edition 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:

    sudo apt install apache2

  3. Настроить конфигурацию службы apache2 в файле /etc/apache2/apache2.conf:

    Данная операция не требуется для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6) с установленным оперативным обновлением БЮЛЛЕТЕНЬ № 20211008SE16 (оперативное обновление 9) и более поздних обновлений.

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

  4. Перезапустить службу apache2:

    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).

Работа с метками конфиденциальности

Данный раздел применим к Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6) с установленным оперативным обновлением БЮЛЛЕТЕНЬ № 20211008SE16 (оперативное обновление 9) и более поздних обновлений.

Параметр конфигурации astra-mode включает или выключает работу с метками конфиденциальности (см. Метка безопасности: структура и состав). Параметр имеет следующий формат:

astra-mode on | off

По умолчанию при работе в ОС с включенным МРД (Astra Linux Special Edition 1.6 или 1.7 в режиме максимальной защиты) работа метками конфиденциальности включена. При этом для управления потоками данных предоставляются два метода выборки:

  • метод maclev — проверяется числовое значение иерархического уровня конфиденциальности;
  • метод maccat — проверяется числовое значение неиерархической категории конфиденциальности.

Синтаксис:

acl <имя_правила> <метод> <операция_сравнения> <числовое_значение>

Допустимые операции сравнения:

  • eq - равно;
  • ge - больше или равно;
  • gt - больше;
  • le - меньше или равно;
  • lt - меньше;

Пример использования:

frontend http_frontend
    bind *:8081
    mode http

    acl maclev_ge_1  maclev ge 1
    acl maclev_eq_2  maclev eq 2
    acl maccat_eq_0  maccat eq 0
    tcp-request content accept if maclev_ge_1 maccat_eq_0
    use_backend http_back_2 if maclev_eq_2 maccat_eq_0

    option http-keep-alive
    default_backend http_back_1

backend http_back_1
    mode http
    server s1 host.domain.name:80

backend http_back_2
    mode http
    server s2 host.domain.name:81

В примере:

  • Определяются три правила проверки:
    • acl maclev_ge_1 maclev ge 1 - иерархический уровень конфиденциальности больше единицы;
    • acl maclev_eq_2 maclev eq 2 - иерархический уровень конфиденциальности равен двум;
    • acl maccat_eq_0 maccat eq 0 - неиерерхические категории конфиденциальности равны нулю;
  • tcp-request content accept if maclev_ge_1 maccat_eq_0 - принимается трафик с иерархическим уровнем конфиденциальности больше единицы и с нулевыми неиерархическими категориями конфиденциальности;
  • use_backend http_back_2 if maclev_eq_2 maccat_eq_0 - трафик с иерархическим уровнем конфиденциальности 2 перенаправляется на сервер http_back_2.
  • No labels