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

Балансировщик нагрузки уровня 4 перед многими интерфейсами apache, обслуживающими серверные части Tomcat, которые могут дать сбой

у меня есть установка с:

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 выполняется, то он будет извлечен из бассейна. Он будет добавлен обратно, когда снова ответит нормально.