현재 Tomcat 서버에 배포 된 websocket 애플리케이션을 개발 중입니다. 엄청난 사용자 수 때문에 작업 부하를 여러 Tomcat 인스턴스에 배포하고 싶습니다. 로드 균형 조정을 위해 Apache를 사용하기로 결정했습니다.Apache로드 밸런스 tomcat websocket
이제 웹 소켓 요청에 대한 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
이 sessionID와는 stickySession에 대한 평가 :
... Foun D 값 C28C13EEEC525D203F8CA4E827605E0B.jvm1 stickysession SID
... 찾을 경로 jvm1
... 밸런서 : // HTTP-로컬 호스트 : 노동자 (htttps : //mcsgest1.desy.de : 8443/화이트 보드 /) htttps에 다시 : //mcsgest1.desy.de : 8443/화이트 보드 // 파일 = octocenter.xml & 주소 = /// & SID = C28C13EEEC525D203F8CA4E827605E0B.jvm1
을 두 번째 HTTPS 요청이 계속됩니다 ws-balancer는 포트 8443에서 websocket 프로토콜로 업그레이드 한 후 sessionid를 평가하고 8444로 다시 작성하지 :
... 분산 : // WS-로컬 호스트를 : 노동자 을 (WSS : //mcsgest1.desy.de : 8444/화이트 보드 /) WSS에 다시 : //mcsgest1.desy.de : 8444/화이트 보드 // whiteboardendpoint
wss 프로토콜에도 stickysession을 사용하려면 Apache 구성에서 무엇을 변경해야합니까? 웹 소켓의 균형을 맞추기 위해 두 개의 밸런서 (http와 ws)가 정말로 필요합니까?