Что такое Keepalive в HAProxy?

«Что такое Keepalive в HAProxy?» — вопрос из категории Веб-серверы и балансировка, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Keepalive в HAProxy — это механизм поддержания долгоживущих TCP-соединений между клиентом и балансировщиком, а также между балансировщиком и бэкенд-серверами. Это позволяет переиспользовать одно установленное соединение для нескольких HTTP-запросов, что значительно снижает накладные расходы.

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

  1. Клиент устанавливает TCP-соединение с HAProxy.
  2. После обработки первого HTTP-ответа соединение не разрывается, а переходит в пул keepalive-соединений.
  3. Следующий запрос от того же клиента использует это же соединение, избегая затрат на повторный TCP handshake и SSL/TLS negotiation (если используется).

Пример конфигурации для HTTP:

frontend http_front
    bind *:80
    mode http
    option http-keep-alive          # Включает keepalive для клиентов
    timeout http-keep-alive 60s     # Время жизни keepalive-соединения

backend web_servers
    mode http
    option http-keep-alive          # Включает keepalive для соединений с бэкендами
    server web1 10.0.1.10:80 check
    server web2 10.0.1.11:80 check

Практические преимущества, которые я наблюдал:

  • Снижение задержки (Latency): Устранение накладных расходов на установку соединения для каждого запроса.
  • Уменьшение нагрузки на CPU: Меньше операций шифрования/дешифрования при использовании HTTPS.
  • Сокращение числа соединений в состояниях TIME_WAIT на серверах, что экономит ресурсы сокетов.

Важный нюанс: Необходимо правильно настраивать таймауты (timeout client, timeout server), чтобы keepalive-соединения не удерживали ресурсы неограниченно долго.