Sessões adesivas com o balanceador de carga do Apache para Socket.io 1.0

2

Eu tenho andado com o Apache como um balanceador de carga para o meu servidor Socket.io. Eu passei pelo seguinte tópico e agora tudo parece estar bem.

Configurando o Apache 2.4 mod_proxy_wstunnel para o Socket.IO 1.0

Eu configurei o Apache usando a seguinte configuração e agora as conexões estão sendo atualizadas para o WebSocket. Mas quando tento habilitar sessões fixas para a seguinte configuração, às vezes parece que o apache encaminha a solicitação de upgrade para rotear # 2 enquanto a pesquisa foi estabelecida na rota # 1. Quando isso acontece, a atualização falha e o websocket não está conectado. Como temos balanceadores (um para http e outro para ws), pensei que talvez o cookie definido pela rota http # 1 não possa ser acessado por rotas ws e é por isso que as sessões não são fixas entre http e ws.

Estou usando o apache 2.4.9

<VirtualHost *:8080>
    Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED

    ProxyRequests off

    ServerName localhost

    <Proxy balancer://http-localhost/>
        BalancerMember http://localhost:8081 route=1 keepalive=On smax=1 connectiontimeout=10 retry=600 timeout=900 ttl=900
        BalancerMember http://localhost:8082 route=2 keepalive=On smax=1 connectiontimeout=10 retry=600 timeout=900 ttl=900

        ProxySet lbmethod=byrequests
        ProxySet stickysession=ROUTEID
    </Proxy>

    <Proxy balancer://ws-localhost/>
        BalancerMember ws://localhost:8081 route=1 keepalive=On smax=1 connectiontimeout=10 retry=600 timeout=900 ttl=900
        BalancerMember ws://localhost:8082 route=2 keepalive=On smax=1 connectiontimeout=10 retry=600 timeout=900 ttl=900

        ProxySet lbmethod=byrequests
        ProxySet stickysession=ROUTEID
    </Proxy>

    RewriteEngine On
    RewriteCond %{REQUEST_URI}  ^/socket.io                [NC]
    RewriteCond %{QUERY_STRING} transport=websocket        [NC]
    RewriteRule /(.*)           balancer://ws-localhost/$1 [P,L]

    ProxyPass /socket.io balancer://http-localhost/socket.io
    ProxyPassReverse /socket.io balancer://http-localhost/socket.io
</VirtualHost>
    
por Peyman 04.05.2015 / 10:16

0 respostas