Re: Проксирывание и tcp стек.

Maxim Dounin mdounin на mdounin.ru
Пт Дек 24 15:16:15 MSK 2010


Hello!

On Fri, Dec 24, 2010 at 10:18:26AM +0300, duke wrote:

> Добрый день!
> 
> На днях получил забавный опыт.
> Есть сайт который надо было тупо запросксирывать и балансирывать загрузку
> между 6 бекэндами.
> При этом вознкла такая проблема: в логах стречались очень частые таймауты,
> при этом нагрузка на бекэнды была не вилика.
> Все запросы шли с одного ип до бекэнодов.
> 
> Для диагностики сетети (неизвестно что было межу серверами), я пробывал
> утилитой hping устанавливать соеденение с одним из бекэндов, ответ от
> которго меня часто удивлял.
> То есть я отпарляю tcp пакет с флагом SYN... и как сложилось по традиции жду
> в ответ SYN ACK. Но внезапно в ответ получаю что то типа ответа от веб
> сервера (запроса самого еше и небыло, tcp флаги в ответе например "ACK FIN
> PUSH" либо еше какие отличные от "SYN ACK"). То есть явно я угодил в "чужую"
> tcp сессию. Это повторялось часто, причем были и нормальные tcp хендшейки но
> через раз два.

Если я правильно понимаю что делает hping (отправляет произвольные 
пакеты с какими скажешь параметрами миную tcp-стек системы, и 
слушает произвольные ответы через bpf/pcap), то ничего 
удивительного в полученном результате нет.  Вы отправили пакет, а 
какой-то пролетающий мимо чужой пакет приняли за ответ.

> net.ipv4.ip_local_port_range уже подкрутили....
> 
> Может есть у кого идеи что еше можно сделать?

1. Если несмотря на увеличение port range локальных портов всё 
равно не хватает - включить reuse/recycle для соединений в 
TIME_WAIT.

2. Убедиться, что между фронтендом и бекендами не установлен 
statefull firewall.  Если установлен - убрать или добавить исключение 
чтобы соединения frontent -> backend проходили через firewall без 
создания state'ов.  В самом крайнем случае - убедиться, что 
state'ов достаточно, и сильно уменьшить таймауты для TIME_WAIT.

Ну и смотреть внимательно где ещё чего не хватает и что тормозит, 
параллельно читая документацию по тюнингу вашей операционной 
системы.

Maxim Dounin



Подробная информация о списке рассылки nginx-ru