Установка и настройка HAProxy на Rocky Linux 8

В этом пошаговом руководстве показано, как установить и настроить HAProxy на Rocky Linux 8: установка пакета, базовая конфигурация frontend/backend, логирование через rsyslog, правила firewalld и проверка работы. Приведены рекомендации по безопасности, отладке и контрольный список для администраторов.
Введение
При публикации приложения в Интернете ключевые параметры — доступность, масштабируемость и производительность. HAProxy — надёжный и бесплатный балансировщик нагрузки с открытым исходным кодом. Он распределяет входящий трафик между несколькими backend-серверами, повышая отказоустойчивость.
Для этого руководства используется следующая сеть:
- HAProxy: 172.16.10.10
- Backend1: 172.16.10.11
- Backend2: 172.16.10.12
Важно: в примерах сохранены IPv4-адреса и порты, их нужно заменить на реальные в вашей инфраструктуре.
Что вы получите из этой статьи
- Пошаговая установка HAProxy на Rocky Linux 8
- Пример конфигурации frontend и backend
- Настройка логирования через rsyslog
- Открытие порта в firewalld
- Настройка простых проверок состояния (health checks)
- Проверка работоспособности и отладка
- Рекомендации по безопасности, альтернативы и чек-листы
Требования
- Сервер с Rocky Linux 8
- Доступ root или sudo
- Базовое представление о systemd и iptables/firewalld
Установка HAProxy
По умолчанию пакет HAProxy доступен в репозитории Rocky Linux 8. Установите его:
dnf install haproxy -yЗапустите сервис и включите автозапуск:
systemctl start haproxy
systemctl enable haproxyПроверьте базовый статус:
systemctl status haproxyЕсли конфигурация содержит синтаксические ошибки, systemd не запустит службу. В этом случае используйте проверку конфига перед рестартом:
haproxy -c -f /etc/haproxy/haproxy.cfgБазовая конфигурация HAProxy
Откройте файл конфигурации:
nano /etc/haproxy/haproxy.cfgНиже — минимально рабочая конфигурация, адаптированная под наш пример. В разделе frontend указываем bind на IP:порт, включаем опции HTTP и адрес статистики. В backend задаём алгоритм балансировки и здоровье серверов.
frontend http_balancer
bind 172.16.10.10:80
option http-server-close
option forwardfor
stats uri /haproxy?stats
default_backend Apache_webservers
backend apache_webservers
mode http
balance roundrobin
option httpchk HEAD / HTTP/1.1\r\nHost:\ localhost
server apache1 172.16.10.11:80 check
server apache2 172.16.10.12:80 checkЗамечания:
- balance roundrobin — простой алгоритм, он циклически распределяет запросы.
- option httpchk выполняет простой HTTP HEAD-запрос для проверки доступности бэкенда.
- stats uri позволяет просматривать интерфейс статистики по /haproxy?stats (по умолчанию без аутентификации).
Сохраните файл и перейдите к настройке логирования.
Настройка rsyslog для HAProxy
Отредактируйте /etc/rsyslog.conf и включите UDP-рецептор, если он закомментирован:
nano /etc/rsyslog.confРазкомментируйте (если требуется):
module(load="imudp")
input(type="imudp" port="514")Создайте отдельный файл конфигурации для HAProxy:
nano /etc/rsyslog.d/haproxy.confДобавьте правила:
local2.=info /var/log/haproxy-access.log
local2.notice /var/log/haproxy-info.logПерезапустите rsyslog и затем HAProxy:
systemctl start rsyslog
systemctl enable rsyslog
systemctl restart haproxyПроверьте, что логи создаются:
ls -l /var/log/haproxy-*
tail -f /var/log/haproxy-access.logКонфигурация брандмауэра (firewalld)
Разрешите порт 80 (HTTP) на всех узлах, где это необходимо:
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --reloadЕсли в сети используется зональная политика, укажите зону и интерфейс явно:
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reloadЕсли планируется администрирование через SSH и доступ к статистике, откройте только нужные порты и ограничьте доступ по IP.
Установка и подготовка backend-серверов (Apache)
На каждом backend установите Apache HTTPD:
dnf install httpd -y
systemctl start httpd
systemctl enable httpdЗамените содержимое index.html на каждом сервере для проверки балансировки.
nano /usr/share/httpd/noindex/index.htmlНа первом беке поместите:
Welcome to First Apache Web Server!На втором:
Welcome to Second Apache Web Server!После этого HAProxy будет перенаправлять запросы между ними.
Проверка работы HAProxy
Откройте в браузере http://172.16.10.10 — вы должны видеть страницу первого сервера. Обновите страницу — должен отображаться второй сервер (roundrobin). Наглядно это видно на скриншотах:


Также можно проверить через curl, чтобы увидеть заголовки и проксирование:
curl -I http://172.16.10.10Для подробной диагностики используйте логи HAProxy и бэкендов:
tail -n 200 /var/log/haproxy-access.log
journalctl -u haproxy -eПроверка конфигурации и отладка
Полезные команды:
- haproxy -c -f /etc/haproxy/haproxy.cfg — проверка синтаксиса конфигурации
- ss -lnpt | grep haproxy — проверка портов
- systemctl status haproxy — статус сервиса
- tcpdump -i any port 80 — сетевой трафик (при необходимости)
Типичные ошибки и способы их устранения:
- Служба не стартует — проверьте output haproxy -c и systemd journal.
- Бэкенды в состоянии DOWN — проверьте доступность по IP:port и ответ на HTTP HEAD.
- Нет логов — убедитесь, что rsyslog запущен и /etc/rsyslog.d/haproxy.conf корректен.
Безопасность и hardening
Рекомендации, которые полезно применить перед продакшен-внедрением:
- Ограничьте доступ к интерфейсу статистики (/haproxy?stats) по IP или добавьте аутентификацию:
listen stats
bind 172.16.10.10:9000
stats enable
stats uri /haproxy?stats
stats auth admin:StrongPassword- Включите TLS на frontend (ssl termination) или используйте отдельный реверс-прокси с TLS.
- Отключите ненужные опции и избегайте отображения подробной отладки в логах.
- Настройте ограничение подключений и timeouts в haproxy.cfg (tune.timeout.connect и др.).
- Настройте SELinux и проверьте, что процессы имеют доступ к логам и pid-файлам. При проблемах временно проверьте permissive режим.
Пример базовой защиты статистики:
acl allowed_admin src 10.0.0.0/24
http-request deny unless allowed_admin if { path_beg /haproxy }Когда HAProxy не подходит или альтернативы
Контраргументы/когда не стоит использовать HAProxy:
- Нужна очень простая балансировка L7 в контейнерной среде — подойдёт Traefik или kube-proxy для Kubernetes.
- Требуется балансировка L4 с экстремально низкой задержкой — LVS (IPVS) может дать более низкий накладной эффект.
- Требуется «из коробки» динамическая интеграция с сервис-дискавери — Traefik предлагает встроенную интеграцию с динамической конфигурацией.
Альтернативы:
- Nginx (reverse proxy + load balancing)
- Traefik (динамическая маршрутизация в контейнерах)
- Keepalived + HAProxy (дублирование виртуального IP для высокой доступности)
- LVS/IPVS (L4)
Методология внедрения (мини-план)
- Подготовка окружения: резервные копии конфигов, доступ root, тестовая сеть.
- Установка HAProxy на тестовый узел, базовая конфигурация.
- Настройка бэкендов и проверка health checks.
- Настройка логирования и мониторинга.
- Нагрузочное тестирование в QA.
- Плавный перевод трафика и мониторинг в производстве.
Ролевые чек-листы
Администратор/DevOps:
- Установить пакет и включить сервисы (haproxy, rsyslog)
- Настроить firewall-cmd
- Проверить SELinux и права на логи
Разработчик/QA:
- Подготовить тестовые страницы/эндпоинты на бэкендах
- Провести smoke- и нагрузочное тестирование
- Проверить корректность заголовков и сессий
Оператор поддержки:
- Знать команды проверки статуса
- Уметь читать логи HAProxy и Apache
- Иметь план rollback при проблемах
Критерии приёмки
- HAProxy успешно стартует и проходит проверку конфигурации (haproxy -c).
- HTTP-запросы корректно распределяются между backend-серверами.
- Логи HAProxy пишутся в /var/log/haproxy-*.log.
- Доступ к статистике защищён или ограничен по IP.
- Нагрузочные тесты не показывают критического роста ошибок 5xx.
Короткая галерея ошибок (Edge-case gallery)
- Проблема: backend отвечает медленно — увеличьте timeout и проверьте ресурсную нагрузку.
- Проблема: сессии теряются — настройте проксирование X-Forwarded-For и sticky-сессии при необходимости.
- Проблема: системный ресурс (FDs) исчерпан — поднимите лимиты в systemd unit (LimitNOFILE).
1‑строчный глоссарий
- frontend: входящая точка в HAProxy; принимает соединения.
- backend: пул серверов, куда HAProxy отправляет запросы.
- stats: встроенная страница статистики HAProxy.
- health check: проверка доступности backend-сервера.
Заключение
Вы успешно установили и настроили базовую конфигурацию HAProxy на Rocky Linux 8. Далее подумайте о шифровании трафика, ограничении доступа к статистике и интеграции с мониторингом (Prometheus/Grafana). Перед переводом в продакшен выполните нагрузочные тесты и подготовьте план отката.
Important: всегда тестируйте изменения конфигурации в тестовой среде и храните резервные копии файлов конфигурации.
Похожие материалы
Ошибка olicenseheartbeat.exe в Microsoft Office
Бесплатный Microsoft Word в браузере
Обновление образов Docker: руководство по безопасным апдейтам
Как исправить потерю пакетов в Rocket League
Как защитить сайт на WordPress