Apache Load Balancer, два кластера - PullRequest
0 голосов
/ 17 апреля 2019

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

Инфраструктура 2 X веб-сервера (apache01 и apache02) - ОС Linux - Apache 2.2.34

2 X Oracle Satellite (satellite01 и satellite02) - приложение для кэширования - ОС Solaris

2 X Oracle WCS (wcs01 и wcs02) - см - ОС Solaris

Подробная информация о Oracle Satellite и Oracle WCS на данный момент не важна. Моя проблема связана с веб-сервером и должна быть более конкретной для Apache и распределения нагрузки.

Некоторые особенности среды. - Нет памяти / репликации сеанса между любыми серверами приложений. - satellite01 всегда отправляет запрос на wcs01, а satellite02 всегда отправляет запрос на wcs02 - Apache проверяет запрос и может отправить запрос * напрямую к серверам wcs, или * apache может отправить запрос на спутник. При необходимости спутник может переслать запрос в wcs.

пользователь -> Apache -> Спутник -> WCS

OR

пользователь -> Apache -> WCS

В настоящее время в конфигурации Apache определены два кластера. Один для спутниковых серверов и один для серверов WCS. Моя цель здесь - чтобы все запросы пользователей обслуживались с одних и тех же серверов. Например, если первый запрос поступает на wcs01, все последующие запросы должны обслуживаться с wcs01 или satellite01 и наоборот.

Моя текущая настройка следующая

<Proxy balancer://CLUSTER_1>
    Order deny,allow
    Allow from all

    Header add Set-Cookie "ROUTEID=%{UNIQUE_ID}e.%{BALANCER_WORKER_ROUTE}e; path=/; HttpOnly; secure" env=BALANCER_ROUTE_CHANGED
    Header add Set-Cookie "WCSID=%{UNIQUE_ID}e.%{BALANCER_WORKER_ROUTE}e; path=/; HttpOnly; secure" env=BALANCER_ROUTE_CHANGED
    ProxySet lbmethod=byrequests stickysession=ROUTEID nofailover=On timeout=5 maxattempts=5 failonstatus=555

    BalancerMember http://wcs01 route=firstNode connectiontimeout=15 retry=1 acquire=3000 keepalive=On
    BalancerMember http://wcs02 route=secondNode connectiontimeout=15 retry=1 acquire=3000 keepalive=On
</Proxy>

<Proxy balancer://CLUSTER_2>
    Order deny,allow
    Allow from all

    Header add Set-Cookie "ROUTEID=%{UNIQUE_ID}e.%{BALANCER_WORKER_ROUTE}e; path=/; HttpOnly; secure " env=BALANCER_ROUTE_CHANGED
    Header add Set-Cookie "SATELLITEID=%{UNIQUE_ID}e.%{BALANCER_WORKER_ROUTE}e; path=/; HttpOnly; secure"  env=BALANCER_ROUTE_CHANGED
    ProxySet lbmethod=byrequests stickysession=ROUTEID nofailover=On timeout=5 maxattempts=5 failonstatus=555

    BalancerMember http://satellite01 route=firstNode connectiontimeout=15 retry=1 acquire=3000 keepalive=On
    BalancerMember http://satellite02 route=secondNode connectiontimeout=15 retry=1 acquire=3000 keepalive=On
</Proxy>

<LocationMatch ^/(wcs)(.*)$>
    RequestHeader unset Authorization
    RequestHeader unset Proxy-Authorization
    RequestHeader unset WWW-Authenticate

    ProxyPassMatch balancer://CLUSTER_1/$1$2 nofailover=On
    ProxyPassReverse balancer://CLUSTER_1/$1$2
    ProxyPassReverseCookiePath / /
</LocationMatch>

<LocationMatch ^/(satellite)(.*)$>
    RequestHeader unset Authorization
    RequestHeader unset Proxy-Authorization
    RequestHeader unset WWW-Authenticate

    ProxyPassMatch balancer://CLUSTER_2/$1$2 nofailover=On
    ProxyPassReverse balancer://CLUSTER_2/$1$2
    ProxyPassReverseCookiePath / /
</LocationMatch>

Файлы cookie SATELLITEID и WCSID не используются, насколько я понимаю. Я также проверил серверы приложений. Я думаю, что могу игнорировать их сейчас.

Моим последним обновлением в вышеупомянутой конфигурации было "nofailover" для On внутри LocationMatch, потому что я его пропустил, но для его тестирования потребуется некоторое время. Итак, мой вопрос: я что-то упускаю? Правильно ли настроено, чтобы запрос оставался на том же пути?

...