Может ли веб-приложение Tomcat сообщить балансировщику нагрузки, что его Tomcat не работает?

1

У меня есть два сервера Tomcat, развернутые за балансиром нагрузки Nginx, который использует proxy_pass для маршрутизации запросов. Это хорошо работает, но в моем приложении теперь используется прецедент, для которого мне нужно вытащить один из серверов из кластера (но продолжайте его работу), иметь на нем веб-приложение, что-то сделать, и когда это произойдет, Tomcat назад.

Прямо сейчас я перезагружаю конфигурацию Nginx вручную и отмечаю сервер down чтобы дать время, чтобы приложение выполнило свою задачу, но мне хотелось бы, чтобы у веб-приложения "трюк" Nginx, что его сервер Tomcat не работает, , затем присоединитесь к кластеру.

Я думаю, что мне нужно иметь какой-то пользовательский Tomcat Connector, который контролируется веб-приложением, но все в Интернете - это проксирование с помощью Apache или использование AJP, и это не то, что мне нужно, мне нужно, чтобы это был HTTP-прокси с Nginx.

У кого-нибудь есть некоторые указания на то, как я могу это сделать?

Теги:
nginx
tomcat
reverse-proxy
load-balancing

2 ответа

0

Когда tomcat опустится, ваш webapp пойдет с ним - вы не должны полагаться на него, чтобы выполнить какую-либо значимую работу, чтобы задержать завершение работы. Скорее имеют правильные процедуры управления системами, чтобы сначала изменить LB, а затем закрыть tomcat. Это решение, внешнее по отношению к tomcat, - и должно быть легко, как вы говорите, что вы вытаскиваете из своего кластера один из кошек.

Для незапланированных простоев используйте LB-детектирование того, что tomcat не работает, как описано @mikhailov.

  • 0
    Я не хочу останавливать Tomcat, это подвох. Я хочу, чтобы он оставался в рабочем состоянии, но приложение сообщило Nginx, что Tomcat недоступен. Я отредактировал вопрос, чтобы сделать его более понятным.
  • 0
    ИМХО, веб-приложение не несет ответственности за настройку своего балансировщика нагрузки - это скорее часть базовой системы системного администрирования (как вы запускаете nginx? Меняете его конфигурацию?). Избавьтесь от предположения, что он должен напрямую контролироваться веб-приложением, и продумайте все другие триггеры (например, запланированное время простоя, тесты на устойчивость и т. Д.). В конце концов, ваше веб-приложение может «давать подсказки» любой системе, которую вы используете, но оно напрямую не контролирует nginx. Это слишком тесная связь.
Показать ещё 1 комментарий
0

Попробуйте выполнить настройку max_fails и fail_timeout модуля Upstream, например

upstream backend {
  server tomcat1.localhost max_fails=3 fail_timeout=15s;
  server tomcat2.localhost max_fails=3 fail_timeout=15s;
}

ОБНОВИТЬ:

Чтобы решить задачу "отметить как по требованию", вы можете поместить файл maintenance.html в общий каталог, обработать его через "файлы try" и создать код ошибки 503, если файл существует. Это помогает вам эффективно настраивать балансировщик.

  • 0
    Я не знаю, отвечает ли это на мой вопрос, пожалуйста, прочитайте вопрос снова. Я перефразировал это, чтобы сделать это более ясным.
  • 0
    @JohnDoDo не совсем понятно, особенно термин «трюк». Вы намерены вручную прекратить отправку трафика без обновления конфигурации Nginx? Что-то вроде "пометить как вниз" через HTTP-запрос?
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню