SystemdDoctor
haproxy.service балансировкасеть

HAProxy в systemd: почему не запускается

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

О службе

Проверка выполняется командой haproxy -c -f /etc/haproxy/haproxy.cfg. Она печатает строку и раздел с ошибкой, и это первое, что нужно смотреть. В unit-файле дистрибутивов эта команда стоит в ExecStartPre=, поэтому её код и попадает в состояние службы.

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

Мягкая перезагрузка (systemctl reload haproxy) поднимает новый процесс и передаёт ему слушающие сокеты, не разрывая соединения. Это штатный способ применять правки, и полный перезапуск для балансировщика почти всегда лишний.

Как устроена

Проверка конфигурацииhaproxy -c -f /etc/haproxy/haproxy.cfg
Мягкая перезагрузкаsystemctl reload haproxy — соединения не рвутся
Плавающий адрестребует net.ipv4.ip_nonlocal_bind=1 для привязки на пассивном узле
Сертификатыв одном файле цепочка и ключ; при обновлении нужен reload
Дескрипторыпри большом числе соединений нужен повышенный LimitNOFILE

Частые ошибки

10 записей базы отмечены за этой службой.

Коды выхода

  • status=1/FAILURE в systemdКод 1/FAILURE означает, что программа запустилась и сама завершилась с ошибкой. Как найти настоящую причину в журнале службы.

Сообщения журнала

Ресурсы и ограничения

  • Too many open files в журнале службыСлужба исчерпала лимит файловых дескрипторов. Как правильно поднять LimitNOFILE и когда дело в утечке.
  • kernel: TCP: request_sock … overflowСоединения теряются при наплыве: переполнена очередь ожидающих соединений. Как считать somaxconn и backlog.
  • nf_conntrack: table full, dropping packetСоединения обрываются под нагрузкой: заполнена таблица отслеживания соединений ядра.

Ошибки служб

Коды выхода этой службы

Числа в status=N ниже 200 назначает сама программа, 200 и выше — systemd, когда не смог подготовить запуск.

statusЧто означает у этой службыКуда смотреть
1/FAILURE ошибка конфигурации или невозможность привязки к адресу. разбор

Диагностика

Проверка конфигурации с указанием строки ошибки.

sudo haproxy -c -f /etc/haproxy/haproxy.cfg

Показывает, упала проверка или сам процесс.

systemctl status haproxy --no-pager -l

Есть ли адрес привязки и разрешена ли привязка к отсутствующему адресу.

ip -brief addr && sysctl net.ipv4.ip_nonlocal_bind

Сообщения балансировщика при запуске и перезагрузке.

journalctl -u haproxy -n 40 --no-pager

Параметры unit, которые тут важны

  • ExecStartPre=проверка конфигурации до запуска
  • ExecReload=мягкая перезагрузка с передачей сокетов
  • LimitNOFILE=каждое соединение — дескриптор, значение по умолчанию мало
  • Type=notify в современных сборках

Источники

  • Документация HAProxy документация программы
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04) собственная проверка
    сверено 15 сентября 2026