В настоящее время я разрабатываю приложение для веб-приложений, которое развертывается на сервере Tomcat. Из-за огромного числа пользователей я хотел бы распространять рабочую нагрузку на несколько экземпляров Tomcat. Я решил использовать Apache для балансировки нагрузки.Баланс загрузки Apache tomcat websocket
Теперь у меня возникла проблема с реализацией балансировки нагрузки Apache и липким сеансом для запросов веб-камер. Это моя конфигурация Apache:
ProxyRequests off
SSLProxyEngine on
RewriteEngine On
<Proxy balancer://http-localhost/>
BalancerMember https://mcsgest1.desy.de:8443/Whiteboard/ route=jvm1 keepalive=On smax=1 connectiontimeout=10 retry=600 timeout=900 ttl=900
BalancerMember https://mcsgest1.desy.de:8444/Whiteboard/ route=jvm2 keepalive=On smax=1 connectiontimeout=10 retry=600 timeout=900 ttl=900
ProxySet lbmethod=byrequests
ProxySet stickysession=JSESSIONID|sid scolonpathdelim=On
</Proxy>
<Proxy balancer://ws-localhost/>
BalancerMember wss://mcsgest1.desy.de:8443/Whiteboard/ route=jvm1 keepalive=On smax=1 connectiontimeout=10 retry=600 timeout=900 ttl=900
BalancerMember wss://mcsgest1.desy.de:8444/Whiteboard/ route=jvm2 keepalive=On smax=1 connectiontimeout=10 retry=600 timeout=900 ttl=900
ProxySet lbmethod=byrequests
ProxySet stickysession=JSESSIONID|sid scolonpathdelim=On
</Proxy>
RewriteCond %{HTTP:Upgrade} =websocket
RewriteRule /jddd/(.*) balancer://ws-localhost/$1 [P,L]
ProxyPassReverse /jddd/ balancer://ws-localhost/
RewriteCond %{HTTP:Upgrade} !=websocket
RewriteRule /jddd/(.*) balancer://http-localhost/$1 [P,L]
ProxyPassReverse /jddd/ balancer://http-localhost/
Первый запрос по протоколу HTTPS уравновешивается к порту 8443. Запрос модернизированы WSS также направляется 8443.
запрос второго протокола HTTPS содержит SESSIONID первого запроса: https://...&sid=C28C13EEEC525D203F8CA4E827605E0B.jvm1
Как я могу увидеть в файле журнала Apache, это SESSIONID оценивается для stickySession:
... Foun d значение C28C13EEEC525D203F8CA4E827605E0B.jvm1 для stickysession ИДС
... Найдено маршрут jvm1
... балансировочный: // HTTP-локальный: рабочий (htttps: //mcsgest1.desy.de: 8443/Интерактивная доска /) переписан htttps: //mcsgest1.desy.de: 8443/белая доска // файл = octocenter.xml & адрес = /// & с.и.д. = C28C13EEEC525D203F8CA4E827605E0B.jvm1
запрос второго протокола HTTPS еще на порт 8443, но после перехода на протокол websocket, ws-balancer не оценивать SESSIONID и переписывает в 8444:
... балансира: // WS-Localhost: работник (WSS: //mcsgest1.desy.de: 8444/Белая доска /) переписана WSS : //mcsgest1.desy.de: 8444/whiteboard // whiteboardendpoint
Что мне нужно изменить в конфигурации Apache, чтобы включить stickysession также для протокола wss? Мне действительно нужны два балансира (http и ws), чтобы сбалансировать websockets?