# Расширенные возможности

> Управление во время работы, возможности операционной системы, скрипты Lua и трассировка в реальном времени

---

Индекс LLMS: [llms.txt](/ru/llms.txt)

---

<!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. -->

## 3.5.1. Расширенные возможности: управление {#section-3-5-1}

HAProxy спроектирован для исключительно стабильной работы и безопасного управления в обычной рабочей среде. Он поставляется одним исполняемым файлом и не требует процедуры установки. Несколько версий легко могут сосуществовать: экземпляры можно и рекомендуется обновлять постепенно, в порядке важности, вместо одновременного переноса всех экземпляров. Файлы конфигурации удобно хранить под контролем версий. Проверка конфигурации выполняется отдельно от работающей службы, поэтому не нужно перезапускать службу, рискуя получить сбой. При проверке могут обнаруживаться сложные ошибки (например, правило, скрывающее другое правило, или неработоспособная привязка сеансов); для их устранения выдаются подробные предупреждения и рекомендации. Обратная совместимость конфигурации охватывает очень давние версии: версия 1.5 полностью поддерживала конфигурации версии 1.1, написанные 13 лет назад, а в 1.6 прекращена поддержка лишь почти неиспользуемых устаревших директив, которые можно заменить другими средствами. Обновление конфигурации и программы происходит плавно и без прерывания обслуживания: старые и новые процессы могут сосуществовать в системе, каждый обрабатывая свои соединения. При запуске выводятся состояние системы, параметры сборки и сведения о совместимости библиотек.

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

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

Интерфейс командной строки (CLI) доступен через сокет UNIX или TCP и позволяет выполнять различные операции и получать сведения для устранения неполадок. Действия через этот сокет не требуют изменения конфигурации, поэтому его в основном используют для временных изменений. Через интерфейс можно менять адрес, вес и состояние сервера; просматривать статистику и сбрасывать счётчики; выгружать и очищать таблицы привязок, в том числе выборочно по критериям ключей; выводить и принудительно закрывать соединения со стороны клиентов и серверов; выгружать сохранённые ошибки с подробным анализом точной причины и места; выводить, добавлять и удалять записи ACL и карт отображения; обновлять общие секреты TLS; на лету ограничивать число соединений и их интенсивность для произвольных фронтендов (полезно в средах совместного хостинга); отключать отдельный фронтенд, освобождая прослушиваемый порт (полезно, если операции в дневное время запрещены, но исправление всё же необходимо). Также разрешены обновление сертификатов и их конфигурации на лету, включение и просмотр трассировки каждого этапа обработки трафика.

Для сред, где обязателен SNMP, существуют как минимум два агента. Один поставляется с исходным кодом HAProxy и использует модуль Perl Net-SNMP. Другой входит в коммерческие пакеты и не требует Perl. По охвату возможностей они примерно эквивалентны.

На машине с HAProxy часто рекомендуется установить 4 утилиты:

- socat — для подключения к CLI, хотя некоторые варианты netcat тоже в определённой мере это умеют;

- halog из последней версии HAProxy — инструмент анализа журналов, который чрезвычайно быстро (от 1 до 2 GB в секунду) разбирает собственные журналы TCP и HTTP и извлекает полезные сведения и статистику: запросы по URL и исходным адресам, URL, отсортированные по времени ответа или частоте ошибок, коды завершения и т. п. Он предназначен для установки на рабочих серверах и устранения неполадок в реальном времени, поэтому должен быть установлен и готов к использованию;

- tcpdump — настоятельно рекомендуется для получения сетевых трассировок при исследовании проблем, замеченных в журналах. В какой-то момент анализ приложения и haproxy может разойтись, и только сетевые трассировки позволяют определить, кто прав. С помощью tcpdump также довольно часто обнаруживают ошибки сетевых стеков и гипервизоров;

- strace — дополнение к tcpdump. Он показывает, что в действительности видит HAProxy, и помогает отделить проблемы операционной системы от проблем самого HAProxy. Strace часто запрашивают при подозрении на ошибку в HAProxy.

## 3.5.2. Расширенные возможности: системные функции {#section-3-5-2}

В зависимости от операционной системы, на которой развёрнут HAProxy, могут быть доступны или необходимы дополнительные возможности. Хотя HAProxy поддерживает ряд платформ, в основном его разрабатывают на Linux, поэтому некоторые функции доступны только на этой платформе.

Прозрачная привязка и установка соединений, привязка соединений к определённому сетевому интерфейсу, а также привязка нескольких процессов к одним IP-адресам и портам доступны только в Linux и BSD. При этом лишь Linux распределяет входящие запросы между доступными процессами средствами ядра.

Linux также предоставляет дополнительные возможности и оптимизации: поддержку сетевых пространств имён (также известных как «контейнеры»), позволяющую HAProxy служить шлюзом между всеми контейнерами; установку MSS, меток Netfilter и поля IP TOS для клиентского соединения; поддержку TCP FastOpen на стороне прослушивания; пользовательские тайм-ауты TCP, позволяющие ядру быстро закрыть соединение, если оно обнаружило исчезновение клиента до истечения заданных тайм-аутов; TCP splicing, при котором ядро пересылает данные между сторонами соединения без многократного копирования памяти; параметр привязки «defer-accept», чтобы получать уведомление о входящем соединении только после появления данных в буферах ядра; отправку запроса вместе с ACK, подтверждающим установку соединения (иногда называемую «piggy-back»), включаемую параметром «tcp-smart-connect». Кроме того, в Linux HAProxy тщательно управляет отложенными ACK TCP, чтобы максимально сократить число пакетов в сети.

В некоторых системах часы ненадёжны и скачут то назад, то вперёд. Раньше это встречалось на отдельных системах NUMA, где процессоры видели немного разное время. В последнее время проблема чаще возникает в виртуализированных средах, где виртуальные часы не связаны с реальными, из-за чего возможны огромные скачки времени — наблюдались даже скачки до 30 секунд. Это создаёт серьёзные проблемы с соблюдением тайм-аутов. Чтобы обойти этот недостаток, HAProxy поддерживает собственные монотонные часы, основанные на системных, но с измерением и компенсацией отклонения. Благодаря этому даже при очень плохих системных часах таймеры остаются достаточно точными, а тайм-ауты продолжают работать. Учтите, что проблема затрагивает все программы в такой системе и не специфична для HAProxy. Типичные проявления — ложные тайм-ауты или зависания приложений. Поэтому при обнаружении такого поведения систему необходимо исправить, даже несмотря на защиту HAProxy.

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

## 3.5.3. Расширенные возможности: скрипты {#section-3-5-3}

HAProxy можно собрать с поддержкой встроенного языка Lua. Это открывает широкие возможности сложной обработки запросов и ответов, принятия решений о маршрутизации, обработки статистики и многого другого. Через Lua можно даже устанавливать параллельные соединения с другими серверами для обмена сведениями. Так можно, например, разработать систему аутентификации, хотя это и непросто. Подробнее об использовании Lua см. документацию в файле «doc/lua-api/index.rst».

## 3.5.4. Расширенные возможности: трассировка {#section-3-5-4}

Администратор в любой момент может подключиться к CLI и включить трассировку различных внутренних подсистем. По умолчанию доступны разные уровни детализации: на практике можно получать от одной строки до 500 строк на запрос. Доступны фильтры и механизм автоматического включения, выключения и приостановки захвата, позволяющие дождаться определённого события и подробно изучить его. Это исключительно удобно для диагностики нарушений протокола неисправными серверами и клиентами или атак отказа в обслуживании.
