Назад | Перейти на главную страницу

Таймауты соединения LVS TCP - затяжные соединения

Я использую keepalived для балансировки нагрузки между несколькими TCP-серверами. Я не думаю, что это имеет значение, но в данном случае это rabbitmq. Я использую балансировку типа NAT с взвешенным циклическим перебором.

Клиент подключается к серверу таким образом:

[client]-----------[lvs]------------[real server]
            a                b

Если клиент подключается к LVS и остается бездействующим, ничего не отправляя в сокет, это в конечном итоге истекает в соответствии с таймаутом, установленным с помощью ipvsadm --set. В этот момент соединение, помеченное буквой «a» выше, правильно исчезает с вывода netstat -anp на клиенте, а из вывода ipvsadm -L -n -c на коробке лвс. Однако соединение «b» остается УСТАНОВЛЕННЫМ согласно netstat -anp на реальном сервере.

Почему это? Могу ли я заставить lvs правильно сбросить соединение с реальным сервером?

Вы можете использовать команду --set, чтобы уменьшить время ожидания.

/sbin/ipvsadm --set 3600 120 300

Или дать haproxy попытка.

У вас включено постоянное соединение? Тайм-аут постоянного соединения можно установить с помощью -p [timeout]

Это сохраняет соединение b активным для маршрутизации дальнейших запросов с клиентского IP на тот же реальный сервер.