有人知道如何配置热备用(+ H)mod_proxy 功能,以便在关机期间立即发生接管(甚至没有一个用户收到 502)错误?
我们并不是在寻求真正的负载平衡,我们只是希望在关闭主服务器时由辅助服务器接管。
问题是,每当主服务器出现故障时,我都能发送一个无效请求,导致在辅助服务器实际接管之前向最终用户发送 502 HTTP 错误。
Listen 80
<VirtualHost 127.0.0.1:80>
ServerName domain.com
ProxyPass / balancer://balance/
<Proxy balancer://balance/>
BalancerMember http://primary_ip:80
BalancerMember http://secondary_ip:80 status=+H
</Proxy>
</VirtualHost>
答案1
如果您首先明确禁用主平衡器成员(在关闭主服务器之前),Apache 将很乐意将请求路由到辅助平衡器成员。接管立即发生。
为此,首先使用配置启用平衡器管理器:
<Location /lb>
SetHandler balancer-manager
</Location>
然后,您可以通过访问/lb以交互方式或编程方式启用/禁用平衡器成员。
与 karmawhore 的评论相反,像这样的热备用设置与健康检查无关。
答案2
Apache 不支持健康检查,而健康检查是必需的。即使有健康检查,检查之间也存在一个窗口,在此期间请求可能无效。
您可以编写一些代码来反复测试一个小的静态文件,以强制代理识别平衡器已发生故障。
我记得一个旧的 mod_perl 解决方案:
http://search.cpan.org/~mgregoro/Apache-HealthCheck-0.01/lib/Apache/HealthCheck.pm
答案3
我认为您可以使用 ErrorDocument 指令。如果您指定要查找的错误代码,而不是静态页面(如 /missing.html),则可以指定一个可以为您处理重定向的 PHP 页面。例如:
ErrorDocument 502 /redir.php
然后在 redir.php 中有类似的内容:
<?php
header("Location: ...page that was asked for...");
?>
答案4
您必须结合级别设置和级别上的设置 timeout
进行设置。BalanceMember
failontimeout
balancer