Как настроить HAProxy и ОС для обработки 30к запросов/секунду?
Добрый день!
Имеется две площадки:
1. jMeter (50 нод + управляющая);
2. HAProxy -> 6 нод с веб-серверами;
Площадки находятся в разных регионах страны, на обоих есть канал - 1 Гбит\сек.
jMeter используется для имитации однотипного действия - 10 шагов для заполнения формы (получение статики, справочников, отправка формы в виде json-запроса). Выставлены примитивные Assertions на respone. С каждой ноды запускается по 300 "пользователей", заполняющих форму дважды. Итого получаем 50 х 300 х 10 х 2 = 300к запросов.
HAProxy, как мне кажется, не испытывает особых сложностей, ибо в начале теста ЦП грузится, но практически сразу нагрузка падает.
Используется Ubuntu 18.04 Server LTS.
Тесты показывают (как в HTTP, так и в TCP режиме), что первые запросы обрабатываются достаточно быстро, примерно 12к запросов\сек, при среднем времени отклика 0,5 сек. А дальше начинается беда, как я предполагаю, на сетевом уровне - я грешу на нехватку свободных портов, ибо в ОС TIME_WAIT длится 60 секунд. И если сопоставить время "залипания" результатов jMeter и немногочисленных Connection Refused, получается, что во время теста исчерпывается лимит пула соединений, он переходит в состояние TIME_WAIT и клиенты ждут пока "не освободится место".
Я пробовал использовать Round Robin, но на площадке всего один канал и HAProxy сидит за NAT.
Технических деталей не прикладываю, ибо пока не "устаканил" конфигурацию.
Буду рад любой рекомендации.
MR27, благодарю Вас за помощь.
Как я понял, начиная с версии ядра 3.9 SO_REUSEPORT включена (на серверах используется 4.15), а сам HAProxy из коробки её использует.
Плюс всегда использовали net.ipv4.tcp_tw_reuse = 1, но в 4.12 она вроде как depricated.
Я третий год использую nbproc + cpu-map, как я понимаю это можно отнести к мультиплицированию или нет? Т. е. поверх одного порта поднимается несколько процессов HAProxy, которые обслуживают запросы.
Объясните на примерах пожалуйста, если я ошибаюсь.
Олег Тараканов, возможно, нужно запускать несколько экзепляров HAProxy, чтобы задействовать разделение сокетов.
На другом софте, что я видел с этой технологией, по крайней мере, это так - несколько экзепляров ПО нужно было чтобы её задействовать.
MR27, для этого я использую пару лет опцию nbproc + cpu-map, которая решает данную задачу. Взял перерыв на пару дней, сегодня продолжу эксперименты.
Обязательно сообщу о результате. Спасибо!