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

tcp_tw_reuse и tcp_tw_recycle не работают в определенной среде

Мы запускаем HAProxy, чтобы направлять трафик mysql с PHP на набор серверов mysql. Однако из-за проблемы с тем, как mysql-client отправляет TCP-пакеты, мы получаем тонну соединений в ВРЕМЯ ЖДЕТ с участием одновременное использование портов при 50k +, и заканчиваются сообщениями SOCKERR на HAProxy из-за исчерпания порта при чрезвычайно большой нагрузке, как описано здесь - http://blog.haproxy.com/2012/12/12/haproxy-high-mysql-request-rate-and-tcp-source-port-exhauration/

В статье выше предлагается включить tcp_tw_reuse и tcp_tw_recycle на сервере HAProxy, что мы сделали в одной тестовой среде, и это практически решило нашу проблему и сохранило соединения TIME_WAIT ниже 1000 при большой нагрузке. Однако этого нельзя сказать о другой среде, которая у нас есть, где мы также включили эти две настройки TCP - TIME_WAIT по-прежнему высокий, а использование порта по-прежнему 50k +.

Обе среды находятся на одном ядре, одной и той же версии haproxy, и мы не можем понять, что может способствовать этой конкретной среде, не принимая tcp_tw_reuse и tcp_tw_recycle изменения.

В обеих средах мы расширили port_range до 1024-65535. Это на CentOS 6.4.

Пожалуйста, помогите - мы тут кружим головы, и если вам понадобится дополнительная информация, я могу предоставить. Спасибо.

Нашел первопричину. tcp_timestamps должен быть включен на локальном сервере, а также на любом исходящем сервере, который вы пытаетесь достичь. tcp_tw_reuse и tcp_tw_recycle зависят от tcp_timestamps, чтобы определить, какие порты использовать повторно. Посмотри это - http://vincent.bernat.im/en/blog/2014-tcp-time-wait-state-linux.html