2016-06-01 53 views
3

私は現在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要求が最初の要求のセッションIDが含まれてい

に転送されます:これは私のApacheの設定である 私は、Apacheのログファイルで見ることができるようにhttps://...&sid=C28C13EEEC525D203F8CA4E827605E0B.jvm1

は、このセッションIDはstickySessionのために評価されます

...フン// HTTP-はlocalhost:労働者 (htttps://mcsgest1.desy.de:8443 /ホワイトボードstickysession SID

...見つかりルートJVM1

...バランサのd値C28C13EEEC525D203F8CA4E827605E0B.jvm1 //mcsgest1.desy.de::/) htttpsに書き換え?8443 /ホワイトボード//ファイル= octocenter.xml &アドレス= /// & SIDは= C28C13EEEC525D203F8CA4E827605E0B.jvm1

二HTTPS要求がまだありますws-balancerはwebsocketプロトコルにアップグレードした後、ws-balancerはセッションIDを評価し、8444に書き換えていない:

...バランサ:// localhostのWS-を:労働者 (WSS://mcsgest1.desy.de:8444 /ホワイトボード/) WSSに書き換え://mcsgest1.desy.de:8444/Whiteboard // whiteboardendpoint

wssプロトコルのstickysessionを有効にするには、Apacheの設定を変更する必要がありますか? Webソケットのバランスを取るために本当に2つのバランサ(httpとws)が必要ですか?

答えて

2

最初のhttp要求には既にHTTP Cookieがあり、正しいインスタンスに属しているため、Websoketsには別のバランサは必要ありません。

あなたはちょうどあなたがwebsoketsのプロキシモジュールをロードしていることを確認し、接続がアップグレードを検出し、手動でクッキー

の粘着性の一部に依存した経路要求必要 - 例えば

をmod_proxy_wstunnel

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> 

RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC] 
RewriteCond %{HTTP:CONNECTION} Upgrade$ [NC] 
RewriteCond %{HTTP_COOKIE} ^.*(JSESSIONID|sid)=([^=]*)\.jvm1 [NC] 
RewriteRule .* wss://mcsgest1.desy.de:8443%{REQUEST_URI} [P,L] 

RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC] 
RewriteCond %{HTTP:CONNECTION} Upgrade$ [NC] 
RewriteCond %{HTTP_COOKIE} ^.*(JSESSIONID|sid)=([^=]*)\.jvm2 [NC] 
RewriteRule .* wss://mcsgest1.desy.de:8444%{REQUEST_URI} [P,L] 

RewriteRule /jddd/(.*) balancer://http-localhost$1 [P,L] 

ProxyPreserveHost On 
ProxyRequests Off 

ProxyPass /jddd/ balancer://http-localhost 
ProxyPassReverse /jddd/ balancer://http-localhost 

説明:

# if header upgrade = WebSocket 
RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC] 
# and header connection contains Upgrade (header may be like this: connection=keep-alive, upgrade) 
RewriteCond %{HTTP:CONNECTION} Upgrade$ [NC] 
# and header cookie contains JSESSIONID or sid, ending with sticky part - .jvm1 in that case 
RewriteCond %{HTTP_COOKIE} ^.*(JSESSIONID|sid)=([^=]*)\.jvm1 [NC] 
#than we route request to application server via mod_proxy (P flag) and end rewrite rule check 
RewriteRule .* wss://mcsgest1.desy.de:8443%{REQUEST_URI} [P] 
関連する問題