Конфигурация backend, добавление серверов, базовые health checks
Секция
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 checksbackup — резервный сервер (используется когда основные DOWN)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 disabledserver web1 192.168.1.10:8080 checkНазначение: Включает health checks для сервера.
Поведение:
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 секунд до пометки DOWNrise 2 × inter 5s = 10 секунд до восстановленияserver web1 192.168.1.10:8080 check port 8081Назначение: Health check на отдельный порт.
Когда использовать:
server web1 192.168.1.10:8080 check addr 10.0.0.10Назначение: Health check с другого IP.
Когда использовать:
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 раза больше запросов чем web2weight 1server web1 192.168.1.10:8080 maxconn 100Назначение: Максимум соединений с этим сервером.
Поведение:
server web1 192.168.1.10:8080 minconn 10 maxconn 100Назначение: Минимум соединений перед тем как сервер считается «загруженным».
Использование:
balance leastconnminconnbackend 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Назначение: Резервный сервер.
Поведение:
server web1 192.168.1.10:8080 disabledНазначение: Временно исключить сервер из балансировки.
Когда использовать:
Отличие от удаления:
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 добавляет cookieindirect — cookie только от HAProxy к клиентуnocache — добавляет Cache-Control: no-cache для кэшейПоведение:
SERVERID=web1web1server web1 192.168.1.10:8443 check ssl verify required ca-file /etc/haproxy/ca.crtНазначение: SSL соединение с backend.
Параметры:
ssl — использовать SSLverify required — проверять сертификат backendca-file — CA для проверкиcrt — клиентский сертификат (если требуется mutual TLS)server web1 192.168.1.10:8443 check ssl alpn h2,http/1.1Назначение: HTTP/2 с backend.
Когда использовать:
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 — ожидаемый статус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 checkbackend 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 checkbackend db_servers
server db1 192.168.1.10:3306 check
server db2 192.168.1.11:3306 checkПоведение:
backend secure_servers
server web1 192.168.1.10:8443 check ssl verify noneПараметры:
ssl — SSL соединение для health checkverify none — не проверять сертификат (для internal)verify required — полная проверка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Как работает:
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()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# Получить серверы
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/web1backend 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 checkMySQL health check:
option mysql-check — использует MySQL protocoluser haproxy — пользователь для проверки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 checkbackend 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 checkbackend 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.crtbackend определяет пул серверов и правила балансировкиserver с параметром check обязателен для productioninter/fall/rise контролируют чувствительность health checksweight распределяет нагрузку пропорционально мощности серверовbackup серверы используются при отказе основныхИзучим алгоритмы балансировки: roundrobin, leastconn, hash, uri и их применение.
Вопросы ещё не добавлены
Вопросы для этой подтемы ещё не добавлены.