У нас есть кластер tomcat с балансировщиком нагрузки (haproxy). В рамках нашего сценария обновления мы хотели бы заморозить одного кота в кластере из 3 котов, дождавшись обработки всех запросов для этого конкретного кота. и только тогда мы хотели бы закрыть его и обновить веб-приложение, работающее на этом коте.
Наш вопрос:
Как наш сценарий может указать, что кот полностью голоден (все запросы были приняты)?
Есть ли API, который предоставляет сам tomcat? или, может быть, мы можем запросить эту информацию у haproxy?
Спасибо!
РЕДАКТИРОВАТЬ: Вот мой файл конфигурации haproxy:
global
debug
stats socket /etc/haproxy/haproxysock level admin
defaults
mode http
timeout connect 5s
timeout queue 300s
timeout client 300s
timeout server 300s
frontend http-in
bind *:8080
default_backend NG
backend NG
cookie JSESSIONID prefix
server 10.0.110.44 10.0.110.44:8080 cookie JSESSIONID_SERVER_1 check maxconn 500
server 10.0.110.45 10.0.110.45:8080 cookie JSESSIONID_SERVER_2 check maxconn 500
#server 10.0.110.41 10.0.110.41:8080 cookie JSESSIONID_SERVER_3 check maxconn 500
option httpclose
option forwardfor
balance roundrobin
option redispatch
retries 15
listen admin
bind *:8081
stats enable
stats refresh 1s
С точки зрения балансировщика нагрузки трудно утверждать о полном голодании. На самом деле невозможно сказать, есть ли еще клиент, у которого есть JSESSIONID
файл cookie с префиксом для вашего NOLB
сервер.
Я вижу как минимум два способа продвинуться вперед с этим
Если у Tomcat есть способ перечислить допустимые сеансы, это обеспечит более безопасный способ (через сервлет или аналогичный).
Обратите внимание: если вы ограничиваете себя остановкой только полностью истощенных серверов приложений, стойкий клиент может удержать вас от Когда-либо перезапуск.