apache mod_proxy 热备用 (或同等版本) 出现 502 错误

apache mod_proxy 热备用 (或同等版本) 出现 502 错误

有人知道如何配置热备用(+ 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进行设置。BalanceMemberfailontimeoutbalancer

https://stackoverflow.com/questions/169453/bad-gateway-502-error-with-apache-mod-proxy-and-tomcat/64805009#64805009

相关内容