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