Назад | Перейти на главную страницу

502 ошибки с горячим резервом apache mod_proxy (или эквивалентным)

Кто-нибудь знает, как настроить функцию mod_proxy горячего резервирования (+ H), чтобы переключение происходило немедленно (без того, чтобы ни один пользователь не получил ошибку 502) во время завершения работы?

Мы не стремимся к реальной балансировке нагрузки, мы просто хотим, чтобы вторичный сервер взял на себя управление, а мы отключили первичный.

Проблема в том, что всякий раз, когда основной выходит из строя, я могу пропустить один недопустимый запрос, что приводит к ошибке HTTP 502, достигающей конечного пользователя, до того, как второстепенный фактически вступит во владение.

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>

Если вы сначала явно отключите основной элемент балансировки (перед отключением основного сервера), Apache с радостью направит запрос второму элементу балансировки. Поглощение происходит немедленно.

Для этого сначала включите диспетчер балансировщика с помощью config:

<Location /lb>
    SetHandler balancer-manager
</Location>

Затем вы можете интерактивно или программно включить / отключить элемент балансировщика, открыв / lb.

Вопреки комментарию karmawhore, такая установка горячего резервирования не имеет ничего общего с проверкой работоспособности.

Думаю, можно использовать директиву ErrorDocument. Если вы укажете код ошибки, которую ищете, и вместо статической страницы (например, /missing.html) вы можете указать страницу PHP, которая может обрабатывать перенаправление за вас. Что-то вроде:

ErrorDocument 502 /redir.php

Тогда в redir.php есть что-то вроде:

<?php
header("Location: ...page that was asked for...");
?>

Apache не поддерживает необходимые для этого проверки работоспособности. Даже при проверках работоспособности между проверками есть окно, в котором запросы могут быть недействительными.

Вы можете написать что-то, что неоднократно тестировало небольшой статический файл, чтобы заставить прокси-сервер распознавать сбой балансировщика.

Я вспомнил старое решение mod_perl:

http://search.cpan.org/~mgregoro/Apache-HealthCheck-0.01/lib/Apache/HealthCheck.pm