Рейтинг:0

Как настроить прокси-сервер балансировки нагрузки Apache с горячим резервом BalancerMember

флаг vn

У меня есть два док-контейнера, в каждом из которых запущено приложение на порту 8080. Это приложение имеет конечную точку REST «/status», которая может сигнализировать, есть ли у приложения ресурсы для принятия другого запроса пользователя. Пользовательский запрос будет перенаправлен и сбалансирован для двух контейнеров прокси-сервером Apache с балансировкой нагрузки.

Чего я хочу достичь:

  1. Если приложение в контейнере сообщает, что не хочет получать больше запросов, балансировщик не будет пересылать запросы в этот контейнер.
  2. Если каждый работающий сервер приложений сигнализирует о том, что он не получает никаких запросов, один из этих серверов все равно должен получать запросы.

Что я настроил:

<VirtualHost *:80>
    ProxyRequests off
    ProxyPreserveHost On
    
    ProxyHCExpr status_ok {hc('body') ~ /Status: ok/}
    
    <Proxy balancer://application-cluster>
            BalancerMember http://application1:8080 route=worker1 hcexpr=status_ok hcmethod=get hcuri=/status
            BalancerMember http://application2:8080 route=worker2 hcexpr=status_ok hcmethod=get hcuri=/status
            BalancerMember http://application1:8080 route=standby status=+H
            ProxySet lbmethod=byrequests 
    </Proxy>
    
    <Location /balancer-manager>
            SetHandler balancer-manager
    </Location>

    ProxyPass /balancer-manager !

    ProxyPass / balancer://application-cluster/
    ProxyPassReverse / balancer://application-cluster/
</VirtualHost>

Как вы можете видеть здесь, application1 определяется как горячий резерв и должен быть «жертвой» для обработки запросов, если все остальные BalanceMembers находятся «в автономном режиме» для новых запросов.

Что работает:

  • Запросы сбалансированы по нагрузке для обоих BalancerMembers.
  • application1 и application2 могут сигнализировать о том, что не получают никаких запросов. В этом случае оба BalancerMembers показывают ожидаемый статус «Init HcFl» на странице Balancer Manager.

Что не работает:

  • application1 не отображается как горячий резерв на странице диспетчера баланса
  • Поэтому запросы не будут перенаправлены в application1

Что возможно, но я не хочу делать:

  • Если я настрою горячий резерв для переадресации на другой порт в приложении 1, он будет отображаться и перенаправлять запросы на этот порт.

Похоже, что Apache просто удаляет BalancerMember, если хост и порт равны другому BalancerMember. Я что-то упускаю или есть другой способ добиться того, чего я хочу?

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.