Чтобы использовать Apache в качестве балансировщика нагрузки с липким сеансом - Требуется балансировка нагрузки на основе липкого сеанса
Я использую Apache в качестве LB с липкой обработкой сеанса (используя 2 кота в качестве члена балансировки).
Ниже приведен конфиг. сделано мной на уровне Apache -
<Proxy balancer://mycluster>
(...)
ProxySet stickysession=JSESSIONID
BalancerMember http://{ip/hostname of tomcat1 backed:port} route=tomcat1
BalancerMember http://{ip/hostname of tomcat2 backed:port} route=tomcat2
</Proxy>
ProxyPass / “balancer://mycluster”
PorxyPassReverse / “balancer://mycluster”
Определение маршрута JVM на уровне Tomcat -
(...)
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1"> ##where the jvmroute should be the route value set at apache config.
(...)
то же самое было определено и для Tomcat 2
(...)
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2"> ##where the jvmroute should be the route value set at apache config.
(...)
Все работает нормально, но главный недостаток этой настройки - если tomcat1 выходит из строя, то сеанс, привязанный к tomcat1, также умирает и не маршрутизируется к tomcat 2.
Есть ли способ реплицировать липкий сеанс также на tomcat 2, или просто, если tomcat1 умирает, тогда сеанс переносится на tomcat 2 и наоборот?
1 ответ
Использование "липких сессий" - это всего лишь механизм, гарантирующий, что все запросы на один и тот же сеанс направляются на один и тот же узел, когда возможно использование нескольких узлов. Если вы хотите перенести сессию, вам нужна кластеризация.
Существует множество руководств по кластеризации с Tomcat. На странице презентаций Tomcat также есть несколько презентаций, посвященных тому , как работает кластеризация и как ее настроить.
Обратите внимание, что вам, возможно, придется внести некоторые изменения в свое приложение, чтобы кластеризация работала правильно.