Кто-нибудь знает, как настроить функцию 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