我已经通过 mod_proxy 和 mod_proxy_balancer 使用 Apache 2.2 设置了一个负载平衡器。负载平衡工作正常,但有一种情况我找不到任何配置选项,即在使用与后端服务器的持久连接时,当其中一个服务器死机(关闭、崩溃等)时,与它的现有连接仍会尝试访问它。有没有办法配置 Apache 负载平衡器,使其退出或重新创建与死机后端服务器的连接?在 LVS 世界中,Ldirector 在 Proc FS 下有一个选项可以控制这一点:
/proc/sys/net/ipv4/vs/expire_quiescent_template
当设置此项时,持久会话/连接或死亡的后端服务器将被刷新,以便在下一个客户端请求时可以重新创建它们。
Apache 世界中是否存在类似的东西?
提前致谢!
干杯,康斯坦丁·博亚诺夫
PS Apache 以什么方式检查后端服务器的状态?它是否尝试连接到某个端口或类似的东西?如果有人能对此有所说明那就太好了!
这是我的虚拟主机配置文件:
服务器管理员[电子邮件保护] 服务器名称 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>