Может ли балансировщик нагрузки Apache определить, не работает ли один из его членов?
Мне нужно знать, может ли Apache разумно и автоматически определить, не работает ли один из его balanerMembers, и, следовательно, освободить его от обслуживания запросов?
PS Внутренние серверы не будут генерировать пульс.
Спасибо
Комментарии: я использую mod_proxy в apache 2.4.7. Моя конфигурация для примера сайта похожа на приведенную ниже. Моя проблема заключается в том, что один из внутренних серверов перестает отвечать на запросы, Мой балансировщик нагрузки по-прежнему отправляет запросы на неработающий внутренний сервер и клиенты жалуются. Что не так с приведенным ниже конфигом:
<Proxy balancer://X_Balancer>
BalancerMember http://firsthost.sth/ status=-SE
BalancerMember http://anotherhost.sth/ status=-SE
ProxySet lbmethod=bybusyness
</Proxy>
<VirtualHost IPofloadbalancer:80>
ServerName domainname
SSLProxyEngine On
Include /*/modsecurity.conf
<location />
ProxyPass balancer://X_Balancer/
ProxyPassReverse balancer://X_Balancer/
</location>
</VirtualHost>
2 ответа
Если вы используете mod_proxy в Apache 2.2, у вас ограниченные параметры конфигурации, но Apache будет обнаруживать не отвечающие на балансировщика и отправлять запросы всем оставшимся балансировщикам.
В Apache 2.4 уже есть несколько дополнительных опций, но для более сложных опций вам, как правило, лучше использовать более специализированное программное обеспечение для балансировки нагрузки.
После ваших комментариев: Это зависит от того, как BalmrMember перестает отвечать. Если соединение все еще может быть установлено, но нет кода ошибки и ответа нет, вы можете воспользоваться настройкой timeout
а также failontimeout
опции.
<Proxy balancer://X_Balancer>
BalancerMember http://firsthost.sth/ status=-SE timeout=5 retry=60
BalancerMember http://anotherhost.sth/ status=-SE timeout=5 retry=60
ProxySet lbmethod=bybusyness failontimeout=on
</Proxy>
timeout=5
Тайм-аут соединения в секундах. Число секунд, в течение которых Apache httpd ожидает данные, отправленные с / на серверную часть.failontimeout=on
Если установлено, тайм-аут чтения ввода-вывода после отправки запроса к бэкэнду вынудит работника в состояние ошибки. Восстановление работника ведет себя так же, как и другие ошибки работника.
BalancerMember http://firsthost.sth/ connectiontimeout = 5 retry = 5 ping = 2
BalancerMember http://anotherhost.sth/ connectiontimeout = 5 retry = 5 ping = 2
Попробуйте в вышеуказанном направлении! Просмотрите изменения в протоколах ajp.