у меня есть установка с:
HAProxy действует как LB уровня 4 (просто пересылка запросов, сквозная передача, режим TCP для всех интерфейсов / бэкэндов) на несколько интерфейсов Apache. Каждый из этих интерфейсов apache отправляет трафик на серверную часть tomcat, на которой работает приложение.
Теперь, если одно из этих котов / приложений выходит из строя, соответствующий интерфейс apache сообщает об ошибке 503 (что нормально), другие в порядке.
проблема: поскольку HAProxy просто случайным образом балансирует нагрузку на каждый Apache (на основе исходного IP-адреса в моем случае), некоторые пользователи получают ошибку 503 (указывая на то, что tomcat не работает), в то время как другие работают (указывая на tomcat, который в порядке )
есть ли способ каким-либо образом это обнаружить? (и убедитесь, что пользователи перенаправляются только на работающий интерфейс / серверную часть)
Полагаю, я ничего не могу сделать на стороне HAproxy, поскольку HAproxy перенаправляет на серверные части "Apache" (и сообщает о них, что они исправны, поскольку порт 443 в порядке) и не видит настоящих серверных модулей (серверы tomcat). Я полагаю, мне нужно что-то сделать на интерфейсах apache (например, «если есть 503, остановите apache» или что-то в этом роде).
есть идеи, как с этим справиться?
Спасибо !
ps: дайте мне знать, если вы хотите увидеть конфигурацию
Вам необходимо определить проверку работоспособности для ваших серверных ВМ.
Найдите простой запрос, который Tomcat может обработать, не вызывая слишком больших накладных расходов на обработку; вообще что-то вроде /img/empty.gif
будет использоваться. Дело в том, что это можно проверить, чтобы получить статус HTTP 200, когда tomcat запущен и работает, и некоторую другую ошибку, когда tomcat не работает.
Измените свой haproxy.conf:
listen app1 0.0.0.0:8080
mode http
option httpchk GET /img/empty.gif HTTP/1.0
http-check expect status 200
server backend1 10.0.0.1:443 check fall 3 rise 2 ssl verify none
server backend2 10.0.0.2:443 check fall 3 rise 2 ssl verify none
Вам нужно добавить option httpchk
и http-check
линий, я полагаю, у вас уже есть check
в server
линия.
Если сервер не отвечает со статусом 200, когда httpchk
выполняется, то он будет извлечен из бассейна. Он будет добавлен обратно, когда снова ответит нормально.