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

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

@potapov_me

Платформа

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

Контент

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

Компания

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

Аккаунт

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

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

·ИП Потапов К.С.·Политика конфиденциальности·
Сделано с ❤️ в России
  1. Backend и серверы
backend_servers

Backend и серверы

Конфигурация backend, добавление серверов, базовые health checks

Backend и серверы HAProxy

Секция backend определяет пул серверов для обработки запросов и правила балансировки между ними.

#Базовая структура backend

backend web_servers balance roundrobin server web1 192.168.1.10:8080 check server web2 192.168.1.11:8080 check server web3 192.168.1.12:8080 check backup

Элементы:

  • balance roundrobin — алгоритм балансировки
  • server web1 ... — определение сервера
  • check — включение health checks
  • backup — резервный сервер (используется когда основные DOWN)

#Директива server

#Базовый синтаксис

server <name> <address>:<port> [parameters]

Примеры:

# Базовый сервер server web1 192.168.1.10:8080 # С health check server web1 192.168.1.10:8080 check # С весом server web1 192.168.1.10:8080 weight 10 # Резервный server web1 192.168.1.10:8080 backup # Отключённый сервер server web1 192.168.1.10:8080 disabled

#Параметры server

#check

server web1 192.168.1.10:8080 check

Назначение: Включает health checks для сервера.

Поведение:

  • HAProxy периодически подключается к серверу
  • При успехе — сервер UP, при неудаче — DOWN
  • DOWN серверы исключаются из балансировки

#inter, fall, rise

server web1 192.168.1.10:8080 check inter 5s fall 3 rise 2

Параметры:

  • inter 5s — интервал между проверками (по умолчанию 2s)
  • fall 3 — количество неудачных проверок для пометки DOWN (по умолчанию 3)
  • rise 2 — количество успешных проверок для пометки UP (по умолчанию 2)

Пример расчёта времени обнаружения:

  • fall 3 × inter 5s = 15 секунд до пометки DOWN
  • rise 2 × inter 5s = 10 секунд до восстановления

#port

server web1 192.168.1.10:8080 check port 8081

Назначение: Health check на отдельный порт.

Когда использовать:

  • Основной порт для трафика, отдельный для health checks
  • Sidecar health check сервис

#addr

server web1 192.168.1.10:8080 check addr 10.0.0.10

Назначение: Health check с другого IP.

Когда использовать:

  • Health checks через management network
  • Разделение трафика и мониторинга

#weight

backend web_servers balance roundrobin server web1 192.168.1.10:8080 weight 10 server web2 192.168.1.11:8080 weight 5

Назначение: Вес сервера при балансировке.

Поведение:

  • web1 получит в 2 раза больше запросов чем web2
  • Отношение весов определяет распределение
  • По умолчанию weight 1

#maxconn

server web1 192.168.1.10:8080 maxconn 100

Назначение: Максимум соединений с этим сервером.

Поведение:

  • Превышение лимита — запросы в очередь
  • Защита сервера от перегрузки
  • Fair sharing между серверами

#minconn

server web1 192.168.1.10:8080 minconn 10 maxconn 100

Назначение: Минимум соединений перед тем как сервер считается «загруженным».

Использование:

  • С balance leastconn
  • Сервер не получает новые запросы пока не достигнет minconn

#backup

backend web_servers server web1 192.168.1.10:8080 check server web2 192.168.1.11:8080 check server web3 192.168.1.12:8080 check backup

Назначение: Резервный сервер.

Поведение:

  • Используется только когда все основные серверы DOWN
  • Автоматическое переключение при восстановлении основных
  • Можно несколько backup серверов (с весами)

#disabled

server web1 192.168.1.10:8080 disabled

Назначение: Временно исключить сервер из балансировки.

Когда использовать:

  • Плановое обслуживание
  • Отладка проблем
  • Постепенный ввод в эксплуатацию

Отличие от удаления:

  • Конфигурация сохраняется
  • Можно быстро включить (через stats socket/API)

#cookie

backend web_servers cookie SERVERID insert indirect nocache server web1 192.168.1.10:8080 check cookie web1 server web2 192.168.1.11:8080 check cookie web2

Назначение: Cookie для session stickiness.

Параметры cookie:

  • insert — HAProxy добавляет cookie
  • indirect — cookie только от HAProxy к клиенту
  • nocache — добавляет Cache-Control: no-cache для кэшей

Поведение:

  • Клиент получает cookie SERVERID=web1
  • Следующие запросы с cookie идут на web1

#ssl

server web1 192.168.1.10:8443 check ssl verify required ca-file /etc/haproxy/ca.crt

Назначение: SSL соединение с backend.

Параметры:

  • ssl — использовать SSL
  • verify required — проверять сертификат backend
  • ca-file — CA для проверки
  • crt — клиентский сертификат (если требуется mutual TLS)

#alpn

server web1 192.168.1.10:8443 check ssl alpn h2,http/1.1

Назначение: HTTP/2 с backend.

Когда использовать:

  • Backend поддерживает HTTP/2
  • gRPC сервисы (требуют HTTP/2)

#Health Checks

#HTTP health check

backend web_servers option httpchk GET /health http-check expect status 200 server web1 192.168.1.10:8080 check

Параметры:

  • option httpchk GET /health — HTTP GET запрос
  • http-check expect status 200 — ожидаемый статус

#HTTP check с заголовками

backend web_servers option httpchk GET /health http-check send-verbal http-check send-hdr Host "api.example.com" http-check send-hdr User-Agent "HAProxy Health Check" http-check expect status 200 server web1 192.168.1.10:8080 check

#HTTP check с body

backend web_servers option httpchk POST /health http-check send-verbal http-check send-body '{"check": true}' http-check expect status 200 server web1 192.168.1.10:8080 check

#TCP health check

backend db_servers server db1 192.168.1.10:3306 check server db2 192.168.1.11:3306 check

Поведение:

  • HAProxy пытается установить TCP соединение
  • Успех = соединение установлено
  • Неудача = connection refused/timeout

#SSL health check

backend secure_servers server web1 192.168.1.10:8443 check ssl verify none

Параметры:

  • ssl — SSL соединение для health check
  • verify none — не проверять сертификат (для internal)
  • verify required — полная проверка

#Agent Checks

backend web_servers server web1 192.168.1.10:8080 check agent-check agent-port 9999 server web2 192.168.1.11:8080 check agent-check agent-port 9999

Как работает:

  • HAProxy подключается на порт 9999
  • Агент возвращает статус: UP, DOWN, DRAIN, MAINT
  • Можно динамически управлять состоянием сервера

Пример агента (Python):

from http.server import HTTPServer, BaseHTTPRequestHandler class HealthHandler(BaseHTTPRequestHandler): def do_GET(self): self.send_response(200) self.end_headers() self.wfile.write(b"UP\n") HTTPServer(('0.0.0.0', 9999), HealthHandler).serve_forever()

#Dynamic Server Management

#Stats socket

global stats socket /var/run/haproxy/admin.sock mode 660 level admin backend web_servers server web1 192.168.1.10:8080 check server web2 192.168.1.11:8080 check

Команды:

# Отключить сервер echo "disable server web_servers/web1" | socat /var/run/haproxy/admin.sock stdio # Включить сервер echo "enable server web_servers/web1" | socat /var/run/haproxy/admin.sock stdio # Изменить вес echo "set server web_servers/web1 weight 50" | socat /var/run/haproxy/admin.sock stdio # Показать статус echo "show servers state" | socat /var/run/haproxy/admin.sock stdio

#Dataplane API

# Получить серверы curl http://localhost:5555/services/haproxy/configuration/backends/web_servers/servers # Отключить сервер curl -X PUT \ -H "Content-Type: application/json" \ -d '{"name": "web1", "disabled": true}' \ http://localhost:5555/services/haproxy/configuration/backends/web_servers/servers/web1

#Backend для разных протоколов

#MySQL

backend mysql_servers mode tcp balance leastconn option mysql-check user haproxy server db1 192.168.1.10:3306 check server db2 192.168.1.11:3306 check

MySQL health check:

  • option mysql-check — использует MySQL protocol
  • user haproxy — пользователь для проверки

#PostgreSQL

backend pg_servers mode tcp balance leastconn option pgsql-check user haproxy server db1 192.168.1.10:5432 check server db2 192.168.1.11:5432 check

#Redis

backend redis_servers mode tcp balance leastconn option tcp-check tcp-check send PING\r\n tcp-check expect string +PONG server redis1 192.168.1.10:6379 check server redis2 192.168.1.11:6379 check

#Full Backend Example

backend api_servers # Балансировка balance leastconn # HTTP health check option httpchk GET /health http-check expect status 200 http-check expect hdr Content-Type -m json # Таймауты timeout connect 5s timeout server 30s # Серверы server api1 192.168.1.10:8080 check inter 5s fall 3 rise 2 weight 10 maxconn 100 server api2 192.168.1.11:8080 check inter 5s fall 3 rise 2 weight 10 maxconn 100 server api3 192.168.1.12:8080 check inter 5s fall 3 rise 2 weight 5 maxconn 50 backup # SSL к backend # server api1 192.168.1.10:8443 check ssl verify required ca-file /etc/haproxy/ca.crt

Далее: Алгоритмы балансировки