Я надеюсь, что смогу четко изложить свою проблему ...
В конфигурации 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, потому что я его пропустил, но для его тестирования потребуется некоторое время.
Итак, мой вопрос: я что-то упускаю? Правильно ли настроено, чтобы запрос оставался на том же пути?