Apache como balanceador de carga - forçando uma interrupção na conexão persistente

0

Eu configurei um balanceador de carga com o Apache 2.2 via mod_proxy e mod_proxy_balancer . O balanceamento de carga funciona muito bem, mas há um caso que não consigo encontrar nenhuma opção de configuração, ou seja, ao usar conexões persistentes para os servidores de backend, quando um deles morre (desliga, falha, etc), as conexões existentes para ele ainda tentam acessá-lo.

Existe uma maneira de configurar o Balanceador de carga do apache para que ele saia ou recria as conexões com servidores back-end inativos? No mundo LVS, o Ldirector tem uma opção sob o Proc FS, que rege exatamente isso:

/proc/sys/net/ipv4/vs/expire_quiescent_template

Quando isso for definido, sessões / conexões persistentes ou um servidor back-end inativo serão liberados para que, na próxima solicitação do cliente, eles possam ser recriados.

Existe algo semelhante no mundo do Apache?

P.S. De que maneira o Apache verifica o status dos servidores de back-end? Ele tenta se conectar a alguma porta ou algo parecido? Seria ótimo se alguém pudesse lançar alguma luz sobre isso também!

Aqui está o meu arquivo de configuração do host virtual:

    ServerAdmin [email protected]     NomeDoServidor myapp.mysite.com

DocumentRoot /srv/www/vhosts/myapp.mysite.com

ErrorLog /var/log/apache2/myapp.mysite.com-error_log
CustomLog /var/log/apache2/myapp.mysite.com-access_log combined

HostnameLookups Off
UseCanonicalName Off
ServerSignature On
ScriptAlias /cgi-bin/ "/srv/www/vhosts/myapp.mysite.com/cgi-bin/"

<Location /balancer-manager>
    SetHandler balancer-manager
    Order Deny,Allow
    Deny from all
    Allow from all
</Location>

<Location /server-status>
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from bmf.intern.netz
</Location>

Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
<Proxy balancer://myapp>
    BalancerMember http://172.22.1.133:777/ loadfactor=10 route=1 connectiontimeout=200ms
    BalancerMember http://172.22.1.134:777/ loadfactor=10 route=2 connectiontimeout=200ms
    ProxySet stickysession=ROUTEID
    ProxySet lbmethod=byrequests
</Proxy>

ProxyPass /balancer-manager !
ProxyPass /server-status !
ProxyPass / balancer://myapp/ lbmethod=byrequests
ProxyPassReverse / balancer://myapp/

<Directory "/srv/www/vhosts/myapp.mysite.com/cgi-bin">
    AllowOverride None
    Options +ExecCGI -Includes
    Order allow,deny
    Allow from all
</Directory>

<IfModule mod_userdir.c>
    UserDir public_html
    Include /etc/apache2/mod_userdir.conf
</IfModule>


#
# This should be changed to whatever you set DocumentRoot to.
#
<Directory "/srv/www/vhosts/myapp.mysite.com">

    Options Indexes FollowSymLinks
    AllowOverride None

    Order allow,deny
    Allow from all

</Directory>

    
por Konstantin Boyanov 16.05.2013 / 17:00

1 resposta

0

Se você alterar o mod_proxy para usar a conexão ajp13, o que requer (eu acho) um backend Java, você poderá obter a aderência da sessão

Acho que a opção "expirar" que você está procurando está presente em HAProxy

option redispatch no option redispatch Enable or disable session redistribution in case of connection failure May be used in sections: defaults | frontend | listen | backend yes | no | yes | yes Arguments : none

In HTTP mode, if a server designated by a cookie is down, clients may definitely stick to it because they cannot flush the cookie, so they will not be able to access the service anymore.

Specifying "option redispatch" will allow the proxy to break their
persistence and redistribute them to a working server.

It also allows to retry last connection to another server in case of multiple connection failures. Of course, it requires having "retries" set to a nonzero value.

This form is the preferred form, which replaces both the "redispatch" and "redisp" keywords.

If this option has been enabled in a "defaults" section, it can be disabled in a specific instance by prepending the "no" keyword before it.

See also : "redispatch", "retries", "force-persist"

    
por 17.05.2013 / 19:37