Apache 2.2 mod_proxy отработка отказа / балансировка нагрузки

Я использую mod_proxy_balancer для управления аварийным переключением внутренних серверов (tcServers). Бэкэнд-серверы могут возвращать код ошибки вместо того, чтобы отключить тайм-аут в случае сбоя какой-либо другой бэкэнд-службы, такой как NFS, и мы хотим, чтобы такие серверы также отмечались как отказавшие узлы. Следовательно, мы используем директиву failonstatus.

<Proxy balancer://awstestbalancer>
    ProxySet failonstatus=503 
    BalancerMember https://host:port/context/ retry=30
    # the hot standby
    BalancerMember https://host:port/context/ status=+H retry=0
</Proxy>
ProxyPass /context balancer://awstestbalancer
ProxyPassReverse /context balancer://awstestbalancer

В настоящее время отработка отказа отлично работает с одним глюком. Когда активный узел отказывает, пользователь получает ошибку 503 и со следующего запроса резервный сервер вступает во владение.

Я не хочу, чтобы даже один запрос потерпел неудачу. Не можете переключиться при отказе mod_proxy, не возвращая ли клиенту ошибку? В случае сбоя активного узла я хочу, чтобы mod_proxy попытался использовать Standby для того же запроса, а не только для последующего запроса!

Я также попробовал следующие настройки, но они не работали. Использование APACHE 2.2.59

<Proxy balancer://awstestbalancer>
BalancerMember https://host:port/context route=tcserver1 loadfactor=1
BalancerMember https://host:port/context route=tcserver2 loadfactor=1
ProxySet lbmethod=bybusyness
ProxySet nofailover=Off
ProxySet stickysession=JSESSIONID
</Proxy>
ProxyPass /context balancer://awstestbalancer
ProxyPassReverse /context balancer://awstestbalancer

А ТАКЖЕ

<Proxy balancer://awstestbalancer>
BalancerMember https://host:port/context route=tcserver1 loadfactor=1 ping=5
BalancerMember https://host:port/context route=tcserver2 loadfactor=1 ping=5
ProxySet lbmethod=bytraffic
ProxySet nofailover=On
ProxySet stickysession=JSESSIONID
</Proxy>
ProxyPass /context balancer://awstestbalancer
ProxyPassReverse /context balancer://awstestbalancer

Thanks!!!
Sid

1 ответ

Следующая конфигурация будет работать. если бэкэнд находится на AWS и его статус часто меняется, вы можете попытаться уменьшить время ожидания соединения.

      <Proxy balancer://awstestbalancer>
    BalancerMember https://host:port/context/ connectiontimeout=5
    BalancerMember https://host:port/context/ connectiontimeout=5
</Proxy> 
ProxyPass /context balancer://awstestbalancer failonstatus=500,501,502,503,504
ProxyPassReverse /context balancer://awstestbalancer
Другие вопросы по тегам