Базовая настройка
Мы запускаем HAProxy в паре коробок PFsense. Спереди мы обслуживаем кучу IP-адресов, и для каждого IP-адреса у нас есть пара SSL-разгрузчиков за этим.
HAProxy используется для балансировки нагрузки между ними. Конфигурация примерно такая:
frontend FOO_FRONT_80
bind 5.5.5.5:80 name 5.5.5.5:80 transparent
mode tcp
log global
maxconn 10000
timeout client 30000
use_backend FOO_BACK_80
backend FOO_BACK_80
mode tcp
log global
option log-health-checks
balance source
timeout connect 30000
timeout server 30000
retries 3
source ipv4@ usesrc clientip
server FOO_LB_001 10.0.0.21:80 check inter 10000 weight 100
server FOO_LB_002 10.0.0.22:80 check inter 10000 weight 100
Это обслуживает несколько десятков тысяч одновременных подключений.
Вот фотография:
Проблемы
Все обычные запросы GET к балансировщикам нагрузки проходят нормально. Но запросы POST (все, что имеет тело запроса > 50 кбайт) не проходят, поскольку соединение, по-видимому, разрывается между HAProxy и бэкэнд-апачами.
В лабораторной среде нам не удалось воспроизвести это. Но в производстве эти проблемы исчезли, когда мы отключили прозрачную настройку клиентского IP.
Сейчас мы пытаемся выяснить, что может быть причиной этого. Может ли это быть большой (сомневаюсь) или это какая-то неправильная конфигурация где-то (где?).
Любая помощь будет высоко оценена.
рубен