Гид по технологиям

HAProxy на CentOS 7: установка и настройка

• 6 min read • DevOps • Обновлено 23 Nov 2025
HAProxy на CentOS 7: установка и настройка
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

  1. На loadbalancer обновите систему и установите HAProxy:
ssh [email protected]
sudo yum -y update
sudo yum -y install haproxy
  1. Сделайте резервную копию оригинального конфига и создайте новый:
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

Сохраните файл.

  1. Настройте 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
  1. Перезапустите 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

  1. На каждом nginx:
ssh [email protected]
ssh [email protected]

sudo yum -y install epel-release
sudo yum -y install nginx
  1. Измените индексную страницу, чтобы отличать сервера:
# на 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'
  1. Запустите и включите автозапуск:
sudo systemctl enable nginx
sudo systemctl start nginx

Откройте порт 80, если нужно:

sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --reload

Шаг 4 — проверка работоспособности

  1. Проверка из браузера: откройте http://192.168.1.102

  2. Проверка с помощью curl:

curl 192.168.1.102

Результат запроса curl к IP балансировщика

Откройте панель мониторинга HAProxy:

http://192.168.1.102:8080/stats (логин/пароль howtoforge:howtoforge)

Панель статистики HAProxy (порт 8080)

Если при обращении 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).

Руководство по устранению неисправностей

  1. Нет ответа по 80 на балансировщике:

    • Проверить systemctl status haproxy
    • haproxy -c -f /etc/haproxy/haproxy.cfg
    • firewall-cmd –list-all
  2. Серверы backend отмечены как DOWN:

    • Убедиться, что nginx слушает на 80
    • Проверить option httpchk (HEAD /) — Nginx должен возвращать 200
    • Посмотреть логи /var/log/haproxy-info.log и /var/log/haproxy-access.log
  3. Неверные права на сокет/пользователь 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)

  1. Подготовьте три сервера и проверьте сеть.
  2. Настройте hosts для предсказуемых имён.
  3. Установите и протестируйте Nginx на backend‑ах.
  4. Установите HAProxy, проверьте конфиг: haproxy -c -f …
  5. Включите логирование и мониторинг.
  6. Выполните рабочие тесты и прогон нагрузочного теста.

Краткий глоссарий 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 и мониторинг.
  • Имеется несколько алгоритмов балансировки — выбирайте по нагрузке.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро