HAProxy на CentOS 7: установка и настройка
Коротко о HAProxy
HAProxy (High Availability Proxy) — это свободное ПО для балансировки TCP/HTTP и проксирования. Написан на C, поддерживает SSL, сжатие, keep‑alive, пользовательские форматы логов и переписывание заголовков. HAProxy известен высокой производительностью, небольшим потреблением памяти и CPU. Его используют крупные сервисы для обеспечения отказоустойчивости и масштабирования приложений.
Основная идея и архитектура
HAProxy может работать в двух режимах:
- Layer 4 (TCP): пересылает «сырые» TCP‑пакеты клиентам. Прозрачный, быстрый, без анализа протокола.
- Layer 7 (HTTP): парсит HTTP‑заголовки, может принимать решения на уровне URL/заголовков.
В этом руководстве мы используем HAProxy в HTTP‑режиме (Layer 7) для балансировки двух Nginx‑веб‑серверов.
Кратко о стратегиях балансировки:
- roundrobin — простой циклический алгоритм.
- leastconn / lastconn — выбирает сервер с наименьшим числом активных соединений.
- source — хеш по IP клиента, обеспечивает «липкие» сессии.
Выбор алгоритма зависит от характера нагрузки: короткие и равномерные запросы — roundrobin; продолжительные/переменные — leastconn; требуется сессия — source.
Требования и план сети
- 3 сервера с CentOS 7
- loadbalancer — 192.168.1.102
- nginx1 — 192.168.1.104
- nginx2 — 192.168.1.105
- root или sudo на всех серверах
Сетевая схема простая: клиенты → HAProxy (192.168.1.102) → nginx1/nginx2 (192.168.1.104/105).
Важно: убедитесь, что firewall (firewalld/iptables) позволяет входящие на 80 и 8080, и что сеть между серверами доступна.
Шаг 0 — рекомендации перед установкой
Важно
- Сделайте снимок или снимите конфигурации перед изменениями.
- Проверьте доступность IP и имен DNS/hosts.
- Если на сервере уже запущен веб‑сервер на 80, решите, оставлять ли его.
Шаг 1 — настроить /etc/hosts
Войдите на сервер loadbalancer и отредактируйте /etc/hosts:
ssh [email protected]
sudo su
vi /etc/hostsДобавьте имена хостов для nginx1 и nginx2:
192.168.1.104 nginx1.loadbalancer.me nginx1
192.168.1.105 nginx2.loadbalancer.me nginx2На серверах nginx1 и nginx2 добавьте запись для балансировщика:
ssh [email protected]
ssh [email protected]
# на каждом nginx:
sudo vi /etc/hostsДобавьте:
192.168.1.102 loadbalancerПримечание: в исходном тексте была опечатка /etc/host — используйте /etc/hosts.
Шаг 2 — установка и базовая конфигурация HAProxy
- На loadbalancer обновите систему и установите HAProxy:
ssh [email protected]
sudo yum -y update
sudo yum -y install haproxy- Сделайте резервную копию оригинального конфига и создайте новый:
cd /etc/haproxy/
sudo mv haproxy.cfg haproxy.cfg.orig
sudo vi /etc/haproxy/haproxy.cfgВставьте (пример конфигурации):
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
log 127.0.0.1 local2 #Log configuration
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy #Запуск под пользователем haproxy
group haproxy
daemon
# turn on stats unix socket
stats socket /var/lib/haproxy/stats
#---------------------------------------------------------------------
# common defaults
#---------------------------------------------------------------------
defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
#---------------------------------------------------------------------
# HAProxy Monitoring Config
#---------------------------------------------------------------------
listen haproxy3-monitoring *:8080
mode http
option forwardfor
option httpclose
stats enable
stats show-legends
stats refresh 5s
stats uri /stats
stats realm Haproxy\ Statistics
stats auth howtoforge:howtoforge
stats admin if TRUE
default_backend app-main
#---------------------------------------------------------------------
# FrontEnd Configuration
#---------------------------------------------------------------------
frontend main
bind *:80
option http-server-close
option forwardfor
default_backend app-main
#---------------------------------------------------------------------
# BackEnd roundrobin as balance algorithm
#---------------------------------------------------------------------
backend app-main
balance roundrobin
option httpchk HEAD / HTTP/1.1\r\nHost:\ localhost
server nginx1 192.168.1.104:80 check
server nginx2 192.168.1.105:80 checkСохраните файл.
- Настройте rsyslog для логов HAProxy. Откройте UDP в /etc/rsyslog.conf (если требуется):
sudo vi /etc/rsyslog.confРаспакоменируйте или добавьте:
$ModLoad imudp
$UDPServerRun 514При необходимости ограничьте адрес:
$UDPServerAddress 127.0.0.1Создайте файл /etc/rsyslog.d/haproxy.conf и добавьте правила логов:
cd /etc/rsyslog.d/
sudo vi haproxy.confСодержимое:
local2.=info /var/log/haproxy-access.log
local2.notice /var/log/haproxy-info.log- Перезапустите rsyslog и запустите HAProxy:
sudo systemctl restart rsyslog
sudo systemctl start haproxy
sudo systemctl enable haproxyЕсли firewalld активен, откройте порты 80 и 8080:
sudo firewall-cmd --add-port=80/tcp --permanent
sudo firewall-cmd --add-port=8080/tcp --permanent
sudo firewall-cmd --reloadВажно
- Проверьте синтаксис конфигурации перед перезапуском: sudo haproxy -c -f /etc/haproxy/haproxy.cfg
- Логи HAProxy по умолчанию направляются в local2 — настройте rsyslog согласно примеру.
Шаг 3 — установка и настройка Nginx на nginx1 и nginx2
- На каждом nginx:
ssh [email protected]
ssh [email protected]
sudo yum -y install epel-release
sudo yum -y install nginx- Измените индексную страницу, чтобы отличать сервера:
# на nginx1
sudo bash -lc 'echo "nginx1.loadbalance.me
" > /usr/share/nginx/html/index.html'
# на nginx2
sudo bash -lc 'echo "nginx2.loadbalance.me
" > /usr/share/nginx/html/index.html'- Запустите и включите автозапуск:
sudo systemctl enable nginx
sudo systemctl start nginxОткройте порт 80, если нужно:
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --reloadШаг 4 — проверка работоспособности
Проверка из браузера: откройте http://192.168.1.102
Проверка с помощью curl:
curl 192.168.1.102
Откройте панель мониторинга HAProxy:
http://192.168.1.102:8080/stats (логин/пароль howtoforge:howtoforge)

Если при обращении curl вы видите то поочерёдно «nginx1.loadbalance.me» и «nginx2.loadbalance.me», балансировщик работает.
Проверочные тесты и критерии приёмки
Критерии приёмки
- HTTP 200 на корневой URL через HAProxy.
- При остановке nginx1 трафик автоматически идёт на nginx2 (health check отмечает nginx1 как DOWN).
- Доступ к /stats с корректной авторизацией.
- Логи HAProxy записываются в /var/log/haproxy-access.log.
Минимальные тесты
- curl 192.168.1.102 → ответ 200 и содержимое index.html
- sudo systemctl stop nginx (на nginx1) → curl не возвращает страницу nginx1
- Проверка статистики на /stats
Сценарии приёмки (acceptance)
- Балансировка: повторные запросы дают ответы с обоих серверов при roundrobin.
- Стабильность: 1000 параллельных запросов без значительного падения ответов (мониторинг CPU/RAM).
Руководство по устранению неисправностей
Нет ответа по 80 на балансировщике:
- Проверить systemctl status haproxy
- haproxy -c -f /etc/haproxy/haproxy.cfg
- firewall-cmd –list-all
Серверы backend отмечены как DOWN:
- Убедиться, что nginx слушает на 80
- Проверить option httpchk (HEAD /) — Nginx должен возвращать 200
- Посмотреть логи /var/log/haproxy-info.log и /var/log/haproxy-access.log
Неверные права на сокет/пользователь haproxy:
- Проверить наличие пользователя haproxy и директории /var/lib/haproxy
- Разрешения на /var/lib/haproxy/stats
Инцидентный откат (быстрый план)
- Если после изменения конфигурации HAProxy сервис не стартует, восстановите haproxy.cfg.orig и выполните systemctl restart haproxy.
- Если nginx вызывает ошибки, верните оригинальный index.html и перезапустите nginx, затем проверяйте по локальному 127.0.0.1:80.
Безопасность и рекомендации по эксплуатации
- SSL/TLS: для HTTPS используйте SSL‑терминацию на HAProxy (frontend bind *:443 ssl crt /etc/ssl/…). Храните ключи защищённо.
- Ограничьте доступ к панели /stats по IP или используйте базовую аутентификацию и HTTPS.
- Логи: настройте ротацию логов (logrotate) для /var/log/haproxy-*.log.
- Мониторинг: подключите Prometheus/Alertmanager или используйте встроенные метрики через socket.
- Обновления: обновляйте HAProxy и Nginx с тестированием на стенде.
Роли и чек‑листы
SRE / Системный администратор
- Проверить доступность портов 80/8080.
- Настроить и проверить rsyslog и ротацию логов.
- Настроить мониторинг и алерты.
DevOps инженер
- Автоматизировать установку конфигураций (Ansible/Chef/Puppet).
- Тестировать конфигурацию haproxy в стейдж-среде.
Разработчик
- Убедиться, что приложение корректно отвечает на HEAD / для health check.
- Проверить, что сессии корректно работают с выбранным алгоритмом балансировки.
Тестовые случаи и приёмочные критерии
- TC1: Обычный запрос → 200 OK, тело соответствует одному из серверов.
- TC2: Отключение nginx1 → все запросы идут на nginx2, /stats показывает nginx1 DOWN.
- TC3: Попытка доступа к /stats без авторизации → 401.
- TC4: Проверка логов — записи для каждого запроса появляются в haproxy-access.log.
Полезная методика быстрой настройки (mini‑methodology)
- Подготовьте три сервера и проверьте сеть.
- Настройте hosts для предсказуемых имён.
- Установите и протестируйте Nginx на backend‑ах.
- Установите HAProxy, проверьте конфиг: haproxy -c -f …
- Включите логирование и мониторинг.
- Выполните рабочие тесты и прогон нагрузочного теста.
Краткий глоссарий 1 строкой
- HAProxy — балансировщик и прокси для TCP/HTTP.
- frontend — входящая точка в HAProxy.
- backend — пул серверов для проксирования.
- health check — проверка работоспособности backend.
Когда этот подход не подойдёт
- Нужна L4‑балансировка без анализа HTTP — HAProxy поддерживает, но для простоты можно рассмотреть ipvs/iptables на уровне ядра.
- Требуется сложная балансировка на уровне приложений с сессиями, хранением состояния — может потребоваться sticky‑cookie или внешнее хранилище сессий.
Заключение
HAProxy — лёгкий и производительный выбор для балансировки HTTP/TCP. На CentOS 7 его просто установить из репозитория, настроить базовый HTTP‑балансировщик и мониторинг. Следуйте решётке из резервного копирования конфигов, проверки синтаксиса и постепенных тестов. Добавьте HTTPS, логирование и мониторинг в проде.
Краткое резюме
- HAProxy быстро развернуть и интегрировать с Nginx.
- Для продакшена обязательно включить HTTPS и мониторинг.
- Имеется несколько алгоритмов балансировки — выбирайте по нагрузке.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента