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 em que não consigo encontrar nenhuma opção de configuração, ou seja, ao usar conexões persistentes com os servidores backend, quando um deles morre (desliga, falha, etc), as conexões existentes ainda tentam acessá-lo. Existe uma maneira de configurar o balanceador de carga do Apache para que ele saia ou recria as conexões para servidores de back-end mortos? 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 é definido, sessões / conexões persistentes de um servidor back-end inoperante serão liberadas para que, na próxima solicitação do cliente, elas possam ser recriadas.
Existe algo semelhante no mundo do Apache?
Obrigado em adavnce!
Felicidades, Konstantin Boyanov
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 dar um jeito nisso 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>