Apache作为负载均衡器 - 强制中断持久连接


0

我用Apache 2.2通过设置负载均衡器 mod_proxymod_proxy_balancer。负载平衡工作正常,但有一种情况我无法找到任何配置选项,即使用到后端服务器的持久连接,当其中一个死亡(关闭,崩溃等)时,现有的连接到它仍然试图访问它。

有没有办法配置apache Load Balancer,以便它退出或重新创建与死后端服务器的连接?在LVS世界中,Ldirector在Proc FS下有一个选项,它可以控制:

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

设置此项时,将刷新持久会话/连接或死后端服务器,以便在下一个客户端请求时可以重新创建它们。

在Apache世界中有类似的东西吗?

附: Apache以什么方式检查后端服务器的状态?它是否尝试连接到某个端口或类似的东西?如果有人能够对此有所了解,那将是很棒的!

这是我的虚拟主机配置文件:

ServerAdmin admin@mysite.com     ServerName 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>


如果你没有被迫使用apache,也许你可以尝试haproxy haproxy.1wt.eu 。否则使用mod_proxy,您也可以尝试使用ttl,重试和超时值。检查文档: httpd.apache.org/docs/2.2/mod/mod_proxy.html 。据我所知,“活着”检查是在请求时完成的。
Tony

首先感谢回复:) TTL值会让用户每次都重新授权,然后根本不需要。 Connectiontimeout出现同样的问题。总而言之,当真实服务器在线时,我不想杀死或限制用户的连接,我想在它们连接的服务器死亡/变得不可用时重定向它们。 HAproxy是否具有此粘性删除选项,如过期静态模板?
Konstantin Boyanov

Answers:


0

如果你切换mod_proxy来使用需要(我认为)Java后端的ajp13连接,你可能能够实现会话粘性

我认为您正在寻找的“过期”选项存在于 HAProxy的

选项redispatch no option redispatch启用或禁用会话   连接失败时的重新分配可以用于   部分:默认值|前端|听听后端                                    是的|没有|是的|是参数:无

在HTTP模式下,如果cookie指定的服务器关闭,则客户端   肯定会坚持下去,因为他们不能冲洗饼干,所以   他们将无法再访问该服务。

指定“option redispatch”将允许代理中断它们
持久性并将它们重新分发到工作服务器。

它还允许重试最后一次连接到另一台服务器   多个连接失败。当然,它需要   “retries”设置为非零值。

这种形式是首选形式,取代了两种形式   “redispatch”和“redisp”关键字。

如果在“默认值”部分中启用了此选项,则可以是   通过添加“no”关键字在特定实例中禁用   在它之前。

另请参阅:“redispatch”,“retries”,“force-persist”

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.