SystemdDoctor
служба не работает haproxy сеть кластер

HAProxy: cannot bind socket и плавающий адрес

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

Вероятные причины

По порядку: сверху то, что встречается чаще.

  1. Адрес не поднят на этом узле

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

  2. Адрес занят другой службой

    Порт 80 или 443 может держать веб-сервер, установленный на том же узле.

  3. Ошибка в конфигурации адреса

    Опечатка в адресе или порту приводит к попытке привязки к несуществующему адресу.

Диагностика

Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.

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

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

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

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

Сообщение о неудачной привязке.

journalctl -u haproxy -n 30 --no-pager

Решение

Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.

1. Адрес не поднят на этом узле
Почему происходит
Плавающий адрес принадлежит активному узлу. На пассивном его нет, и обычная привязка невозможна.
Как проверить
Посмотрите адреса и настройку ядра.
ip -brief addr
sysctl net.ipv4.ip_nonlocal_bind
Как исправить
Разрешите привязку к отсутствующему адресу — это стандартное решение для балансировщиков.
echo "net.ipv4.ip_nonlocal_bind = 1" | sudo tee /etc/sysctl.d/99-haproxy.conf && sudo sysctl --system
2. Адрес занят другой службой
Почему происходит
Порт 80 или 443 может держать веб-сервер, установленный на том же узле.
Как проверить
Посмотрите владельца порта.
sudo ss -tlnp | grep -E ":(80|443)\s"
Как исправить
Освободите порт: балансировщик и веб-сервер на одном порту не сосуществуют.
3. Ошибка в конфигурации адреса
Почему происходит
Опечатка в адресе или порту приводит к попытке привязки к несуществующему адресу.
Как проверить
Проверьте конфигурацию.
sudo haproxy -c -f /etc/haproxy/haproxy.cfg
Как исправить
Исправьте адрес по сообщению проверки.

Пример вывода

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

× haproxy.service - HAProxy Load Balancer
     Active: failed (Result: exit-code) since Mon 2026-09-15 18:02:41 MSK; 1s ago

haproxy[4700]: [ALERT] Starting frontend https: cannot bind socket [203.0.113.10:443]
systemd[1]: haproxy.service: Main process exited, code=exited, status=1/FAILURE

Связанные ошибки

Где встречается чаще всего

Источники

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