К основному содержимому

HAProxy на VDS: балансировка нагрузки и проверки

VDS / VPS серверы · 29.09.2026

Что такое HAProxy и когда он нужен на VDS

HAProxy — это TCP/HTTP-балансировщик нагрузки и прокси, который распределяет входящие запросы между несколькими серверами-бэкендами. Его ставят перед парой веб-серверов, кластером PHP-FPM или несколькими инстансами приложения, чтобы пережить отказ одного узла и распределить трафик равномерно. HAProxy изначально создавался именно как балансировщик и умеет глубоко контролировать состояние бэкендов — есть отдельная статья про Nginx как балансировщик нагрузки, если нужен более лёгкий вариант.

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

Установка HAProxy на Ubuntu и Debian

Пакет HAProxy есть в стандартных репозиториях. Установите его и проверьте версию:

apt update
apt install haproxy -y
haproxy -v

Сервис сразу регистрируется в systemd. Основной конфигурационный файл находится по пути /etc/haproxy/haproxy.cfg. Перед изменениями сделайте копию:

cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak

Базовая конфигурация: frontend и backend

Конфигурация HAProxy строится из секций frontend (что слушаем) и backend (куда отправляем). Минимальный рабочий пример для распределения HTTP-трафика между двумя серверами:

frontend http_front
    bind *:80
    default_backend http_back

backend http_back
    balance roundrobin
    server web1 10.0.0.11:80 check
    server web2 10.0.0.12:80 check

Параметр check в конце строки server включает проверку доступности этого бэкенда — без него HAProxy не узнает о падении сервера и продолжит слать на него трафик.

Проверки доступности бэкендов (health checks)

По умолчанию HAProxy проверяет TCP-соединение с портом бэкенда каждые несколько секунд. Для HTTP-сервисов лучше включить проверку по конкретному URL, чтобы отличать "порт открыт" от "приложение реально отвечает":

backend http_back
    option httpchk GET /health
    http-check expect status 200
    server web1 10.0.0.11:80 check inter 3000 fall 3 rise 2
    server web2 10.0.0.12:80 check inter 3000 fall 3 rise 2

Параметр inter 3000 задаёт интервал проверки в 3000 миллисекунд, fall 3 — сколько неудачных проверок подряд нужно для исключения сервера из ротации, а rise 2 — сколько успешных проверок требуется, чтобы вернуть его обратно.

Алгоритмы балансировки нагрузки

Параметр balance в секции backend задаёт распределение запросов. Основные варианты:

АлгоритмПринцип работы
roundrobinПо очереди на каждый сервер
leastconnНа сервер с наименьшим числом активных соединений
sourceПо хешу IP клиента — один клиент всегда попадает на один сервер

Для сессионных приложений без общего хранилища сессий применяйте source или balance leastconn с включённым stick-table, чтобы пользователь не терял авторизацию при переключении между бэкендами.

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

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

haproxy -c -f /etc/haproxy/haproxy.cfg
systemctl reload haproxy

Чек-лист для продакшена:

  • Всегда проверяйте конфиг командой haproxy -c перед reload.
  • Настройте httpchk на реальный эндпоинт здоровья приложения, а не просто на корень сайта.
  • Откройте порт балансировщика в файрволе — см. статью про настройку UFW на VDS.
  • Подключите общий мониторинг ресурсов сервера с HAProxy — см. статью про мониторинг ресурсов VDS.
  • Включите страницу статистики HAProxy (stats enable) на отдельном порту, чтобы видеть состояние бэкендов в реальном времени.
← Назад в базу знаний Задать вопрос поддержке