Итак, у меня возникли проблемы с балансировкой нагрузки 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 (поэтому и с веб-сокетами, и без них одно и то же)