HAProxy + Socket.IO + TornadIO Постоянные отключения при пульсации

Итак, у меня возникли проблемы с балансировкой нагрузки socket.io на порту 8888 с использованием HAProxy. Моя настройка: NGINX прослушивает порт 80 и балансирует нагрузку между экземплярами веб-сервера Tornado, работающими на порту 80. Затем на том же балансировщике нагрузки у меня есть экземпляр HAProxy, который прослушивает порт 8888 и перенаправляет запросы на ДРУГИЕ компьютеры в сети, где размещается TornadIO. экземпляры сервера также работают на 8888. Соединение работает первые 30 секунд или около того, а затем начинает многократно отключаться/переподключаться. Важно отметить, что кажется, что он прерывается при первой попытке сердцебиения ... является ли сердцебиение другим протоколом, с которым у HAProxy могут возникнуть проблемы, в отличие от первой попытки подключения / обмена первыми несколькими сообщениями?

Интересно, что этого НЕ ПРОИСХОДИТ, когда экземпляр tornadIO работает на том же компьютере, что и балансировщик нагрузки, даже с работающим HAProxy (но подключается к порту 8888 и, скажем, экземпляр tornadIO к порту 9000).

Важно отметить, что TornadIO не выдает никаких исключений или каких-либо расстроенных выходных данных в течение всего этого процесса, показывая, что это не код моего сервера, а что-то на уровне прокси?

Да будет также известно, что я использую RabbitMQ для синхронизации всех кластеров TonadIO, хотя я не думаю, что это имеет значение (и HAProxy не касается Rabbit).

Вот моя настройка HAProxy:

global
    daemon
    maxconn 256

defaults
    mode http
    timeout connect 5000ms
    timeout client 50000ms
    timeout server 50000ms

listen http-in
    balance roundrobin
    option forwardfor # This sets X-Forwarded-For
    timeout queue 5000
    timeout server 86400000
    timeout connect 86400000
    bind *:8888
    server server1 18.181.3.164:8888 # ether1

В моей конфигурации nginx я вставил:

location ~* \.(eot|ttf|woff)$ {
            add_header Access-Control-Allow-Origin *;
        }

чтобы убедиться, что это не проблема контроля доступа (консоль не говорит, что это так, поэтому этого не должно быть).

Я также попытался добавить

option http-server-close
option http-pretend-keepalive

в мою конфигурацию HAProxy, но безрезультатно.

Есть идеи?

** Я тестирую в Chrome 9.0.597 и Firefox 3.6 (поэтому и с веб-сокетами, и без них одно и то же)


person Ilya    schedule 09.03.2011    source источник
comment
какие-нибудь решения проблемы @Ilya? Я собираюсь использовать очень похожую установку в ближайшем будущем. Какие-либо предложения ?   -  person Bahadir Cambel    schedule 17.12.2011


Ответы (1)


Я не знаю других компонентов, участвующих в этой настройке, но в последний раз, когда я проверял (несколько месяцев назад), nginx еще не поддерживал HTTP-механизм Upgrade+101, который используется WebSocket. Так что, может быть, ваш тест работает, пока соединение не будет обновлено? Вы обязательно должны включить регистрацию на haproxy, вы будете знать, где закрыты соединения и почему. Кстати, обновление до 1.4.13 решит несколько проблем с ведением журнала, что поможет вам с большей уверенностью устранять неполадки.

person Willy Tarreau    schedule 14.03.2011
comment
не в том ли дело, что @Ilya использует HAProxy для tornadio, чтобы Nginx не прослушивал подключения на порту 8888 (поскольку он не поддерживает подключения HTTP 1.1 к обратным прокси-процессам). - person Bahadir Cambel; 17.12.2011