我需要知道 apache 是否可以明智而自动地检测它的一个 balanerMembers 是否已关闭,从而免除其处理请求?
PS 后端服务器不会产生心跳。
谢谢
评论:我在 apache 2.4.7 中使用 mod_proxy。示例站点的配置如下。我的问题是,当其中一个后端服务器无响应时,我的负载平衡器仍会向死机的后端服务器发送请求,并且客户端会抱怨。以下配置有什么问题:
<Proxy balancer://X_Balancer>
BalancerMember http://firsthost.sth/ status=-SE
BalancerMember http://anotherhost.sth/ status=-SE
ProxySet lbmethod=bybusyness
</Proxy>
<VirtualHost IPofloadbalancer:80>
ServerName domainname
SSLProxyEngine On
Include /*/modsecurity.conf
<location />
ProxyPass balancer://X_Balancer/
ProxyPassReverse balancer://X_Balancer/
</location>
</VirtualHost>
答案1
如果你使用 mod_proxy在 Apache 2.2 中,您的配置选项有限,但 Apache 会检测无响应的 balancerMembers 并将请求分发给任何剩余的 balancerMembers。
阿帕奇2.4已经有了更多的选择,但是对于更高级的选项,通常最好使用更专业的负载平衡器软件。
根据您的评论:这取决于 balancerMember 停止响应的方式。如果仍然可以建立连接,但没有错误代码且没有响应,则设置timeout
和failontimeout
选项可能会有所帮助。
<Proxy balancer://X_Balancer>
BalancerMember http://firsthost.sth/ status=-SE timeout=5 retry=60
BalancerMember http://anotherhost.sth/ status=-SE timeout=5 retry=60
ProxySet lbmethod=bybusyness failontimeout=on
</Proxy>
timeout=5
连接超时(以秒为单位)。Apache httpd 等待后端发送/发送数据的秒数。failontimeout=on
如果设置,请求发送到后端后 IO 读取超时将强制工作器进入错误状态。工作器恢复的行为与其他工作器错误相同。
答案2
BalancerMember http://firsthost.sth/ connectiontimeout=5 retry=5 ping=2 <br>
BalancerMember http://anotherhost.sth/ connectiontimeout=5 retry=5 ping=2
按照上述方向尝试一下!查看 ajp 协议的变更。