Ответ
Keepalive в HAProxy — это механизм поддержания долгоживущих TCP-соединений между клиентом и балансировщиком, а также между балансировщиком и бэкенд-серверами. Это позволяет переиспользовать одно установленное соединение для нескольких HTTP-запросов, что значительно снижает накладные расходы.
Как это работает:
- Клиент устанавливает TCP-соединение с HAProxy.
- После обработки первого HTTP-ответа соединение не разрывается, а переходит в пул keepalive-соединений.
- Следующий запрос от того же клиента использует это же соединение, избегая затрат на повторный 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-соединения не удерживали ресурсы неограниченно долго.