Репликация сеанса P2P Hazelcast для веб-кластеризации Tomcat6 — сбой синхронизации сеанса

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

Что я пытаюсь сделать?

  1. Настройте два экземпляра tomcat с репликацией сеанса P2P Hazelcast для tomcat6, обратившись к этому руководство
  2. Я поместил файлы hazelcast-all-.jar, hazelcast-tomcat-sessionmanager-.jar и hazelcast.xml в папку $CATALINA_HOME/lib/
  3. Обновлены конфигурации прослушивателя и контекста, как показано ниже.
  4. Обновлен Tomcat Failover и параметр jvmRoute, как показано ниже.
  5. До сих пор мне удавалось вызвать экземпляры tomcat, которые подключаются друг к другу экземплярами hazelcast, я вижу это в журналах tomcat.
  6. Пользователи подключаются к балансировщику нагрузки и перенаправляются к членам балансировщика — здесь нет проблем.
  7. Но когда я отключаю один из экземпляров tomcat, чтобы протестировать отказоустойчивость и убедиться, что пользователи, подключенные к экземпляру tom, могут продолжить работу с экземпляром cat в том же сеансе и без повторного входа в систему. Но я считаю, что балансировщик нагрузки, похоже, создает новый сеанс и заставляет пользователя снова войти в систему, чтобы установить сеанс с экземпляром cat. Я подозреваю, что это, но не уверен.
  8. Или сеансы не реплицируются и не синхронизируются в обоих экземплярах hazelcast? - Это происходит
  9. У нас есть клиент, с помощью которого я могу отслеживать сеансы hazelcast? - Теперь я делаю

Я ссылался на эту проблему, которая вместо этого относится к настройке hazelcast.sessionId JSESSIONID, но не содержит никаких подробностей о том, как это сделать.

Версии -

Apache Haus - 2.2.32 (for load balancing)
Hazelcast - 3.8.6
Java 8
Tomcat - 6.0.48
Session objects that need to be clustered are Serializable.
stickysession=JSESSIONID

Конфигурация балансировщика нагрузки

 <Proxy balancer://mycluster>
        BalancerMember http://IPAddress1:8080/app/  route=tom
        BalancerMember http://IPAddress2:8080/app/  route=cat
        ProxySet lbmethod=byrequests stickysession=JSESSIONID|jsessionid
 </Proxy>

    ProxyPass /app/ balancer://mycluster/ 
    ProxyPassReverse /app/ balancer://mycluster/

экземпляр Тома — server.xml

<Listener className="com.hazelcast.session.P2PLifecycleListener"/>
<Engine name="Catalina" defaultHost="localhost"  jvmRoute="tom">

экземпляр тома — context.xml

<Manager className="com.hazelcast.session.HazelcastSessionManager" sticky=true/>

экземпляр кошки — server.xml

<Listener className="com.hazelcast.session.P2PLifecycleListener"/>
<Engine name="Catalina" defaultHost="localhost"  jvmRoute="cat">

экземпляр кошки — context.xml

<Manager className="com.hazelcast.session.HazelcastSessionManager" sticky=true/>

Обновлять:

Я полагаю, что приведенная ниже проблема аналогична ошибке синхронизации сеанса.


person Vikram Palakurthi    schedule 26.10.2017    source источник


Ответы (2)


Хотя у меня нет большого опыта использования HTTP-сервера Apache в качестве балансировщика нагрузки, просмотрев на этой странице, я думаю, вам нужно обновить конфигурацию балансировщика нагрузки следующим образом:

<Proxy balancer://mycluster>
    BalancerMember http://IPAddress1:8080/app/  route=tom
    BalancerMember http://IPAddress2:8080/app/  route=cat
    ProxySet lbmethod=byrequests stickysession=hazelcast.sessionId
</Proxy>

ProxyPass /app/ balancer://mycluster/ 
ProxyPassReverse /app/ balancer://mycluster/

У нас есть клиент, с помощью которого я могу отслеживать сеансы hazelcast?

Вы можете использовать Центр управления Hazelcast для мониторинга кластер и просмотрите записи сеансов, которые хранятся в Hazelcast IMap. Все сеансы хранятся в Hazelcast IMap с указанием их идентификаторов. Обратите внимание, что вам необходимо включить Центр управления на элементах вашего кластера, прежде чем вы сможете видеть какие-либо данные в Центре управления.

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

person emre    schedule 27.10.2017
comment
Спасибо, вы были очень близки и частично правы. Пожалуйста, смотрите мой ответ для конфигурации, которая работала. Репликация сеанса теперь работает отлично. - person Vikram Palakurthi; 18.01.2018

У меня это работает с приведенной ниже конфигурацией. Решил, что нужны и jsessionid, и hazelcast.sessionid, теперь репликация сеанса работает отлично.

<Proxy balancer://mycluster>
    BalancerMember http://IPAddress1:8080/app/  route=tom
    BalancerMember http://IPAddress2:8080/app/  route=cat
    ProxySet lbmethod=byrequests stickysession=JSESSIONID|jsessionid|hazelcast.sessionId
</Proxy>

ProxyPass /app/ balancer://mycluster/ 
ProxyPassReverse /app/ balancer://mycluster/
person Vikram Palakurthi    schedule 18.01.2018