Установка и настройка HAProxy на Ubuntu 22.04

Что такое HAProxy
HAProxy (High Availability Proxy) — это свободный и открытый балансировщик нагрузки и прокси‑решение. Он распределяет входящие HTTP/HTTPS запросы между несколькими серверами, повышая отказоустойчивость и масштабируемость приложений. Ключевые преимущества: высокая производительность, надёжные health‑checks и невысокая нагрузка на память и CPU.
Краткое определение: балансировщик нагрузки — компонент, который принимает запросы от клиентов и равномерно распределяет их по группе серверов.
Предварительные требования
- Сервер с Ubuntu 22.04 для HAProxy.
- Два сервера с Ubuntu 22.04, на которых будут работать Apache (backend).
- Настроенный пароль root или аккаунт с sudo на всех серверах.
Настройка Apache как backend
На каждом из двух backend‑серверов выполните установку Apache и создайте простую тестовую страницу.
На первом backend:
apt-get update
apt-get install apache2 -yСоздайте тестовую страницу:
echo "Success! This is my first Apache Server
" | tee /var/www/html/index.htmlНа втором backend выполните те же команды и создайте страницу с текстом “Success! This is my second Apache Server”:
apt-get update
apt-get install apache2 -y
echo "Success! This is my second Apache Server
" | tee /var/www/html/index.htmlПосле этого убедитесь, что оба сервера отвечают по HTTP на порту 80.
Установка HAProxy
HAProxy доступен в стандартном репозитории Ubuntu 22.04. Установите и запустите сервис:
apt-get install haproxy -y
systemctl start haproxy
systemctl enable haproxyПроверьте статус:
systemctl status haproxyОжидаемый ответ покажет, что служба запущена и активна.
Конфигурация HAProxy
Откройте основной конфигурационный файл:
nano /etc/haproxy/haproxy.cfgДобавьте блок frontend и backend. Пример минимальной конфигурации для HTTP на порту 80:
frontend apache_front
# Frontend listen port - 80
bind *:80
# Set the default backend
default_backend apache_backend_servers
# Enable send X-Forwarded-For header
option forwardfor
# Define backend
backend apache_backend_servers
# Use roundrobin to balance traffic
balance roundrobin
# Define the backend servers
server backend01 172.16.0.200:80 check
server backend02 172.16.0.201:80 checkСохраните файл и перезапустите HAProxy:
systemctl restart haproxyПояснение: 172.16.0.200 — IP первого Apache, 172.16.0.201 — IP второго Apache.
Тестирование работы
- Откройте в браузере http://
. - Перезагружайте страницу несколько раз. При корректной настройке вы должны видеть страницы от серверов по очереди (roundrobin).


Критерии приёмки
- HAProxy успешно принимает соединения на порту 80.
- Запросы равномерно распределяются между backend‑ами (при нескольких обновлениях видны ответы от разных серверов).
- При остановке одного backend‑а HAProxy перестаёт направлять на него трафик (health‑check отмечает недоступность).
- systemctl status haproxy показывает Active: active (running).
Рекомендации по безопасности и надёжности
- Используйте SSL/TLS: терминируйте HTTPS на HAProxy (bind *:443 ssl crt /etc/ssl/certs/your.pem) и перенаправляйте HTTP на HTTPS.
- Включите rate‑limiting и защиту от DDoS по необходимости (frontend с acl/track).
- Запустите HAProxy под системным пользователем haproxy, не под root.
- Регулярно обновляйте пакет haproxy и пакеты OS.
- Храните сертификаты в защищённом хранилище, используйте automated renew (например, certbot).
Важно: для продакшна добавьте мониторинг (Prometheus/StatsD) и логирование высокого уровня.
Отладка и типичные проблемы
Проблема: на HAProxy нет доступа к backend‑ам.
- Проверьте сетевую доступность: curl http://172.16.0.200:80 с сервера HAProxy.
- Убедитесь в межсетевых правилах (firewall/ufw) и в том, что Apache слушает на 0.0.0.0:80.
Проблема: health‑checks всегда помечают backend как DOWN.
- Проверьте формат health‑check: по умолчанию HAProxy делает TCP check. Для HTTP можно указать опцию httpchk.
- Убедитесь, что ответ сервера возвращает 200 OK.
Проблема: X‑Forwarded‑For отсутствует.
- Включите option forwardfor в frontend и убедитесь, что backend корректно читает этот заголовок.
Когда HAProxy не подходит (контрпример)
- Если у вас крайне простое приложение на одном сервере, балансировщик может быть избыточен.
- Если вы используете специфичные протоколы на прикладном уровне (не HTTP/HTTPS) и нужны сложные трансформации — подберите решение с поддержкой этих протоколов.
Альтернативные подходы
- Nginx как балансировщик — простая альтернатива для HTTP/HTTPS с меньшим набором фич.
- Облачные балансировщики (AWS ELB, GCP Load Balancer) — управляемые сервисы с интегрированным SSL и авто‑масштабированием.
Контрольный чеклист по ролям
Администратор:
- Установить и запустить HAProxy, настроить systemd.
- Настроить firewall и SELinux/AppArmor (если используется).
- Настроить резервное копирование конфигураций.
Разработчик:
- Проверить корректность X‑Forwarded‑For и перенаправлений.
- Убедиться, что сессии либо stateless, либо настроено сохранение сессий (stickiness).
Тестировщик:
- Проверить балансировку (roundrobin), эмуляцию падения backend‑ов и отклик при failover.
- Выполнить нагрузочное тестирование (ab/hey) на тестовой среде.
Тесты и сценарии приёмки
- Функциональный: запросы распределяются между backend01 и backend02 при 10 последовательных обновлениях.
- Отказ одного backend: остановить Apache на backend01 — все новые запросы должны идти на backend02.
- Health‑check: воспроизвести неверный HTTP‑ответ и убедиться, что HAProxy пометит сервер как DOWN.
Краткая методология внедрения (шаги)
- Подготовить backend‑серверы и убедиться в их работоспособности по HTTP.
- Установить HAProxy и сделать минимальную конфигурацию на тестовой машине.
- Проверить балансировку и health‑checks.
- Добавить SSL/TLS, логирование и мониторинг.
- Перенести конфигурацию в production по плану и протестировать на реальном трафике.
Итог
Мы показали, как установить HAProxy на Ubuntu 22.04, настроить фронтенд на 80‑м порту и два backend‑сервера Apache с простыми health‑checks. Для продакшна дополните настройку SSL, мониторингом и правилами безопасности. HAProxy остаётся хорошим выбором, когда требуется быстрый и надёжный балансировщик нагрузки для веб‑приложений.
Сводка:
- Установите Apache на backend‑ах и проверьте доступ.
- Настройте haproxy.cfg с frontend/ backend и health‑checks.
- Перезапустите HAProxy и проверьте распределение запросов.
Заметки: при миграции в продакшн обязательно прогоните нагрузочные тесты и настройте мониторинг.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента