У меня есть два сервера Tomcat, развернутые за балансиром нагрузки Nginx, который использует proxy_pass
для маршрутизации запросов. Это хорошо работает, но в моем приложении теперь используется прецедент, для которого мне нужно вытащить один из серверов из кластера (но продолжайте его работу), иметь на нем веб-приложение, что-то сделать, и когда это произойдет, Tomcat назад.
Прямо сейчас я перезагружаю конфигурацию Nginx вручную и отмечаю сервер down
чтобы дать время, чтобы приложение выполнило свою задачу, но мне хотелось бы, чтобы у веб-приложения "трюк" Nginx, что его сервер Tomcat не работает, , затем присоединитесь к кластеру.
Я думаю, что мне нужно иметь какой-то пользовательский Tomcat Connector, который контролируется веб-приложением, но все в Интернете - это проксирование с помощью Apache или использование AJP, и это не то, что мне нужно, мне нужно, чтобы это был HTTP-прокси с Nginx.
У кого-нибудь есть некоторые указания на то, как я могу это сделать?
Когда tomcat опустится, ваш webapp пойдет с ним - вы не должны полагаться на него, чтобы выполнить какую-либо значимую работу, чтобы задержать завершение работы. Скорее имеют правильные процедуры управления системами, чтобы сначала изменить LB, а затем закрыть tomcat. Это решение, внешнее по отношению к tomcat, - и должно быть легко, как вы говорите, что вы вытаскиваете из своего кластера один из кошек.
Для незапланированных простоев используйте LB-детектирование того, что tomcat не работает, как описано @mikhailov.
Попробуйте выполнить настройку 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, если файл существует. Это помогает вам эффективно настраивать балансировщик.