Я пытаюсь запустить haproxy перед tomcat в системе Solaris x86, но периодически возникают сбои. С кажущимися случайными интервалами запрос просто зависает, пока haproxy не истечет время ожидания соединения.
Я подумал, что, может быть, это мое приложение, но я смог воспроизвести его с помощью приложения диспетчера tomcat, и при прямом нажатии на tomcat проблем не возникает.
Повторное нажатие на него с помощью curl вызовет ошибку в течение 10-15 попыток.
curl -ikL http://admin:admin@<my server>:81/manager/status
haproxy работает на порту 81, tomcat на порту 7000. haproxy возвращает клиенту тайм-аут шлюза 504 и помещает его в файл журнала:
Sep 7 21:39:53 localhost haproxy[16887]: xxx.xxx.xxx.xxx:65168 [07/Sep/2009:21:39:23.005] http_proxy http_proxy/tomcat7000 5/0/0/-1/30014 504 194 - - sHNN 0/0/0/0/0 0/0 "GET /manager/status HTTP/1.1"
Tomcat ничего не показывает, никаких ошибок в журналах и никаких указаний на то, что запрос когда-либо попадал на сервер Tomcat. Счетчик запросов не увеличивается, приложение-менеджер показывает активность только в одном потоке, обслуживая приложение-менеджер.
Вот мои настройки коннектора haproxy и tomcat, я много играл с обоими, пытаясь решить проблему, поэтому они могут быть не идеальными, но они определенно не кажутся такими, как будто они должны вызывать эту ошибку.
server.xml
<Connector
port="7000" protocol="HTTP/1.1"
enableLookups="false" maxKeepAliveRequests="1"
connectionLinger="10"
/>
конфигурация haproxy
global
log loghost local0
chroot /var/haproxy
listen http_proxy :81
mode http
log global
option httplog
option httpclose
clitimeout 150000
srvtimeout 30000
contimeout 3000
balance roundrobin
cookie SERVERID insert
server tomcat7000 127.0.0.1:7000 cookie server00 check inter 2000
Я подозреваю, что ваш Tomcat делает паузу для полной сборки мусора, поэтому он не отвечает и ничего не регистрирует. Видеть Вот для получения дополнительной информации по этой проблеме.
Что ж, вам следует запустить tcpdump между haproxy и netcat, чтобы выяснить, что происходит. Haproxy говорит, что не получил ответа, что можно опровергнуть, но очевидно, что он подключился и отправил запрос, иначе он не может ждать заголовка. Тот факт, что tomcat не видит никаких входящих запросов, вызывает беспокойство, потому что, по крайней мере, я мог бы принять ошибку на haproxy, вызывающую тайм-аут ответа, но здесь мы говорим, что tomcat не имеет причин отвечать, потому что он не считает это получил запрос. Либо есть ошибка в самом tomcat, либо что-то странное в вашей сети (два сервера на одном IP?), Потому что, по крайней мере, он должен сообщить вам, что получил соединение и запрос! Tcpdump легко с этим справится. Кроме того, на какой версии haproxy вы работаете? в версиях между 1.3.16 и 1.3.19 было несколько проблем, среди которых случайный тайм-аут, возникающий в последнем пакете ответа (но здесь tomcat говорит, что он не ответил, но в любом случае лучше все исправить).
Вилли
Если вы включите сервер статистики haproxy, дополнительная информация может помочь вам отладить