Перейти к основному контенту
Tech Path Finder
КурсыИнтервьюКод-ревьюБлог
Tech Path Finder

Персонализированный путеводитель в IT. Квизы, мок-интервью, код ревью и аналитика прогресса.

@potapov_me

Платформа

  • Курсы
  • Прогресс
  • Мок-интервью
  • Код ревью
  • Живое ревью с ИИ
  • Тренажёр переговоров
  • Закладки

Контент

  • Блог
  • Главная
  • Обратная связь

Компания

  • О проекте
  • Тарифы
  • Условия использования
  • Конфиденциальность
  • Согласие на обработку данных
  • Cookie
  • Реквизиты

Аккаунт

  • Войти
  • Зарегистрироваться
  • Профиль

© 2026 Tech Path Finder. Все права защищены.

·ИП Потапов К.С.·Политика конфиденциальности·
Сделано с ❤️ в России
  1. Установка и первый запуск
installation_setup

Установка и первый запуск

Установка на Debian/Ubuntu, Docker-контейнер, базовая конфигурация, проверка работы

Установка и первый запуск HAProxy

Правильная установка — фундамент стабильной работы. Рассмотрим все способы: от apt до Docker.

#Способы установки

#Установка на Debian/Ubuntu

# Добавляем репозиторий HAProxy (актуальная версия) sudo add-apt-repository ppa:vbernat/haproxy-2.8 sudo apt update # Устанавливаем HAProxy sudo apt install haproxy # Проверяем версию haproxy -v

Вывод:

HAProxy version 2.8.5-1ubuntu1~jammy 2024/01/20
Copyright 2000-2024 Willy Tarreau <willy@haproxy.org>

Структура после установки:

/etc/haproxy/
├── haproxy.cfg          # Основной конфиг
├── certs/               # SSL сертификаты
└── errors/              # Кастомные страницы ошибок

/var/log/haproxy/        # Логи (если настроены)
/var/run/haproxy/        # PID файл, stats socket

#Установка через Docker

docker run -d \ --name haproxy \ -p 80:80 \ -p 443:443 \ -p 8404:8404 \ -v $(pwd)/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro \ -v $(pwd)/certs:/etc/haproxy/certs:ro \ haproxy:2.8

Проверка:

docker logs haproxy docker exec haproxy haproxy -c -f /usr/local/etc/haproxy/haproxy.cfg

#Установка через Helm (Kubernetes)

# Добавляем репозиторий helm repo add haproxy https://haproxy-ingress.github.io/charts/haproxy-ingress helm repo update # Устанавливаем helm install haproxy-ingress haproxy/haproxy-ingress \ --namespace ingress-nginx \ --create-namespace

#Первый конфиг

Создадим минимальную конфигурацию для балансировки HTTP трафика между двумя веб-серверами.

#Базовый haproxy.cfg

global log /dev/log local0 maxconn 4096 daemon defaults log global mode http option httplog timeout connect 5s timeout client 30s timeout server 30s frontend http_front bind *:80 default_backend web_servers backend web_servers balance roundrobin server web1 192.168.1.10:8080 check server web2 192.168.1.11:8080 check

#Разбор конфигурации

global — настройки всего процесса HAProxy:

  • log /dev/log local0 — отправка логов в syslog
  • maxconn 4096 — максимум соединений для всего процесса
  • daemon — запуск в фоновом режиме

defaults — настройки по умолчанию для всех frontend/backend:

  • mode http — HTTP режим (Layer 7)
  • timeout connect 5s — время на установку соединения с backend
  • timeout client 30s — время ожидания клиента
  • timeout server 30s — время ожидания ответа от backend

frontend — точка входа для клиентов:

  • bind *:80 — слушать порт 80 на всех интерфейсах
  • default_backend web_servers — направлять все запросы на этот backend

backend — пул серверов:

  • balance roundrobin — циклическое распределение
  • server web1 ... check — сервер с health check

#Проверка конфигурации

Перед запуском всегда проверяйте синтаксис:

# Проверка синтаксиса sudo haproxy -c -f /etc/haproxy/haproxy.cfg # Вывод при успехе: # Configuration file is valid

Частые ошибки:

[ALERT]    (12345) : parsing [/etc/haproxy/haproxy.cfg:15] :
  error detected while parsing an 'option httpchk' directive :
  missing HTTP method or URI.

Исправление:

# Неправильно: option httpchk # Правильно: option httpchk GET /health

#Запуск и перезапуск

#Systemd (Linux)

# Старт sudo systemctl start haproxy # Перезапуск (полный) sudo systemctl restart haproxy # Reload (мягкий, zero-downtime) sudo systemctl reload haproxy # Статус sudo systemctl status haproxy # Включить автозагрузку sudo systemctl enable haproxy

#Docker

# Перезапуск контейнера docker restart haproxy # Reload конфигурации (если примонтирован конфиг) docker kill -s HUP haproxy

#Проверка работы

#curl тест

# Запрос к HAProxy curl -v http://localhost/ # Ожидаемый ответ: # < HTTP/1.1 200 OK # < server: HAProxy/2.8.5

#Проверка backend серверов

# Статус серверов через stats socket echo "show servers state" | sudo socat /var/run/haproxy/admin.sock stdio # Вывод: # 0:web1(192.168.1.10:8080) UP # 0:web2(192.168.1.11:8080) UP

#Stats страница

Добавим встроенную страницу статистики:

listen stats bind *:8404 stats enable stats uri / stats refresh 5s stats admin if LOCALHOST

Открываем в браузере: http://your-server:8404/

Что показывает stats страница:

  • Статус backend серверов (UP/DOWN)
  • Количество запросов в секунду
  • Время ответа (avg, min, max)
  • Активные соединения
  • Ошибки (4xx, 5xx)

#Логирование

#Настройка rsyslog

Создадим /etc/rsyslog.d/49-haproxy.conf:

# HAProxy логи
local0.* /var/log/haproxy.log

# Отключаем дублирование в syslog
& stop

Перезапуск rsyslog:

sudo systemctl restart rsyslog

Просмотр логов:

tail -f /var/log/haproxy.log

Пример лога:

Jan 15 10:23:45 haproxy[1234]: 192.168.1.100:54321 [15/Jan/2024:10:23:45.123]
  http_front web_servers/web1 0/0/1/15/16 200 1234 - - ---- 1/1/0/0/0 0/0 "GET /api/users HTTP/1.1"

Формат лога:

  • 192.168.1.100:54321 — клиент
  • http_front — frontend
  • web_servers/web1 — backend/сервер
  • 0/0/1/15/16 — тайминги (connect, queue, response, total)
  • 200 — статус ответа
  • GET /api/users — запрос

#Troubleshooting при запуске

#HAProxy не стартует

# Проверка логов sudo journalctl -u haproxy -f # Частая причина: порт уже занят sudo netstat -tlnp | grep :80

#Backend серверы DOWN

# Проверка доступности серверов curl http://192.168.1.10:8080/health # Проверка firewall sudo ufw status # Проверка логов HAProxy tail -f /var/log/haproxy.log

#Ошибка bind: Cannot assign requested address

# Неправильно: bind 192.168.1.999:80 # несуществующий IP # Правильно: bind *:80 # все интерфейсы # или bind 192.168.1.10:80 # конкретный IP

#Production checklist

  • Конфигурация проверена: haproxy -c
  • Логирование настроено (rsyslog)
  • Stats страница доступна (только internal network)
  • Health checks настроены для всех серверов
  • Таймауты установлены адекватно нагрузке
  • maxconn соответствует возможностям сервера
  • Firewall настроен (только нужные порты)
  • Включён автозапуск (systemctl enable)

Далее: Глобальные директивы